Android Eclipse:Traceview,我只是不明白

tjb*_*tjb 39 eclipse android profiling

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

在此输入图像描述

  1. 条形的宽度对应于函数所用的时间.高度对应的是什么?
  2. 包容性和独家性之间有什么具体区别.我认为包容性包括所有儿童功能的召唤?
  3. 这是真的:(每次通话时间调用的时间)=程序运行的时间(异步任务怎么样?)
  4. 在主线程上调试减速时,是否可以忽略异步任务?
  5. Excl%中所有百分比的总和应该等于100%吗?
  6. 当有间隙时(白色在黑色中间)会发生什么?这是当其他android进程正在运行时,或者只是你自己的异步任务(看起来一个中的间隙与另一个中的填充部分对齐,如果那样的情况那么将密集型任务移动到AsyncTask中有任何意义)?

jdo*_*ell 17

(我会在@ ron的回答中添加这个作为评论,但我的声誉仍然不高,我可以发表评论;)).

自2011年7月起,由于Jeff Brown的代码更改,您实际上可以获得traceview和VMDebug,以便为您提供挂钟时间以及CPU使用时间.我担心必要的权限需要root设备.这也导致跟上面的tjb稍微不同的跟踪视图窗口.

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并重新启动您的设备.

HRM,因为我在技术上应该帮助回答这个问题:

  1. 我对条形高度的理解是它与父函数有关.假设a()调用b().然后a()正在运行,而b()也在运行.当b()运行时,traceview将显示b的颜色; 但是当a运行时(即excl时间)它将绘制一个颜色,并且它将绘制一个略高于b的条形的条形图.至少,当你放大时,这绝对是可行的.如果你点击相应较高栏的功能,它会将括号放在靠近它的小栏下方,表明父母负责所有这些; 并且父母总是显示为较高的栏.

  2. 是的:).包含是执行函数所花费的时间或该函数调用的任何东西; Exclusive是'不包括被调用函数',只是在函数中花费的时间(或切换到/退出它).

  3. 只为了我认为你所暗示的顶层; 甚至那时看@ ron的回答 - 这是cpu使用时间,而不是挂钟时间.AsyncTasks在主线程中运行,因此将被包含在顶层故障中的某处.处理程序相同

  4. 埃里克回答

  5. 不,因为向上/向下舍入(即1.87%将显示为1.9%); 但"独家"中条目的总和应加起来在右上角显示的总时间,这与为您的问题计算的数字相同(3)

  6. 埃里克回答


Eri*_*ric 10

我无法回答你的所有问题,但我可以说......

对于#4 no,你正在运行一个核心处理器(或至少模拟一个),因此他们自己的线程上的异步任务必须中断主线程以获得处理时间.任何时候另一个线程执行将在主线程上"减速",所以你应该看着它.

对于#6,您在主线程执行跟踪中看到的那些差距与您的asynctask获取处理器时间的时间完全相关.同样,单核,一次只能做1个线程.在这个时间片中,它看起来不像任何其他进程有任何处理器时间,但这些线程仍然在后台休眠.由于这是(可能)一个模拟器,这很常见.在实时手机上你会看到更多:)

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