首先,同一篇文章告诉我们:
父母以紫色背景显示,儿童以黄色背景显示
所以 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 的调用,它“花费了非常长的时间”。