Android Eclipse:Traceview,我只是不明白

|| 我只是没有获得traceview输出的各种元素,也找不到教程。有人可以参考下图解释以下内容: 条的宽度对应于该功能花费的时间。高度对应什么? 包含与排除之间有什么具体区别。我以为包容性包括所有子函数的调用? 这是真的吗:(每个调用时间乘以调用次数)的总和=程序运行的时间(异步任务又如何?) 在调试主线程的速度减慢时,可以忽略异步任务吗? Excl%中的所有百分比之和是否等于100%? 有缝隙时(黑色中间为白色)会发生什么?是在其他Android进程正在运行时,还是只是您自己的异步任务(看起来其中一个的差距与另一个中的填充部分对齐,如果这样的话,那么将密集型任务转移到AsyncTask就有任何意义了) )?     
已邀请:
        我无法回答您所有的问题,但我可以说... 对于#4否,您运行的是一个核心处理器(或至少模拟一个),因此异步线程必须在其自己的线程上中断主线程才能获得处理时间。任何时候执行另一个线程都会在主线程上“减速”,因此您应该注意这一点。 对于#6,您在主线程执行跟踪中看到的那些缺口与asynctask正在获取处理器时间的时间完全相关。同样,单核一次只能执行1个线程。在这个时间片中,似乎其他任何进程都没有获得任何处理器时间,但是那些线程仍在后台休眠。由于这(可能)是模拟器,所以很常见。在现场电话上,您会看到更多:) 对于#1,我也相当确定,线程执行中每个尖峰的高度都是处理器利用率百分比。例如,主线程的“ black”区域是系统空闲的。编辑:好的,我现在确定。就是这样因此,在您的主线程中,呈粉红色不变的区域表示处理器利用率为100%。     
        (我会将其作为对@ron的答案的评论添加,但是我的声誉仍然不够高,无法发表评论;)。 自2011年7月以来,由于Jeff Brown更改了代码,实际上您可以获取traceview和VMDebug来提供挂钟时间以及cpu使用时间。恐怕必要的权限需要植根设备。这也导致traceview窗口与上述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,因为从技术上讲,我应该帮助回答这个问题: 我对条形的高度的理解是,它与父函数有关。假设a()调用b()。然后a()正在运行,而b()也正在运行。当b()运行时,traceview将显示b \的颜色;但是当a运行时(即排除时间),它将绘制a \的颜色,并且绘制的a \'s bar略高于b \'s bar。至少,这绝对是放大后事物的工作方式;如果单击与较高的条相对应的功能,它将在其附近的小条下方放置括号,表明父级对此负责。父级始终显示为较高的条。 是的:)。包容性是执行该函数或该函数调用的任何事物所花费的时间;独占是“不包括所调用的函数”,并且仅是花费在适当的函数上(或切换到/退出函数所花费的时间)。 仅针对顶层,我认为您暗示了这一点;甚至可以看到@ron的答案-这是CPU使用时间,而不是挂钟时间。 AsyncTasks在主线程中运行,因此将包含在顶级细分中的某个位置。处理程序相同 埃里克回答 不,因为向上/向下取整(即1.87%将显示为1.9%);但是\“ Exclusive \”中的条目总数应加到右上角显示的总时间,该时间与为您的问题计算的时间相同(3) 埃里克回答     
关于traceview图的另一个重要的专有技术(如此处所述):traceview显示的时间不是实际的挂钟时间,而是使用的CPU时间。 例如,通过降低FPS,traceview图形的形状可能不会更改,因为它不包括空闲占空比。因此,在评估性能时,还建议运行该应用程序一段固定的时间(10秒,60秒等),并检查100%包含调用所花费的时间是否比以前少。     
        Google刚刚发布了关于Udacity的Android性能惊人课程。该模块提供了Traceview的演练,以及视频模块下方的指向其课程指南的链接,该指南深入介绍了Traceview的用法。查看这些将回答您的大多数问题。我强烈建议您检查一下!     

要回复问题请先登录注册