【问题标题】:Android Eclipse: Traceview, I just don't get itAndroid Eclipse:Traceview,我就是不明白
【发布时间】:2011-09-22 13:11:02
【问题描述】:

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

  1. 条形的宽度对应于函数花费的时间。高度对应什么?
  2. 包容性和独占性之间的具体区别是什么。我假设 inclusive 包括所有子函数的调用?
  3. 这是真的吗:(每次调用的时间乘以调用次数)的总和 = 程序运行的时间(异步任务呢?)
  4. 在主线程上调试减速时可以忽略异步任务吗?
  5. Excl% 中所有百分比的总和是否应等于 100%?
  6. 当有间隙(黑色中间有白色)时会发生什么?是当其他android进程正在运行时,还是只是您自己的异步任务(看起来一个中的间隙与另一个中的填充部分对齐,如果是这种情况,那么将密集任务移动到 AsyncTask 是否有任何意义)?

【问题讨论】:

  • 阅读Traceview War Story。它回答了您关于“包容性”和“独占性”列的问题。 @Eric 的答案涉及其余部分。

标签: android eclipse profiling


【解决方案1】:

Google 刚刚发布了关于 Android 性能的 Udacity 的精彩课程。有this module that provides a walkthrough of Traceview,以及视频模块下方的链接,指向他们的课程指南,深入介绍了 Traceview 的使用。查看这些将回答您的大部分问题。我强烈建议您检查一下!

【讨论】:

    【解决方案2】:

    (我会将此作为评论添加到@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,因为从技术上讲,我应该帮助回答这个问题:

    1. 我对条形高度的理解是它与父函数有关。假设 a() 调用 b()。然后 a() 正在运行,而 b() 也在运行。当 b() 运行时,traceview 将显示 b 的颜色;但是当 a 正在运行时(即不包括时间),它会绘制 a 的颜色,并且它会绘制 a 的条略高于 b 的条。至少,这绝对是放大时的工作方式;如果您单击与较高栏相对应的功能,它将在其附近的小栏下方放置括号,表明父母对所有这些负责;并且父级始终显示为较高的条形。

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

    3. 仅适用于顶层,我认为您暗示了这一点;甚至看到@ron的答案 - 这是cpu使用时间,而不是挂钟时间。 AsyncTasks 在主线程中运行,因此将包含在顶层细分中的某个位置。处理程序也一样

    4. 埃里克回答

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

    6. 埃里克回答

    【讨论】:

      【解决方案3】:

      关于traceview 图的另一个重要知识(如mentioned here):traceview 显示的时间不是现实世界的挂钟时间,而是使用的CPU 时间。

      例如,通过降低 FPS,traceview 图的形状可能不会改变,因为它不包括空闲占空比。因此,在测量性能时,还建议将应用程序运行一段固定的时间(10 秒、60 秒等),并检查 100% 包容性调用所用的时间是否低于以前。

      【讨论】:

        【解决方案4】:

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

        对于#4 不,您正在运行一个单核处理器(或至少模拟一个),因此它们自己线程上的异步任务必须中断主线程以获得处理时间。任何时候另一个线程执行都会在主线程上“减速”,所以你应该注意这一点。

        对于 #6,您在主线程执行跟踪中看到的那些间隙与您的 asynctask 获得处理器时间的时间完全相关。同样,单核一次只能执行 1 个线程。在这个时间片中,看起来任何其他进程根本没有任何处理器时间,但那些线程仍在后台休眠。由于这(可能)是一个模拟器,这很常见。在实时电话上,您会看到更多内容:)

        对于#1,我也相当确定线程执行中每个峰值的高度是处理器利用率百分比。例如,主线程的“黑色”区域是系统空闲的。编辑:好的,我现在确定。就是这样。因此,在您的主线程中,纯粉色区域表示 100% 的稳定处理器利用率。

        【讨论】:

        • 谢谢 Eric,实际上这是在真手机上
        • +1 感谢您的回答,埃里克。您是否在某处为您的 #1 答案提供了明确的参考?这也是我的预感,但我在任何地方都找不到参考。
        猜你喜欢
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 2011-05-08
        • 2015-08-30
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        相关资源
        最近更新 更多