Android 效能分析工具之TraceView

ChinaDragon發表於2018-12-09

Android 效能分析工具之TraceView

TraceView簡介

  1. Traceview本身是一個資料分析工具, Android 平臺將Traceview作為 Android SDK內建的一個工具,主要用於載入 Android 應用程式所生成的trace檔案並且分析trace檔案採集到的資料裡面每個方法(函式)在不同執行緒裡呼叫次數、消耗的時間等等。
  2. Trace檔案裡資料的採集則需要使用 Android SDK 中的 Debug 類或者利用 DDMS 工具
  3. Traceview在Android SDK的tools目錄裡,如下圖:
    traceview的位置

配置環境

  1. 步驟一:在系統變數裡新建ANDROID_HOME

    步驟一

  2. 步驟二:在系統變數的Path裡新增 %ANDROID_HOME%\tools

    在這裡插入圖片描述

使用程式碼生成 trace 檔案

  • 在需要分析程式碼的開始位置新增以下程式碼
 //檔案預設儲存到 sdcard 根目錄下,"/sdcard/testTraceView.trace"
Debug.startMethodTracing("testTraceView");
複製程式碼

其中testTraceView引數是自定義,其實就是生成的TraceView檔案的檔名,例如testTraceView.trace

  • 在需要分析的結束位置新增以下程式碼
Debug.stopMethodTracing();
複製程式碼

需要新增的許可權

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
複製程式碼

報錯示例

  1. 沒有獲取到許可權
 E/art: Unable to open trace file '/sdcard/testTrace.trace': Permission denied
複製程式碼

2.開啟testTrace.trace檔案時報錯 ,因為沒有執行Debug.stopMethodTracing();

Failed to read the trace filejava.io.IOException: Key section does not have an *end marker
        at com.android.traceview.DmTraceReader.parseKeys(DmTraceReader.java:420)
        at com.android.traceview.DmTraceReader.generateTrees(DmTraceReader.java:91)
        at com.android.traceview.DmTraceReader.<init>(DmTraceReader.java:87)
        at com.android.traceview.MainWindow.main(MainWindow.java:286)
複製程式碼

開啟testTrace.trace檔案時報錯的重要提示:Key section does not have an *end marker at com.android.traceview,說明沒有新增或者執行Debug.stopMethodTracing();

檢視是否生成trace檔案

進入到shell模式執行下面的指令語句 在doc命令視窗或者AndroidStudio裡Terminal視窗裡執行adb shell,下圖本人寫的demo在AndroidStudio裡Terminal視窗檢視的截圖:

檢視trace檔案

注意:如果Debug.startMethodTracing("testTraceView");startMethodTracing裡的引數只填寫testTraceView,則上面的截圖步驟只需要執行1、2兩步就可看到testTraceView.trace檔案 需要知道本人為什麼執行3、4兩步,請看本人demo裡的startMethodTracing裡的引數

匯出trace檔案

進入到shell模式執行下面的指令語句 adb pull /sdcard/testTraceView.trace E:\folder命令將testTraceView.trace匯出到指定到E盤folder目錄。

本人demo裡需要執行的命令是: adb pull /sdcard/TraceView/MainActivity_2018-12-07_20_29_02.trace E:\folder

開啟trace檔案

進入到shell模式執行下面的指令語句 traceview E:\folder\testTraceView.trace

TraceView介面介紹

TraceView介面介紹
Traceview 介面分上下兩部分 上面是時間軸皮膚 (Timeline Panel)

  1. 左側顯示的是執行緒資訊
  2. 右側不同顏色代表不同方法(函式),同一個顏色越長代表該方法執行的時間越久
  3. 右側滑鼠放在上面會出現時間線縱軸,在頂部會顯示當前時間線所執行的具體函式資訊
  4. 空白表示這個時間段內沒有執行內容

下面是分析皮膚

各列作用說明
列名 描述
Name 該執行緒執行過程中所呼叫的函式名
Incl Cpu Time 某函式佔用的CPU時間,包含內部呼叫其它函式的CPU時間
Excl Cpu Time 某函式佔用的CPU時間,但不含內部呼叫其它函式所佔用的CPU時間
Incl Real Time 某函式執行的真實時間(以毫秒為單位),內含呼叫其它函式所佔用的真實時間
Excl Real Time 某函式執行的真實時間(以毫秒為單位),不含呼叫其它函式所佔用的真實時
Call+Recur Calls/Total 某函式被呼叫次數以及遞迴呼叫佔總呼叫次數的百分比
Cpu Time/Call 某函式呼叫CPU時間與呼叫次數的比。相當於該函式平均執行時間
Real Time 同CPU Time/Call類似,只不過統計單位換成了真實時間

注意:每一個Time列還對應有一個用時間百分比來統計的列(如Incl Cpu Time列對應還有一個列名為Incl Cpu Time %的列,表示以時間百分比來統計的Incl Cpu Time)

資料分析示例

資料分析示例

demo下載地址

download.csdn.net/download/ch…

結束

希望分享Traceview工具的正確使用方式可以為Android開發者提供一些幫助。謝謝!

版權宣告:本文為博主原創文章!

相關文章