運用 Jetpack Microbenchmark 程式庫,您可以在 Android Studio 中,為 Android 原生程式碼 (Kotlin 或 Java) 執行基準測試。這個程式庫可處理暖機程序、評估程式碼效能和配置次數,並將基準測試結果輸出至 Android Studio 主控台和包含更多詳情的 JSON 檔案。
建議您先剖析程式碼,再編寫基準測試。這樣一來,您可以找出耗用較多資源且值得最佳化的作業,並查看作業執行期間的活動,瞭解作業緩慢的原因,例如在低優先順序的執行緒上執行、因存取磁碟而進入休眠狀態,或意外呼叫會耗用大量資源的函式 (例如點陣圖解碼)。
Microbenchmark 最適合用於在應用程式中多次執行的 CPU 作業,也稱為「熱程式碼路徑」。典型例子包括捲動時會一次顯示一個項目的 RecyclerView
、資料轉換或處理,以及其他會重複使用的程式碼片段。
Microbenchmark 程式庫較難用於評估其他類型的程式碼。由於基準測試會以迴圈方式執行,因此如果程式碼不常執行,或多次呼叫時會以不同方式執行,都可能不適合執行基準測試。
如要瞭解如何在持續整合 (CI) 環境中使用此程式庫,請參閱「在持續整合中執行基準測試」。
避免測量快取
請避免只測量快取。舉例來說,自訂資料檢視的版面配置基準只能測量版面配置快取的成效。為避免這種情況,您可以在每個迴圈中傳遞不同的版面配置參數。在其他情況下,例如評估檔案系統效能時,由於 OS 會在迴圈中快取檔案系統,因此可能難以評估。
取得一致的基準
在節省電力或裝置過熱時,為了確保效能,行動裝置上的時鐘功能會動態調整,從高狀態變為低狀態。不同的時鐘可能導致基準測試數據相差甚遠,因此程式庫提供處理此問題的方法。
鎖定時鐘 (必須啟用已解鎖裝置)
鎖定時鐘是取得穩定效能的最佳方式,可確保不會因時鐘頻率過高導致裝置過熱,也不會因基準測試未充分運用 CPU 而導致頻率過低。可透過 Gradle 工作套用
(gradlew lockClocks
) 或在 CI 中手動執行。雖然這個方式
可協助確保效能穩定,但由於部分裝置不支援
需要使用已啟用 Root 權限的 Android 裝置
永續效能模式
Window.setSustainedPerformanceMode()
是裝置支援的功能,可讓應用程式選擇較低的 CPU 頻率上限。當 Microbenchmark 程式庫在支援的裝置上執行時,就會使用此 API 的組合,並啟動本身的活動,既能防止出現過熱保護,又能取得穩定結果。
根據預設,這項功能是由 Android Gradle 外掛程式設定的 testInstrumentationRunner
啟用。如果想使用自訂執行器,則可將 AndroidBenchmarkRunner
設為子類別,並用做 testInstrumentationRunner
。
執行器會啟動不透明的全螢幕活動,確保基準測試在前景執行,且系統未在繪製其他應用程式。
自動暫停執行
如未鎖定時鐘或使用持續效能模式,程式庫會自動執行過熱保護偵測功能。啟用這項功能後,系統會定期執行內部基準測試,判斷裝置溫度是否達到會降低 CPU 效能的程度。偵測到 CPU 效能下降時,程式庫會暫停執行,讓裝置降溫,然後重試當前的基準測試。
AOT 編譯
複雜的 Microbenchmark 需要較長時間才能穩定運作,
變得不穩定以一致的評估方式
疊代速度是首要之務,androidx.benchmark
外掛程式
根據預設,系統會編譯您的 Microbenchmark APK,類似於
CompilationMode.Full
(位於 Macrobenchmark 中)。這項行為需要基準測試
1.3.0-beta01+
和 Android Gradle 外掛程式 8.4.0+
。如果不想使用這個
在您的應用程式中設定 androidx.benchmark.forceaotcompilation=false
gradle.properties
檔案。
範例
請查看 GitHub 存放區中的以下範例:
其他資源
提供意見
使用基準測試時,如要回報問題或提交功能要求,請前往公開的 Issue Tracker。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- 為應用程式進行基準測試
- 建立基準設定檔 {:#create-profile-rules}
- JankStats 程式庫