我创建了一个控制台程序并在我的安卓手机中运行它(安卓6.0和API LEVEL是23(。它有一个名为net_test的函数,如下所示。
void net_test()
{
if (ATrace_isEnabled())
{
printf("ATrace is enable!n");
}
else
{
printf("ATrace is disable!n");
}
ATrace_beginSection("net_test");
net_layer_test();
ATrace_endSection();
}
我想使用 systrace 来捕获此函数的计时信息。 所以我添加了那些 ATrace_XXX(( API。但是 ATrace_isEnabled(( 总是返回 false。我使用python systrace.py -t 4 -o mynewtrace.html perf sched gfx
命令捕获配置文件数据,没有看到net_test((的任何信息。有人熟悉ATrace_isEnabled((吗?如何通过系统跟踪捕获net_test((的计时信息?多谢。
Jason,通过使用您编写的那些命令,ATrace_isEnabled
变得真实,但是一旦您python systrace.py -t 4 -o mynewtrace.html perf sched gfx
给出此命令,因为此处您指定了t = 4秒,因此4秒后,它将再次变为false。因此,每次需要跟踪时,都必须给出以下命令。
adb shell "setprop debug.atrace.app_number 1"
adb shell "setprop debug.atrace.app_0 appname"
在这里,请确保您输入了正确的应用程序名称,该名称在logcat中可见,因为有时appname是不同的。现在对于跟踪,您需要指定要跟踪的应用程序,因为默认情况下它是禁用的。所以,这里的命令将是
python systrace.py -t 4 -a appname -o mynewtrace.html perf sched gfx
另一种简单的跟踪方法是使用Android P(或更高版本(预定义的系统跟踪选项,您可以在Android的开发人员选项中获得该选项。在那里,您无需发出任何命令。只需推送自定义事件.so
文件,并通过运行应用直接进行跟踪。
对于 ATrace_isEnabled(((参考(,此函数最终在 platform/system/core/libcutils/trace-dev.c 中调用 atrace_is_cmdline_match((。(参考资料(。
由于此 API 硬编码为应用程序类别 (ATRACE_TAG_APP(,您必须通过以下命令启用此类别的跟踪器。
adb shell "setprop debug.atrace.tags.enableflags 0x1000"
(您还可以将其他位设置为 1 以启用其他类别。
例如,如果您的控制台程序是">simapp",则可以输入以下命令来启用系统跟踪。
adb shell "setprop debug.atrace.app_number 1"
adb shell "setprop debug.atrace.app_0 simapp"
据我了解,在捕获跟踪时,您必须显式指定您的应用程序才能为其启用跟踪。 https://developer.android.com/topic/performance/tracing/command-line#command_options 表明这是-a app-name
参数。或者,如果您仍在 Windows 上使用监视器应用程序的 UI,则必须在下拉列表中选择要跟踪的应用,因为它android:debuggable
设置为 true。