我创建了一个控制台程序并在我的Android手机中运行它(android 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()?我可以通过systrace捕获net_test()的计时信息吗?非常感谢。
答案 0 :(得分:2)
对于 ATrace_isEnabled()(reference),此函数最终调用platform / system / core / libcutils / trace-dev中的 atrace_is_cmdline_match()。 C。 (reference)。
由于此API已硬编码为应用类别( ATRACE_TAG_APP ), 您必须通过以下命令启用此类别的跟踪器。
adb shell "setprop debug.atrace.tags.enableflags 0x1000"
(您也可以将其他位设置为1以启用其他类别。)
例如,如果您的控制台程序是“ simapp ”,则可以输入以下命令来启用systrace。
adb shell "setprop debug.atrace.app_number 1"
adb shell "setprop debug.atrace.app_0 simapp"
答案 1 :(得分:1)
Jason,通过使用您编写的那些命令,ATrace_isEnabled
变为 true ,但是一旦您将此命令指定为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 中可见,因为有时应用名称是不同的。现在要进行跟踪,您需要指定要跟踪的 app ,因为默认情况下该功能处于禁用状态。因此,这里的命令将是
python systrace.py -t 4 -a appname -o mynewtrace.html perf sched gfx
另一种简单的跟踪方法是使用Android P(或更高版本)的预定义systrace选项,您可以在android的developers选项中获得该选项。在那里,您无需发出任何命令。只需推送您的自定义事件的.so
文件,并通过运行应用程序直接进行跟踪。
答案 2 :(得分:0)
据我了解,在捕获跟踪时,您必须明确指定您的应用才能对其进行跟踪。 https://developer.android.com/topic/performance/tracing/command-line#command_options表示它是-a app-name
参数。另外,如果您仍在Windows上使用Monitor应用程序的UI,则必须将下拉列表中的android:debuggable
设置为true,才能在下拉列表中选择要跟踪的应用程序。