Android:使用Traceview和Genymotion进行性能分析时,.trace文件在哪里?

Sim*_*mon 5 android android-emulator android-traceview genymotion

我正在阅读这篇关于在你的Android应用程序上运行traceview的文章:https://developer.android.com/studio/profile/traceview.html我假设他们正在谈论的模拟器是android模拟器,而不是Genymotion模拟器是我正在使用的那个.

它表示要将跟踪文件从模拟器中拉出到主机上,您只需运行以下命令:

adb pull /sdcard/startup.trace /tmp
Run Code Online (Sandbox Code Playgroud)

我在我的Genymotion模拟器上运行它并找不到该文件.然后,我使用Android设备监视器查看设备内部的文件,但在该位置没有保存名为startup.trace的文件.

我在我的代码中这样做了:

public class MyApplication extends MultiDexApplication {

    public void onCreate() {
        super.onCreate();
        Debug.startMethodTracing("startup"); 
    }
  }
Run Code Online (Sandbox Code Playgroud)

然后我在我的活动onResume方法中停止了测量以测量我的应用程序的启动时间:

@Override
protected void onResume() {
    super.onResume();
    Debug.stopMethodTracing();
}
Run Code Online (Sandbox Code Playgroud)

我希望traceview测量我的启动时间,但不知道文件保存在我的Genymotion模拟器上的哪个位置.任何人都可以帮助我保存文件的位置吗?

cha*_*lie 8

我无法从上面的示例应用程序(或任何应用程序)中找到.trace文件.因为.trace文件不在:

/sdcard/<myTraceFile>.trace
Run Code Online (Sandbox Code Playgroud)

我使用find命令来查找跟踪文件的位置,如下所示: -

$adb shell
$cd /sdcard
$find |grep .trace
Run Code Online (Sandbox Code Playgroud)

我的文件位置是:

./Android/data/test.com.trackstartuptime/files/startup.trace
Run Code Online (Sandbox Code Playgroud)

对于上面的示例应用程序.现在使用此位置进行adb pull: -

$adb pull /sdcard/Android/data/test.com.trackstartuptime/files/startup.trace <my_location>
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 1

因此,在使用一个简单的 Android 应用程序对其进行测试后,它实际上按计划运行。

我创建了一个小型存储库来演示这一点:

https://github.com/Winghin2517/TraceviewTest.git

您可以下载它,在 genymotion 模拟器上运行它,然后在 Android Studios 的“终端”选项卡中输入以下内容:

adb pull /sdcard/startup.trace /tmp
Run Code Online (Sandbox Code Playgroud)

它将从 Genymotion 中提取跟踪文件。然后您需要打开 DDMS 并说“文件”->“打开”并打开startup.trace 文件。

我创建的 Android 应用程序演示了将 1000 条消息注销到控制台所需的时间。你可以看到皮肤颜色条代表 android 用于调用我的方法的时间testCount

在此输入图像描述

这是我的结果:

在此输入图像描述

我的方法 testCount 花了 10 毫秒才能完成。

隐居的呼唤Log.e有意义,因为我的代码中的循环是对该log.e方法的 1000 次调用。

包括CPU时间是包含 CPU 时间。它是函数本身花费的时间总和,以及它调用的所有函数的时间总和。

Excl CPU time是独占cpu时间。这只是函数本身花费的时间。您会注意到它始终与“自我”孩子的“包括时间”相同。