我在看此页面:Profiling with Traceview and dmtracedump

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



我对这个描述感到困惑。首先,此引用中的前两个句子似乎是指同一列。那么最后一列实际上包含什么?其次,我不知道在“时间轴”面板中的确切位置,我必须看到它“表明其中一个调用花费了非常长的时间”。

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

最佳答案

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

因此,LoadListener.nativeFinished是父函数,其下面的所有缩进行都是子函数,或父函数已调用的函数。
型材面板
这是文章中“个人资料面板”的 fragment :


第一行的最后一列(父级)指示对此函数进行的调用和递归调用的数量:14个迭代调用和0个递归调用,以加号(14 + 14)分隔。
我认为这篇文章的作者不小心说了几句话,结果,下一行有点令人困惑:

在父级下方的黄色背景子级行中,最后一列实际上并不表示Calls + Rec。请注意符号的更改-使用小数点与加号符号语法。如果是LoadListener.tearDown,则14/14表示LoadListener.tearDown被父函数调用了14次。在此跟踪中,总共总共调用了14次LoadListener.tearDown函数,因此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的唯一函数。
时间线面板
这是文章中“时间轴面板”的 fragment :

在同一篇文章中,

请注意,细线,括号状的粉红色线在主线程的突出显示部分的正下方水平延伸。最左边的粉红色括号非常短;这些代表对LoadListener.nativeFinished的13/14调用,这些调用相对较快地完成了。最后一个支撑-最右边的一个支撑-比其他任何支撑都要长。这是对LoadListener.nativeFinished的调用,它“花费了非常长的时间”。

10-07 23:07