8

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

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

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

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

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

4

1 回答 1

10

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

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

所以 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 的调用,它“花费了非常长的时间”。

于 2012-06-08T20:57:54.827 回答