【问题标题】:Android developer page: understanding traceview profiling exampleAndroid开发者页面:了解traceview profiling示例
【发布时间】:2012-03-12 22:49:05
【问题描述】:

我在看这个页面:Profiling with Traceview and dmtracedump

在“配置面板”下,它具有以下文本,指的是文本下方的示例分析结果:

表中的最后一列显示了对该方法的调用次数加上递归调用的次数。最后一列显示了对该方法的调用总数中的调用次数。在这个视图中,我们可以看到有 14 次调用 LoadListener.nativeFinished();查看时间线面板会发现其中一个调用花费了异常长的时间。

我对这个描述感到困惑。首先,这句话中的第一句话似乎指的是同一列。那么最后一列实际上包含什么?其次,我不明白“时间线面板”中的确切位置,我必须查看它“显示其中一个调用花费了异常长的时间”。

你能帮我理解这段文字吗?

【问题讨论】:

    标签: android profiling android-traceview


    【解决方案1】:

    首先,同一篇文章告诉我们:

    父母以紫色背景显示,儿童以黄色背景显示

    所以 LoadListener.nativeFinished 是 父函数,它下面的所有缩进行都是 children,或父调用的函数。

    个人资料面板

    这是文章中配置文件面板的片段:

    表格中的最后一列显示了对该方法的调用次数加上递归调用的次数。

    第一行(父级)的最后一列表示对该函数进行的调用和递归调用的次数:14 次迭代和 0 次递归调用,以加号分隔(14+14) .

    我觉得文章作者不小心说了几句话,结果下一行有点乱:

    最后一列显示调用该方法的总次数中的调用次数。

    在父项下方的黄色背景子行中,最后一列实际上并不表示 Calls+Rec。注意符号的变化 - 使用分数而不是加号语法。在 LoadListener.tearDown 的情况下,14/14 表示 LoadListener.tearDown 被父函数调用了 14 次。 LoadListener.tearDown 函数在此跟踪中总共调用了 14 次,因此 LoadListener.nativeFinished 是此跟踪中唯一调用 LoadListener.tearDown 的函数。

    让我们看看另一行。 (子)函数 View.invalidate 的最后一列的值为 2413/2853。这并不意味着 View.invalidate 被迭代调用了 2413 次,递归调用了 2853 次。相反,它意味着父函数 LoadListener.nativeFinished 调用了 View.invalidate 2413 次。

    现在看一下第 6 行,您会看到 View.invalidate 被迭代调用了 2853 次,递归调用了 0 次。因此,父函数 LoadListener.nativeFinished 是唯一在此跟踪中调用过 LoadListener.tearDown 的函数。

    时间线面板

    这是文章中时间轴面板的片段:

    来自同一篇文章,

    第一行下方的细线显示对所选方法的所有调用的范围(进入到退出)

    请注意在主线程突出显示部分正下方水平跨越的细的、类似大括号的粉色线条。最左边的粉色牙套很短;这些代表对 LoadListener.nativeFinished 的 13/14 调用相对较快完成。最后一个大括号 - 最右边的一个 - 比其他任何一个都要长得多。这是对 LoadListener.nativeFinished 的调用,“花费了异常长的时间”。

    【讨论】:

    • 那么那些电话(2853-2413)在哪里?由于该函数总共称为 2853,那么 (2853-2413) 调用在哪里?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多