剖析 Microbenchmark

根據預設,Microbenchmark 可針對已執行的程式碼,提供時間和配置資訊。如要調查受評估的程式碼為何執行緩慢,請檢查方法追蹤記錄 (預設會在支援的作業系統版本上擷取),或選取其他剖析設定。

如要選取分析器設定,請新增檢測執行器引數 androidx.benchmark.profiling.mode,並搭配 MethodTracing (預設)、StackSamplingNone 其中一個引數,如以下程式碼片段所示。

如要進一步瞭解選項,請參閱「記錄 Java/Kotlin 方法」。根據該說明文章的定義,MethodTracing 相當於追蹤,而 StackSampling 相當於抽樣。

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 中檢查剖析結果,請在 Microbenchmark 結果中選取「Method Trace」或「Stack Sampling Trace」連結。

MethodTracing

如要嘗試將程式碼最佳化,很適合使用方法追蹤功能,因為這有助找出執行時間較長的方法。這樣一來,您就能聚焦於改善對效能影響最大的方法。

系統會在程式碼評估完成後依序執行剖析作業,讓測試輸出準確的時間和剖析結果。

方法追蹤功能預設為開啟。

注意:在部分 Android OS 和 ART 版本中,方法追蹤功能預設為關閉。在這種情況下,Android Studio 會輸出警告。

StackSampling

如要找出會耗費大量資源的方法,又不希望因方法追蹤造成效能負擔,就適合使用取樣追蹤功能。但如果應用程式是在系統擷取呼叫堆疊後進入方法,且方法會在下次擷取前結束,那麼系統就不會記錄方法呼叫。如要妥善追蹤生命週期較短的方法,請使用方法追蹤功能,而非取樣追蹤功能。

透過堆疊取樣功能,基準測試會在暖機完成後對呼叫堆疊取樣。您可以使用檢測引數控管取樣行為,例如取樣頻率取樣期間長度

在 Android 10 (API 29) 以上版本中,堆疊取樣會使用 Simpleperf 對應用程式呼叫進行呼叫,包括 C++ 程式碼。在 Android 9 (API 28) 以下版本中,應用程式會使用 Debug.startMethodTracingSampling 擷取堆疊範例。

您可以新增其他檢測引數,設定這個剖析模式:

  • androidx.benchmark.profiling.sampleFrequency

    • 每秒要擷取的堆疊樣本數量。
    • 引數類型:整數
    • 預設值為每秒 1000 個樣本。
  • androidx.benchmark.profiling.sampleDurationSeconds

    • 執行基準的時間長度。
    • 引數類型:整數
    • 預設值為 5 秒。
  • androidx.benchmark.profiling.skipWhenDurationRisksAnr

    • 在可能導致 ANR 時略過方法追蹤。您應該為 CI 執行作業啟用這項功能,因為 ANR 可能會在長時間的 CI 執行作業期間造成問題。
    • 引數類型:布林值
    • 預設值為 true

這個引數不會擷取剖析檔案,但系統仍會測量時間和配置作業的資訊。