Android的Eclipse:Traceview,我只是不明白

我只是没有得到traceview输出的各种元素,我找不到教程。 有人可以请参考下图解释以下内容:

在这里输入图像说明

  1. 条的宽度对应于函数的时间。 高度对应于什么?
  2. 包容性与独占性之间的具体区别是什么? 我认为包容性包括所有儿童function的呼叫?
  3. 这是真的:(每次调用次数调用)=程序运行的时间(asynchronous任务呢?)
  4. debugging主线程减速时可以忽略asynchronous任务吗?
  5. Excl%中所有百分数的总和是否等于100%?
  6. 当有空白时(黑色的白色)会发生什么? 是当其他Android进程正在运行,或者只是你自己的asynchronous任务(它看起来像一个空白在另一个填充部分alignment,如果这样的话是有任何一点的密集任务移动到一个AsyncTask )?

我不能回答你所有的问题,但我可以说…

对于#4没有,你正在运行一个单核心处理器(或者至less模拟一个),所以在自己的线程上的asynchronous任务必须中断主线程来获得处理时间。 任何时候执行另一个线程都会在主线程中“放慢速度”,所以你应该看着。

对于#6,你在主线程执行轨迹中看到的那些空白恰好与你的asynctask获得处理器时间的时间相关。 再一次,单核,一次只能做1个线程。 在这个时间片中,看起来没有任何其他进程获得任何处理器时间,但是这些线程仍然在后台hibernate。 由于这(有可能)是一个模拟器,这是常见的。 在现场电话,你会看到更多:)

我也相当肯定#1线程执行中每个尖峰的高度是%处理器利用率。 例如,主线程的“黑色”区域是系统空闲的。 编辑:好吧,我现在确定。 这就是这个。 所以在你的主线程中,那个坚实的粉红色的区域是100%的处理器利用率。

(我会把这个添加为@ ron的回答,但是我的声望还不够高,我不能发表评论;))。

自2011年7月以来,事实上,通过Jeff Brown的代码更改,您可以获得traceview和VMDebug,从而为您提供挂钟和CPU使用时间。 恐怕必要的权限需要一个根植的设备,但是。 这也会导致跟上面的tjb的post略有不同。

http://git.insignal.co.kr/?p=mirror/aosp/platform/dalvik.git;a=commitdiff;h=9f640af99bebc6e96f6e1e9903557e2c8f567483

TLDR; adb shell setprop dalvik.vm.extra-opts -Xprofile:dualclock并重新启动您的设备。

人力资源pipe理,因为我在技术上应该帮助回答这个问题:

  1. 我对酒吧的高度的理解是它与父母的function有关。 假设a()调用b()。 然后a()正在运行,同时b()也在运行。 当b()运行时traceview会显示b的颜色; 但是,当一个正在运行(即excl时间)将绘制一个颜色,它会画一个比b的酒吧略高。 至less,这当然是放大时的工作原理。 如果你点击对应高杠的function,它会把括号放在靠近它的小杠下面,表示父母对所有的杠都负责; 父母总是显示为更高的酒吧。

  2. 是的:)。 包容性是指执行该函数或该函数所调用的任何事物所花费的时间; Exclusive是“所谓的function”,只是在function本身(或切换进出)中花费的时间。

  3. 只有我认为你所暗示的顶层, 甚至可以看到@ ron的答案 – 这是cpu使用时间,而不是挂钟时间。 AsyncTasks在主线程中运行,因此将包含在顶级细分中的某处。 处理程序也一样

  4. Eric回答

  5. 不是,因为四舍五入(即1.87%将显示为1.9%); 但是“独占”中的条目总数应该与右上angular的总时间相加,这与您的问题计算出的数字相同(3)

  6. Eric回答

traceview图的其他重要技巧(如此处所述 ):traceview显示的时间不是现实世界挂钟时间,而是CPU时间。

例如,通过减lessFPS,跟踪视图graphics的形状可能不会改变,因为它不包括空闲占空比。 因此,在测量性能时,也build议运行一段固定时间(10秒,60秒等)的应用程序,并检查100%包含的呼叫所用的时间是否比以前less。

Google刚刚在Udacity上发布了一个关于Android性能的惊人课程。 这个模块提供了Traceview的演练 ,以及video模块下面的链接,它们的课程指南深入介绍了Traceview的用法。 看着这些将回答你的大部分问题。 我强烈build议你检查一下!