Android Traceview (Sampling based trace) 不反射(reflect)函数调用的实际次数

标签 android android-studio android-sdk-tools ddms android-traceview

我正在分析应用程序中的一个函数,该函数每 5 秒执行一次。但是,我在跟踪 View 的“Calls + Rec/Total”选项中只看到一半的调用。我正在使用 1 微秒作为采样间隔的基于采样的分析。我尝试使用这个采样率,但没有明显的改进。例如,当我运行 View 236 秒时,我应该在“Call + Rec/Total”选项中获得 47 个调用,但是,它只显示 20 个,如下图所示。谁能评论我做错了什么?

Tested devices: 
Device 1: SmartWatch LG R (Android 6.0.1), observes this problem
Device 2: Samsung Galaxy S2 (Android 5.0.1 Custom ROM), observes this problem
Device 3: Samsung Galaxy S2 (Android 4.4, Custom ROM), works fine 

enter image description here

更新: 根据我与@kws 的讨论,我在第二台三星(最初是 Android 5.1.1)上安装了 Android 4.4.4,现在基于采样的方法可以正常工作。然而,搭载 Android 6.0.1 的智能 watch 仍以旧方式使用轨迹 View 。

更新 2: 我认为基于采样的方法没有捕获非常轻量级函数的分辨率,因为这些函数可能是在两个样本之间执行的,并且它会被这个探查器遗漏。虽然它以微秒为采样间隔记录数据,但我怀疑它能否达到如此详细的粒度。这个论点背后的原因是,当我用它测试一个非常轻量级的函数时,并不是每个调用都在所有三个设备上被捕获。

最佳答案

我做了一些测试,发现这里有相同的行为(在 Kitkat 和 Marshmallow 上运行)。似乎如果您使用基于样本的分析并将采样率设置得太低,您会得到不准确的结果。如果增加采样率,可能会得到更准确的结果。 另一方面,如果您使用基于跟踪的分析,则结果是准确的。

我认为那些基于样本的分析结果是可以接受的,因为分析器应该返回样本结果而不是实际结果。至于 1 μs 采样间隔的情况,我认为它的成功执行也取决于设备。也许高端设备可以产生更好的结果。

还有一点需要注意,根据 docs ,分析不应用于生成绝对时间,而是用于检查代码优化的结果。

Interpreted code runs more slowly when profiling is enabled. Don't try to generate absolute timings from the profiler results (such as, "function X takes 2.5 seconds to run"). The times are only useful in relation to other profile output, so you can see if changes have made the code faster or slower relative to a previous profiling run.

编辑

如果您想要更精确的结果,那么您要么选择基于跟踪的分析,要么必须使用更准确的调试类。使用后者,您将能够准确指定在代码中开始和停止记录跟踪数据的位置。更多信息 here .

关于Android Traceview (Sampling based trace) 不反射(reflect)函数调用的实际次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40291566/

相关文章:

android - 如何解决错误 "Unable to find valid certification path to requested target while executing command react-native run-android"

android - 在构建 android 源后制作 sdk 时 Make 失败

android - 通过命令行列出已安装的 sdk 包

android - 如何从 Android 中的菜单项调用 Activity?

Android应用程序编程: Filling a two-dimensional array in a thread

javascript - 运行代码来单击 Android 应用程序中的 javascript 按钮?尝试抓取 craigslist.org 页面上的回复按钮联系信息

android - 如何在没有 Android Studio 的情况下更新 Android 模拟器?

java - 如果多次检查正确的单选按钮,则停止分数增加

java - 安装java 8后的问题

java - 应用程序在 android.support.v7.widget.Space 上崩溃