ATrace_isEnabled() return false



我创建了一个控制台程序并在我的安卓手机中运行它(安卓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。

相关内容

  • 没有找到相关文章

最新更新