指標是指透過效能評定擷取的主要類型資訊。系統會將這些值以 List
的形式傳送至 measureRepeated
函式,您就能一次指定多個評估指標。基準測試需要至少一種指標才能執行。
下列程式碼片段會擷取影格時間和自訂追蹤區塊的指標:
Kotlin
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
在此範例中,RV CreateView
和 RV OnBindView
是 RecyclerView
中定義的可追蹤區塊 ID。createViewHolder()
方法的原始碼範例則說明如何在自己的程式碼中定義可追蹤區塊。
本文稍後會詳細說明 StartupTimingMetric
、TraceSectionMetric
、FrameTimingMetric
和 PowerMetric
。
基準測試結果會輸出到 Android Studio,如圖 1 所示。如果定義了多項指標,所有指標都會合併到輸出內容。
![TraceSectionMetric 和 FrameTimingMetric 的結果。](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames_tracing.png?authuser=0000&hl=zh-tw)
TraceSectionMetric
和 FrameTimingMetric
的結果。StartupTimingMetric
StartupTimingMetric
會使用下列的值,擷取應用程式啟動時間指標:
timeToInitialDisplayMs
:從系統收到啟動意圖,到轉譯第一個目標Activity
影格的時間長度。timeToFullDisplayMs
:從系統收到啟動意圖,到應用程式使用reportFullyDrawn()
方法回報完成繪製的時間長度。發出 (或包含)reportFullyDrawn()
呼叫後,測量作業會在第一個影格轉譯完成時停止。上述測量方式可能不適用於 Android 10 (API 級別 29) 以下版本。
StartupTimingMetric
會從啟動疊代輸出最小值、中位數和最大值。如要評估啟動作業的改善狀況,請聚焦在中位數值,因為中位數值能提供一般啟動時間的最佳預測值。如要進一步瞭解影響應用程式啟動時間的因素,請參閱「應用程式啟動時間」。
![StartupTimingMetric 結果](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=0000&hl=zh-tw)
StartupTimingMetric
結果。FrameTimingMetric
FrameTimingMetric
會從基準測試產生的影格擷取時間資訊,例如捲動或動畫,然後輸出下列值:
frameOverrunMs
:所指定影格錯過期限後的時間長度。正數代表出現掉格,且有可見的卡頓或延遲。負數代表影格提早多少時間於期限前完成。注意:這個值僅適用於 Android 12 (API 級別 31) 以上版本。frameDurationCpuMs
:在 UI 執行緒和RenderThread
CPU 上產生影格所需的時間長度。
測量結果採計分布在第 50、90、95 和 99 百分位的值。
如要進一步瞭解如何找出及改善緩慢影格,請參閱「轉譯速度緩慢」。
![FrameTimingMetric 結果](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=0000&hl=zh-tw)
FrameTimingMetric
結果。TraceSectionMetric
TraceSectionMetric
會擷取與所提供 sectionName
相符的追蹤區塊次數和耗費時間長度。此指標會輸出時間的最小值、中位數和最大值,以毫秒為單位。定義追蹤區塊的是函式呼叫 trace(sectionName)
,或是 Trace.beginSection(sectionName)
和 Trace.endSection()
(或兩者的非同步變化版本) 之間的程式碼。系統一律會選取測量期間擷取的第一個追蹤區段例項。根據預設,它只會輸出套件中的追蹤區段。如要加入套件外的程序,請設定 targetPackageOnly = false
。
如要進一步瞭解追蹤功能,請參閱「系統追蹤總覽」和「定義自訂事件」。
![TraceSectionMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=0000&hl=zh-tw)
TraceSectionMetric
結果。PowerMetric
針對提供的電源類別,PowerMetric
會在測試期間擷取電量或能量變化。每個選取的類別都會細分為可測量的子元件,未選取的類別則會計入「未選取」指標。
這些指標測量的是整個系統 (而非個別應用程式) 的耗電量,目前僅適用於 Pixel 6、Pixel 6 Pro 和後續機型:
power<category>Uw
:這個類別在測試期間的耗電量。energy<category>Uws
:這個類別在測試期間每單位時間所轉移的能量。
類別如下:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
在 CPU
等部分類別中,可能很難區分完成工作的是其他程序或您的應用程式。如要將干擾降到最低,請移除或限制不必要的應用程式和帳戶。
![PowerMetric 結果](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=0000&hl=zh-tw)
PowerMetric
結果。為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 建立基準設定檔 {:#create-profile-rules}
- 編寫 Macrobenchmark
- 應用程式啟動分析與最佳化 {:#app-startup-analysis-optimization}