Android Traceview 中基于跟踪和基于采样的分析方法有什么区别?我认为基于跟踪更准确,但是,它似乎会扭曲实际的 cpu 时间,特别是如果有其他调用函数。
例如,我想评估一个函数 A,它有两个实现,例如 A-1 和 A-2。
- A-1 多了一个函数调用,比如 A-1-1。
- A-2也有更多的函数调用,比如A-1-1,但是A-1-1里面也有一个函数调用,比如A-1-1-1。
现在我认为基于跟踪的分析将为 A-2 报告更高的值,因为它需要跟踪一个额外的函数 A-1-1-1,并且这个额外的 cpu 使用情况将在 A-2 的 cpu 时间中报告。我对吗 ?
那么问题就来了,基于trace的方法在报告父函数的实际cpu时间时,是否考虑了跟踪子方法所花费的cpu开销时间呢?
另一方面,基于采样的方法的问题是它可能无法捕获非常轻量级的函数。如果我的函数占用 0.2 毫秒 cpu 时间,采样间隔为 1 毫秒怎么办?我用它做了一些实验,它无法捕获轻量级函数调用。关于它们的差异有什么想法或参考文档吗?
最后一个问题是相对比较哪个更准确?