Microbenchmark

運用 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