【问题标题】:Systrace| No "performTraversals" on application thread or no application thread系统跟踪|应用程序线程上没有“performTraversals”或没有应用程序线程
【发布时间】:2013-07-31 00:16:26
【问题描述】:

在此 Google IO video 中,我观察到“performTraversals”位于其应用程序线程(ndroid.slowlist)上。在我的report 中,“performTraversals”位于线程 PID 530(android.systemui)上。而且只有代表活动和dlgs的行,没有像这样one(代表应用程序线程的最后一行(10440:m.jv.falcon.pro))在systrace中明确表示我的应用程序的线程)我在网上找到的。但是,如果我使用设置进行 systrace。我可以观察到一个代表“android.setting”的线程。谁能告诉我为什么我不能为自己的应用程序获取应用程序线程?非常感谢!

【问题讨论】:

  • 启用“view”标签后,您应该会看到任何正在执行视图层次结构的线程的跟踪。看起来你有用于surfaceflinger(pid 126)和各种缓冲区队列的行,还有一些用于systemui,但没有应用程序数据。您能否确认该应用程序在跟踪期间被积极使用?你不会得到不做任何事情的线程的行。
  • 嗨! Fadden,该应用程序在跟踪期间处于活动状态。你可以从我的报告中观察到我经历了几个活动,甚至打开了一个对话框(AtchDlg 列)。我猜这需要遍历视图树?

标签: android performance-testing systrace


【解决方案1】:

究竟出了什么问题取决于您运行的 Android 版本以及您为启用跟踪标记所做的操作。

每个进程都有自己的已启用跟踪标记副本。如果一个进程认为没有启用任何标签,它就不会向跟踪提供任何数据。更新标签时,您要么需要向所有进程发送广播(如果您通过该接口更新它们,开发人员设置将这样做),或者在标签更新后使用adb shell stop; adb shell start 重新启动框架。 systrace documentation中的例子使用的是后一种方法。

所以看起来 systemui 进程看到了更新的标签(“gfx”和“view”),但不知何故您的应用进程没有。我希望,如果您完成了 systrace 文档中的所有步骤(使用 python 脚本设置标签、重新启动框架、启动应用程序、捕获跟踪),它会起作用。

【讨论】:

  • 嗨!法登。感谢您指出广播标签更改,我认为这就是应用程序线程消失的原因。我无法使用 python 脚本来解决我在this 线程中遇到的问题。我现在使用的是 Nexus 7,所以我可以在 DDMS 上使用 systrace 工具。但是,选择标签并单击确定后,它似乎还没有广播到应用程序进程。 (我认为这是 DDMS 中的错误?)在开发人员选项中手动选择这些标签将解决此问题。
  • 我在另一个线程中添加了一条注释—— systrace-legacy.py 脚本现在包含在 SDK 工具中,但它移动到了不同的目录。您在设备上运行的 Android 版本是什么? Android 4.3 应该比旧版本更容易使用。
猜你喜欢
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
相关资源
最近更新 更多