1. 程式人生 > >[Android] 效能工具Systrace的使用

[Android] 效能工具Systrace的使用

Systrace 是用於收集和檢測裝置在執行過程中的時序資訊的一個指令碼工具,它結合了來自Android核心的資料,例如CPU排程程式,磁碟活動和應用程式執行緒,最終會以HTML的形式報告。

如何使用systrace

  • Step1.安裝systrace 在android studio中,Tools -> Android -> SDK Manager -> SDK Tools,點選Android SDK platform-Tools並安裝,安裝完成後,進入/platform-tools/systrace中,systrace指令碼便位於這裡。
  • Step2.安裝python systrace是一個python指令碼,因此需要安裝Python才能執行:
sudo apt-get install python3.6
  • Step3.連線手機

使用USB連線要測試的手機,並開啟USB除錯開關。

完成以上步驟,就可以進入android-sdk/platform-tools/systrace使用systrace了,下面來看看執行systrace時的一些命令。

命令

systrace執行的命令格式如下:

python systrace.py [options] [category1 [category2 ...]]

options表示選項,category表示需要抓取的trace類別,預設抓取所有的類別,也可以進行指定。

常用options有:

Global options Description
-h |–help 獲取幫助資訊.
-l | --list-categories 列出連線裝置上所有的trace category.
-o file.html 指定一個報告結果的html檔案
-t N 設定一個時間(秒),到達時間後,自動結束,不指定時按Enter鍵結束

如:

$ python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \
    binder_driver hal dalvik camera input res

可以通過如下命令檢視所有的category:

$ python systrace.py -l
         gfx - Graphics
       input - Input
        view - View System
     webview - WebView
          wm - Window Manager
          am - Activity Manager
          sm - Sync Manager
       audio - Audio
       video - Video
      camera - Camera
         hal - Hardware Modules
         res - Resource Loading
      dalvik - Dalvik VM
          rs - RenderScript
      bionic - Bionic C Library
       power - Power Management
          pm - Package Manager
          ss - System Server
    database - Database
     network - Network
         adb - ADB
    vibrator - Vibrator
        aidl - AIDL calls
         pdx - PDX services
       sched - CPU Scheduling
         irq - IRQ Events
         i2c - I2C Events
        freq - CPU Frequency
        idle - CPU Idle
        disk - Disk I/O
        load - CPU Load
        sync - Synchronization
       workq - Kernel Workqueues
  memreclaim - Kernel Memory Reclaim
  regulators - Voltage and Current Regulators
  binder_driver - Binder Kernel driver
  binder_lock - Binder global lock trace

NOTE: more categories may be available with adb root

其他的選項使用較少,就不列舉了。 通過以上的這些命令,最終將會獲得html型別的報告結果,下面我們就看看如何分析該HTML報告。

檢視報告

通過chrome瀏覽器開啟html報告,將會出現類似如下圖的結果: 左側這一欄表示各個程序中trace的TraceName,中間則是各個Trace對應的時間軸,可以看到由各種顏色標記。其中綠色表示正常,其他顏色如紅色、黃色則表示需要優化。

調查UI效能

Frames

正常情況下,大約以每秒60幀,一幀約16.6ms的速率渲染,如果超過這個時間,F圓圈就會變成紅色或者黃色.這時可以點選F圓圈,會給出詳細資訊,以及可能的解決方案,如下圖所示:

對於Android 5.0(API level 21)或者更高的裝置,渲染幀的工作在UI Thread和Render Thread這兩個執行緒當中。對於更早的版本,則所有工作在UI Thread上進行.

Alerts

當點選較慢的渲染後(紅色F圓圈),會在報告的底部窗格中看到Alert.此外還可以通過點選右側欄"Alerts"檢視所有的警報,通常,一個區域的微小變化或改進可以消除應用程式中的整個警報類別。

在Alert一欄中,列出了所有的Alert,點選後可以檢視詳細的資訊: 點選單個Alert後:

在這裡插入圖片描述

快捷鍵

以下是操作HTML報告的快捷鍵,通過這幾個鍵,可以對整個報告進行放大,縮小,搜尋,高亮等操作,可以快速的檢視測試過程中哪裡耗時較多。

Key Description
W 放大時間線
S 縮小時間線
A 左移時間線
D 右移時間線
f 放大當前所選部分
0 恢復縮放和平移
E 時間軸置於當前滑鼠位置的中心
G 從所選任務端的開始處顯示網格
Shift + G 從所選任務端的結束處顯示網格
-> 在當前選定的時間軸上選擇下一個事件
<- 在當前選定的時間軸上選擇上一個事件
m 高亮顯示所選部分
? 顯示幫助
/ 搜尋欄位
Enter 逐步搜尋結果

參考資料

官方文件