根據預設,Microbenchmark 可針對已執行的程式碼,提供相關的時間和分配資訊。如果您想調查為何評估的程式碼會緩慢執行,可以在附加 CPU 分析器後執行基準測試。
如要選取分析器設定,請新增檢測執行器引數 androidx.benchmark.profiling.mode
,搭配 MethodTracing
、StackSampling
或 None
引數,如以下程式碼片段所示。
如要進一步瞭解相關選項,請參閱「選擇錄製設定」。MethodTracing
相當於該文定義的「Java 追蹤法」,而 StackSampling
相當於「Java 抽樣法」。
Groovy
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling' } }
Kotlin
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling" } }
當您剖析基準測試時,系統會將輸出 .trace
檔案連同 JSON 結果一起複製到主機的目錄中。如要在 Android Studio 的 CPU 分析器中檢查剖析結果,請依序選取「File」>「Open」。如要進一步瞭解如何解讀追蹤記錄,請參閱「檢查追蹤記錄」。
MethodTracing
如果您要嘗試將程式碼最佳化,方法追蹤功能就能派上用場,因為這可幫助您找出執行時間較長的方法。這樣一來,您就能將重點放在最佳化對效能影響最大的方法。
系統會在程式碼評估完成後依序剖析,讓測試能夠輸出準確的時間和剖析結果。
StackSampling
如果您想找出哪個方法會耗費大量資源,取樣追蹤功能也很實用,且不會增加方法追蹤的效能負擔。不過,如果您的應用程式是在擷取呼叫堆疊後進入方法,且方法會在下次擷取前結束,那麼系統就不會記錄方法呼叫。如要妥善追蹤生命週期較短的方法,請使用方法追蹤功能,而非取樣追蹤功能。
透過堆疊取樣功能,基準測試會在暖機完成後對呼叫堆疊採樣。您可以使用檢測引數來控管取樣頻率和取樣時長。
在 Android 10 (API 29) 以上版本中,堆疊取樣會使用 Simpleperf 對應用程式呼叫進行呼叫,包括 C++ 程式碼。在 Android 9 (API 28) 以下版本中,應用程式會使用 Debug.startMethodTracingSampling
擷取堆疊範例。
您可以新增其他檢測引數,設定這個剖析模式:
androidx.benchmark.profiling.sampleFrequency
- 每秒要擷取的堆疊樣本數量。
- 引數類型:整數
- 預設值為每秒 1000 個樣本。
androidx.benchmark.profiling.sampleDurationSeconds
- 執行基準的時間長度。
- 引數類型:整數
- 預設值為 5 秒。
None
這個引數不會擷取剖析檔案。不過,系統仍會評估時間和分配作業的相關資訊。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- Microbenchmark 檢測引數
- 在持續整合中執行基準測試