ATrace_isEnabled()返回false

时间:2018-01-03 11:46:19

标签: android systrace

我创建了一个控制台程序并在我的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()的计时信息吗?非常感谢。

3 个答案:

答案 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,才能在下拉列表中选择要跟踪的应用程序。