基準

運用 Android Studio 準確評估程式碼成效。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2022 年 9 月 7 日 1.1.0 - - 1.2.0-alpha03

宣告依附元件

如要新增基準的依附元件,必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區

在應用程式或模組的 build.gradle 檔案中,新增您需要的構件依附元件:

Macrobenchmark

如要在專案中使用 Macrobenchmark,請將以下依附元件加入您的應用程式或模組的 build.gradle 檔案中:

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha03"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha03")
}

Microbenchmark

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.1.0"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.1.0")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Microbenchmark 程式庫也提供 Gradle 外掛程式,可與 microbenchmark 模組搭配使用。這個外掛程式會訂出模組建構設定的預設值,建立傳到主機的基準輸出內容副本,並提供 ./gradlew lockClocks 工作

如要使用外掛程式,請在頂層 build.gradle 檔案的「plugins」區塊中加入以下這行程式碼:

Groovy

plugins {
  id 'androidx.benchmark' version '1.1.0' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.1.0" apply false
}

接著,將外掛程式套用到基準模組的 build.gradle 檔案

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

意見回饋

您的意見可協助我們改善 Jetpack。發現新的問題或有改善這個程式庫的想法時,請告訴我們。建立新的問題之前,請先查看這個程式庫中的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 說明文件

1.2 版本

1.2.0-alpha03 版本

2022 年 9 月 7 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha031.2.0-alpha03 版本包含以下修訂項目。

新功能

  • 已新增用於獨立使用 BenchmarkState 的實驗性 API,與 BenchmarkRule / JUnit4 分開使用。(Id478f, b/228489614)

修正錯誤

1.2.0-alpha02 版本

2022 年 8 月 24 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha021.2.0-alpha02 版本包含以下修訂項目。

API 變更

  • 即使已啟用 Root 權限,MacrobenchmarkScope.killProcess() 的預設值仍為 am force stop,但在基準設定檔產生期間除外。您可以使用選擇性的布林值引數覆寫這個值。(02cce9b/241214097)

修正錯誤

1.2.0-alpha01 版本

2022 年 7 月 27 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha011.2.0-alpha01 版本包含以下修訂項目。

新功能

  • 新的 tracing-perfetto-common 元件,可讓工具在其公開的應用程式中啟用 Perfetto SDK 追蹤功能 (I2cc7f)
  • 已新增 androidx.benchmark.enabledRules 檢測引數,以使巨集基準篩選功能僅篩選基準或基準設定檔產生器。傳入「Macrobenchmark」或「BaselineProfile」,讓系統僅執行一種類型的測試,例如在模擬器中僅產生 BaselineProfiles 時。支援以半形逗號分隔的清單。(I756b7b/230371561)

    例如,在 Macrobenchmark 的 build.gradle 中:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    或是來自 Gradle 指令列:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

API 變更

  • 新增 PowerMetric,用於測量基準中的能源和電力工作。(I9f39b, b/220183779)
  • 新增編譯模式 CompilationMode.Ignore,可略過設定檔的重設和編譯。(Ibbcf8, b/230453509)
  • BaselineProfileRule#collectBaselineProfile 中新增參數,以依套件名稱篩選輸出檔案 (If7338b/220146561)
  • 可讓開發人員放電裝置以測量耗電量。(I6a6cb)
  • 已新增清除 MacrobenchmarkScope 中的著色器快取的功能。(I32122)
  • 可讓開發人員設定指標類型的顯示方式,以及所需的子系統類別的詳細資料。(I810c9)
  • 先前,如果在不支援的裝置上執行,系統會將 UnsupportedOperationException 擲回基準。現在,只有在不支援的裝置上 (例如 PowerMetric.configure) 使用指標時,系統才會產生 UOE。(I5cf20b/227229375)
  • 已新增 TotalPowerMetricTotalEnergyMetric,用於評估 Macrobenchmark 中每個系統類別的總功率和能量。(I3b26b, b/224557371)

修正錯誤

  • 修正應用程式編譯在未取得 Root 權限的 Macrobenchmark 版本之間未正確重設的問題。很抱歉,每次疊代時都必須重新安裝 APK,此舉將會清除每個 Macrobenchmark 的應用程式資料。(I31c74b/230665435)
  • 修正 API 21/22 上的追蹤記錄異常終止問題 (If7f6(b/227509388)(b/227510293)(b/227512788))
  • 全面改造用來偵測「活動完成推出」的機制,修正 MacroBenchmark 啟動程序中「無法讀取任何指標」的例外情況。(Ia517c)

1.1.0 版本

1.1.0 版本

2022 年 6 月 15 日

發布 androidx.benchmark:benchmark-*:1.1.01.1.0 版本包含以下修訂項目。

  • 這個版本與 androidx.benchmark:benchmark-*:1.1.0-rc03 相同。

自 1.0.0 版本以來的重要異動

1.1.0-rc03 版本

2022 年 6 月 1 日

發布 androidx.benchmark:benchmark-*:1.1.0-rc031.1.0-rc03 版本包含以下修訂項目。

修正錯誤

1.1.0-rc02 版本

2022 年 5 月 11 日

發布 androidx.benchmark:benchmark-*:1.1.0-rc021.1.0-rc02 版本包含以下修訂項目。

  • 請注意,這個版本包含行為變更,因為系統現已全面重新安裝各基準的應用程式,以確保測量結果正確無誤。

修正錯誤/行為變更

  • 修正應用程式編譯在 Macrobenchmark 之間未正確重設,且在未取得 Root 權限的版本上完全無法重設的問題。這修正了在多個情況下,執行多個測試會導致 CompilationMode 對測量幾乎沒有影響的問題。為解決此問題,目標應用程式現已完全重新安裝每個測試方法,這將會清除每個 Macrobenchmark 之間的應用程式資料。(I31c74b/230665435)

  • 由於這樣可防止應用程式在測試之前先設定狀態,現在可略過編譯/重新安裝解決此問題。舉例來說,您可以使用殼層指令 cmd package compile -f -m speed <package> 完整編譯目標,然後略過 Macrobenchmark 的編譯步驟。

    例如,在 Macrobenchmark 的 build.gradle 中:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    或是來自 Gradle 指令列:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • 透過加入 androidx.benchmark.enabledRules 檢測引數,您可以輕鬆在 Macrobenchmark 和基準設定檔產生的測試之間共用模組。傳入「Macrobenchmark」或「BaselineProfile」,讓系統僅執行一種類型的測試,例如在模擬器中產生 BaselineProfiles 時。(I756b7b/230371561)

    例如,在 Macrobenchmark 的 build.gradle 中:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    或是來自 Gradle 指令列:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

1.1.0-rc01 版本

2022 年 4 月 20 日

發布 androidx.benchmark:benchmark-*:1.1.0-rc011.1.0-rc01 版包含以下修訂項目。

修正錯誤

  • Android Studio 中的基準設定檔輸出連結現在使用不重複的檔案名稱。這樣一來,輸出內容就會一律反映出使用 BaselineProfileRule 的最新結果。(aosp/2057008b/228203086)

1.1.0-beta06 版本

2022 年 4 月 6 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta061.1.0-beta06 版本包含以下修訂項目。

修正錯誤

  • 修正 API 21/22 的追蹤記錄異常終止問題 (If7fd6b/227509388)
  • 全面改造用來偵測「活動完成推出」的機制,修正 MacroBenchmark 啟動程序中「無法讀取任何指標」的例外情況。(Ia517c)
  • 修正使用 CompilationMode.None() 時 Macrobenchmark 的啟動指標。實施這項變更前,CompilationMode.Partial() 似乎比 Compilation.None() 慢。(611ac9)。

1.1.0-beta05 版本

2022 年 3 月 23 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta051.1.0-beta05 版本包含以下修訂項目。

修正錯誤

1.1.0-beta04 版本

2022 年 2 月 23 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta041.1.0-beta04 版本包含以下修訂項目。

修正錯誤

  • 修正 Android 10 中遺漏的指標,以及在追蹤記錄中未正確擷取程序名稱而引發的 NoSuchElementException。(Ib4c17b/218668335)

  • 使用 PowerManager 在 Q (API 29) 以上版本進行過熱保護偵測作業。這會大幅降低過熱保護偵測機制 (經過 90 秒等待期後重新檢測) 的誤報頻率,並且加快使用者建構作業的速度。此外,如果就所處環境而言,裝置鎖定的溫度太高,導致時脈頻率呈現鎖定狀態時,上述作法還可以讓系統持續提供過熱保護偵測功能。(I9c027b/217497678b/131755853)。

  • 篩選 Simpleperf 取樣剖析,將結果限定在僅限 measureRepeated 執行緒,進而簡化檢查作業 (Ic3e12b/217501939)

  • 支援多程序應用程式中的已命名 UI 子程序指標 (Ice6c0b/215988434)

  • 篩選基準設定檔規則,以便只針對 Android 9 (SDK 28)。aosp/1980331 b/216508418

  • 在使用 Compilation.None() 時略過設定檔安裝程序。此外,當應用程式使用舊版 androidx.profileinstaller 和 Android Gradle 外掛程式時,系統也會回報警告。aosp/1977029

1.1.0-beta03 版本

2022 年 2 月 9 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta031.1.0-beta03 版本包含這些修訂項目。

API 變更

  • AudioUnderrunMetric 新增至 Macrobenchmark 程式庫,並伴隨實驗性標記,以利系統偵測音訊不足的現象 (Ib5972)
  • BaselineProfileRule 不再接受 setup 區塊,因為其功能與 profileBlock 相同。(Ic7dfeb/215536447)。

    例如

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

修正錯誤

  • 修正問題:當連結至 Studio 輸出時,microbench 分析器追蹤記錄在後續的執行作業中就無法更新 (I5ae4db/214917025)
  • 禁止 API 23 編譯編譯指令 (Ice380)
  • 已重新命名 FrameCpuTime -> FrameDurationCpuFrameUiTime -> FrameDurationUi 以說明這些是時間長度而非時間戳記,以及比對前置字串。(I0eba3b/216337830)。

1.1.0-beta02 版本

2022 年 1 月 26 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta021.1.0-beta02 版本包含以下修訂項目。

修正錯誤

  • Microbenchmark 堆疊取樣/方法追蹤記錄設定檔結果現已連結至 Studio 輸出內容,與其他剖析結果類似,且不隱藏分配指標。(Idcb65b/214440748b/214253245)。
  • BaselineProfileRule 現可在 logcat 和 Studio 輸出中列印 adb pull 指令,以擷取產生的 BaseProfile 文字檔案。(f08811)

1.1.0-beta01 版本

2022 年 1 月 12 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta011.1.0-beta01 版本包含以下修訂項目。

修正錯誤

  • 修正忽略分析器引數啟用的問題。(I37373b/210619998)。
  • 已移除已淘汰的 CompliationModes (I98186b/213467659)
  • 已將 CompilationMode.Partial 的基準設定檔引數切換為列舉以清楚呈現。(Id67ea)

1.1.0-alpha13 版本

2021 年 12 月 15 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha131.1.0-alpha13 版本包含以下修訂項目。

API 變更

  • 針對 Android Q (API 29 以上版本) 將低負載系統追蹤加入 microbench 輸出內容。請注意,這項操作目前不會透過 android.os.Traceandroidx.tracing Jetpack API 擷取自訂追蹤記錄,以免影響結果。這項追蹤記錄應有助於診斷不穩定性,特別是基準以外的來源。(I298beb/205636583b/145598917)。
  • CompilationModes 界定為三個類別:「完整」、「無」、「部分」。先前則是以編譯引數 (現在視為導入詳細資料) 和功能的名稱命名,而不一致。這能讓您更清楚地瞭解各平台版本優缺點、潛在組合和行為。(I3d7bfb/207132597)
  • 系統目前一律會依據設定組合及測量,您現在可以查詢套件名稱和疊代 (某些準備情境中疊代可能為 null)。(Id3b68b/208357448b/208369635)。

修正錯誤

  • 已修正 CompilationMode.Speed 錯誤視為 None (I01137)

1.1.0-alpha12 版本

2021 年 11 月 17 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha121.1.0-alpha12 版本包含以下修訂項目。

新功能

  • 新增自訂的 TraceSectionMetric 以提供自訂追蹤記錄的測量數據。(I99db1b/204572664)

修正錯誤

  • 每次疊代時喚醒裝置,以確保能夠測試 UI;必須停用螢幕鎖定功能。(Ibfa28b/180963442)。
  • 修正在 StackSampling 剖析模式與非 Root 權限裝置上的多重當機問題 (Icdbdab/202719335)
  • 在每個疊代的結束時移除 0.5 秒的睡眠。如果發現變更缺少遺漏的指標,請提交錯誤。(Iff6aa)
  • 降低資料遺失的風險,並減少追蹤資料的記憶體負擔 (Id2544b/199324831b/204448861)
  • 改用精簡的壓縮儲存空間格式,減少約 40% 的追蹤記錄大小。(Id5fb6b/199324831)。
  • 更新啟動指標的實作,一律在轉譯執行緒結束時一律結束。這樣會跨平台版本更加穩定,並且能夠更精準地對應應用程式內評估項目。(Ic6b55)

1.1.0-alpha11 版本

2021 年 11 月 3 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha111.1.0-alpha11 版本包含以下修訂項目。

API 變更

  • Macrobenchmark 的 minSdkVersion23。(If2655)
  • 新增 BaselineProfileRule 的實驗性功能,可針對應用程式的重要使用者歷程產生基準設定檔。詳細的說明文件。(Ibbefab/203692160)
  • 移除為 Java 呼叫端新增的 measureRepeated 介面變化版本,因為這樣會導致完成/解決方法造成混淆。Java 呼叫者必須需要再從 measureRepeated 傳回 Unit 執行個體。如果造成不便,請回報錯誤,我們會在日後的版本中重新審視這個問題。(Ifb23eb/204331495)

1.1.0-alpha10 版本

2021 年 10 月 27 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha101.1.0-alpha10 版本包含以下修訂項目。

API 變更

  • Backport StartupTimingMetric 返回 API 23。這個新導入方式還能進一步處理 reportFullyDrawn() 來處理等待的內容轉譯完成。(If3ac9b/183129298)
  • 將 Java 呼叫新增至多個 MacrobenchmarkScope 方法的 JvmOverloads 方法。(I644feb/184546459)。
  • 提供替代的 MacrobenchmarkRule.measureRepeated 函式,使用 Consumer<MacrobenchmarkScope> 進行 Java 語言的慣用用途。(If74abb/184546459)

修正錯誤

  • 修正未儘早開始,且缺少指標資料追蹤記錄。預期應修正程式庫本身造成的「在基準期間無法讀取任何指標」的例外狀況。(I6dfcbb/193827052b/200302931)。
  • FrameBalanceSlack 已重新命名為 FrameOverrun,以便釐清其含意,也就是影格時間超出限制。(I6c2aab/203008701)

1.1.0-alpha09 版本

2021 年 10 月 13 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha091.1.0-alpha09 版本包含以下修訂項目。

修正錯誤

  • 支援在 API 31/S+ 的情況下,不使用 Root 權限來捨棄核心頁面快取,這樣可增加 StartupMode.COLD 啟動內容的準確度。(Iecfdbb/200160030)

1.1.0-alpha08 版本

2021 年 9 月 29 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha081.1.0-alpha08 版本包含以下修訂項目。

API 變更

  • 啟用捲動 Macrobenchmark 以返回 API 23 (If39c2b/183129298)
  • 在 UI 和 JSON 輸出中新增取樣指標類型,著重於各個疊代的多個樣本百分位數。(I56247b/199940612)。
  • 切換為整個基準資料庫的浮點指標 (在 Studio UI 中截斷)。(I69249b/197008210)。

1.1.0-alpha07 版本

2021 年 9 月 1 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha071.1.0-alpha07 版本包含以下修訂項目。

API 變更

  • 將最低 API 提高至 21,反映未來支援的 API 級別下限。目前支援的最低 API 持續透過 RequiredApi() 傳達,且目前為 29 (I440d6b/183129298)

修正錯誤

  • 修正 ProfileInstaller,讓使用基準設定檔的應用程式更容易使用 CompilationMode.BaselineProfile 執行 MacroBenchmarks。(I42657b/196074999) 注意:必須一併更新為 androidx.profileinstaller:profileinstaller:1.1.0-alpha04 以上。
  • StartupMode.COLD + CompilationMode.None 的基準功能較穩定。(I770cdb/196074999)

1.1.0-alpha06 版本

2021 年 8 月 18 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha061.1.0-alpha06 版本包含以下修訂項目。

API 變更

  • 已新增 androidx.benchmark.iterations 檢測引數,以在本機測試/剖析時手動覆寫疊代計數。(6188beb/194137879)

修正錯誤

  • 改用 Simpleperf 做為 API 29 以上版本中的預設取樣分析器 (Ic4b34b/158303822)。

已知問題

  • CompilationMode.BaselineProfile 仍在開發階段。目前請避免透過該項目判斷設定檔的品質。

1.1.0-alpha05 版本

2021 年 8 月 4 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha051.1.0-alpha05 版本包含以下修訂項目。

1.1.0-alpha04 在發布前已取消,原因為偶發性的當機情形。b/193827052

API 變更

修正錯誤

  • 降低過熱保護偵測機制的敏感度,如果經常偵測到溫度過熱的情況,則必須重新計算基準。(I7327b)
  • 修正 FrameTimingMetric 可支援 Android S Beta 版 (Ib60ccb/193260119)
  • 使用 EmptyActivity 即可讓目標應用程式退出強制停止狀態,以提升 CompilationMode.BaselineProfile 的支援程度。(Id7cacb/192084204)。
  • 已將追蹤檔案副檔名變更為 .perfetto-trace,以符合平台標準。(I4c236b/174663039)。
  • StartupTimingMetric 會輸出「fullyDrawnMs」指標,以評估應用程式完成算繪所需的時間。如要為您的應用程式定義這項指標,請在初始內容準備就緒時 (例如從 DB 或網路載入初始清單項目) 呼叫 Activity.reportFullyDrawn。(可使用 reportFullyDrawn 方法,而不針對 ComponentActivity 進行建構版本檢查)。請注意,測試必須夠長才能擷取指標 (startActivityAndWait 不需等待 reportFullyDrawn)。(If1141b/179176560)
  • 將 Ui 中繼資料的追蹤記錄附加至追蹤記錄超過 50 毫秒 (Ic8390b/193923003)
  • 停止追蹤時,輪詢頻率會大幅增加,例如啟動基準執行階段可能減少 30% (Idfbc1b/193723768)

1.1.0-alpha03 版本

2021 年 6 月 16 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha031.1.0-alpha03 版本包含以下修訂項目。

新功能

修正錯誤

  • 用來略過基準錯誤的範例 Gradle 程式碼已更新為使用非淘汰的 API,其語法同時支援 .gradle.kts 使用者。

    例如

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

1.1.0-alpha02 版本

2021 年 5 月 18 日

基準版本 1.1.0-alpha02 為基準化功能提供了重要的元件 - Macrobenchmark。除了可評估 CPU 迴圈的「基準」之外,您還可以運用「Macrobenchmark」評估整個應用程式的互動情形,例如啟動及捲動畫面,以及擷取追蹤記錄。詳情請參閱程式庫說明文件

發布 androidx.benchmark:benchmark-*:1.1.0-alpha021.1.0-alpha02 版本包含以下修訂項目。

新功能

已新增的 Macrobenchmark 構件 (androidx.benchmark:benchmark-macro-junit4androidx.benchmark:benchmark-macro)

  • 從本機或持續整合應用程式擷取啟動、捲動/動畫成效指標
  • 從 Android Studio 擷取及檢查追蹤記錄

修正錯誤

  • 解決 Android 12 輸出目錄的殼層權限問題 (注意:可能需要將 Android Gradle 外掛程式更新至 7.0.0 初期測試版本,並將 Android Studio 更新為 Arctic Fox (2020.3.1),才能繼續擷取受影響裝置上的輸出檔案)。(Icb039)
  • 支援 BenchmarkPlugin 的配置快取 (6be1c1b/159804788)
  • 簡化檔案輸出 - 預設為在不需要 requestLegacyExternalStorage=true 的目錄中 (8b5a4db/172376362)
  • 修正程式庫列印 logcat 警告,指出在不存在的平台版本上找不到 JIT 執行緒。(I9cc63b/161847393)。
  • 修正讀取裝置頻率上限的問題。(I55c7a)

1.1.0-alpha01 版本

2020 年 6 月 10 日

發布 androidx.benchmark:benchmark-common:1.1.0-alpha01androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01androidx.benchmark:benchmark-junit4:1.1.0-alpha011.1.0-alpha01 版本包含以下修訂項目。

1.1 的新功能

  • 分配指標 - 基準現在會在準備和時間點之後執行額外階段,並擷取分配次數。分配可能會導致舊版平台的效能問題 (在 O 為 140ns,到了 M 則為 8ns;測量裝置為 Nexus5X 且時脈已鎖定)。這項指標會顯示在 Android Studio 主控台輸出結果中,以及
  • 剖析支援 - 您現在可以擷取基準執行的剖析資料作業,以檢查程式碼執行速度變慢的原因。基準功能可讓您擷取方法或從 ART 進行方法取樣。您可以在 Android Studio 中依序點選「File」>「Open」,透過分析器檢查這些檔案。
  • 基準 Gradle 外掛程式現在提供簡易設定的預設設定:
    • 根據預設將 testBuildType 設為發布版本,避免使用內建程式碼涵蓋率功能的依附元件。這個版本的 buildType 也可以設為預設的 buildType 類型,讓 Android Studio 在初次開啟專案時,自動選取正確的版本變化版本。(b/138808399)
    • signingConfig.debug 是預設的簽署設定 (b/153583269)

** 修正錯誤 **

  • 大幅減少暖機的轉換負擔,也就是每項基準的第一項測量值都比其他基準高。在規模較小的基準 (1 毫秒或更短) 內,這個問題較為明顯。(b/142058671)
  • 已修正從指令列執行時,每個基準列印的 InstrumentationResultParser 個錯誤。(I64988b/154248456)。

已知問題

  • 指令列的 Gradle 叫用不會直接列印結果。如要解決這個問題,您可以透過 Studio 執行,或是剖析 JSON 輸出檔案來檢查結果。
  • 如果裝置已安裝應用程式的 applicationId 結尾為「android」或「download」(不區分大小寫),就無法從基準報表功能提取報表。使用者遇到這個問題時,應將 Android Gradle 外掛程式升級至 4.2-alpha01 以上版本。

1.0.0 版本

1.0.0 基準版本

2019 年 11 月 20 日

androidx.benchmark:benchmark-common:1.0.0androidx.benchmark:benchmark-gradle-plugin:1.0.0androidx.benchmark:benchmark-junit4:1.0.0 沒有變更,1.0.0-rc01 中不會有任何異動。1.0.0 版含有這些修訂版本

1.0.0 的主要功能

基準資料庫可讓您編寫應用程式程式碼的效能基準,並快速取得結果。

這項功能可避免建構和執行階段設定問題,並穩定裝置效能,確保測量結果的準確性和一致性。您可以直接在 Android Studio 中執行基準測試,或是在持續整合中測試基準效能,藉此觀察程式碼效能變化,並避免發生迴歸問題。

主要功能包括:

1.0.0-rc01 版本

2019年10月23日

發布 androidx.benchmark:benchmark-common:1.0.0-rc01androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01androidx.benchmark:benchmark-junit4:1.0.0-rc011.0.0-rc01 版本包含以下修訂項目

新功能

  • 已將基準系統追蹤記錄新增至基準

修正錯誤

  • 已修正指標穩定性不穩定的問題,導致 JIT 在排除問題之前而無法完成 (b/140773023)
  • Android Gradle 外掛程式 3.5 和 3.6 統合版的 JSON 輸出目錄

1.0.0-beta01 版本

2019 年 10 月 9 日

發布 androidx.benchmark:benchmark-common:1.0.0-beta01androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01androidx.benchmark:benchmark-junit4:1.0.0-beta011.0.0-beta01 版本包含以下修訂項目

新功能

  • 在每次準備之前執行垃圾收集作業,將記憶體壓力從一個基準降到下一個基底 (b/140895105)

修正錯誤

  • 新增 androidx.annotation:android-experimental-lint 依附元件,讓 Java 程式碼在未使用實驗性 API 時能正確產生 Lint 錯誤,類似 Kotlin 呼叫端的 Kotlin 實驗性註解所提供的程式碼。
  • 現在可正確偵測 Android Gradle 外掛程式 3.6 中輸出的 additionalTestOutputDir 檢測引數,以確認 AGP 何時會處理資料複製作業。
  • 修正 JSON 中未偵測到的時鐘頻率,以正確列印 -1 (b/141945670)。

1.0.0-alpha06 版本

2019 年 9 月 18 日

發布 androidx.benchmark:benchmark-common:1.0.0-alpha06androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06androidx.benchmark:benchmark-junit4:1.0.0-alpha061.0.0-alpha06 版本包含以下修訂項目

新功能

  • 已新增檢查工具測試中未正確使用的舊套件檢查功能,但這篇文章提供更實用的錯誤訊息

API 變更

  • 實驗性註解 ExperimentalAnnotationReport 現已公開。是否能使用實驗性 BenchmarkState#report API

1.0.0-alpha05 版本

2019 年 9 月 5 日

發布 androidx.benchmark:benchmark-common:1.0.0-alpha05androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05androidx.benchmark:benchmark-junit4:1.0.0-alpha05。您可以前往這裡查看這個版本包含的修訂版本。

API 變更

  • BenchmarkState.reportData API 現已標示為實驗性質

修正錯誤

  • 修正問題:時鐘鎖定功能在缺少 cutexpr 殼層公用程式的裝置上無法運作。
  • 以往有 ./gradlew lockClocks 工作會啟動舊版 su 公用程式,且該版本不支援 -c 旗標,這個問題現已修正。

1.0.0-alpha04 版本

2019 年 8 月 7 日

發布 androidx.benchmark:benchmark-common:1.0.0-alpha04androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04androidx.benchmark:benchmark-junit4:1.0.0-alpha04。您可以前往這裡查看這個版本包含的修訂版本。

我們還新增了一個說明文件,說明如何在沒有 Gradle 的情況下使用基準資料庫,以便搭配不同的建構系統 (例如 Bazel 或 Buck) 使用,並在持續整合 (CI) 環境中執行。詳情請參閱在不使用 Gradle 的情況下建立基準,以及在持續整合中執行基準

新功能

  • Gradle 外掛程式
    • 現在會自動停用測試涵蓋範圍,並預設使用 AndroidBenchmarkRunner (b/138374050)
    • 支援新的 AGP 式資料複製功能、執行基準及使用 AGP 3.6 以上版本時的資料複製功能
  • JSON 格式新增項目
    • 輸出總基準測試執行時間 (b/133147694)
    • 使用名稱字串 (例如 @Parameters(name = "size={0},depth={1}")) 的 @Parameterized 基準資料現在輸出 JSON 輸出中每個基準的參數名稱和值 (b/132578772)
  • 模擬測試模式 (b/138785848)
    • 新增「模擬測試」模式,讓每個基準迴圈僅執行一次,可檢查是否有錯誤/當機而未評估測量結果。舉例來說,如果預先提交基準的執行速度很快,系統就會進行檢查,確認基準不會中斷。

API 變更

  • 模組結構已變更,請分割程式庫 (b/138451391)
    • benchmark:benchmark-junit4 包含具有 JUnit 依附元件 (AndroidBenchmarkRunnerBenchmarkRule) 的類別,且兩者已移至 androidx.benchmark.junit4 套件
    • benchmark:benchmark-common 包含其餘邏輯,包括 BenchmarkState API
    • 這種分割方式可讓資料庫在沒有 JUnit4 API 的情況下支援基準化
  • 系統現在會將設定警告視為錯誤,並繼續執行測試 (b/137653596)
    • 這樣做是為了進一步鼓勵準確評估,尤其是在持續整合 (CI) 中
    • 這些錯誤可能會透過檢測引數而傳回。例如:-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

修正錯誤

  • 在 Q 裝置上寫入外部儲存空間時,發生錯誤時會出現說明較明確的訊息,並提供解決問題的建議
  • 系統會在基準執行期間自動開啟螢幕,而非關閉螢幕

外部貢獻

  • 感謝 Sergey Zakharov 改善 JSON 輸出功能及修正螢幕關閉問題!

1.0.0-alpha03 版本

2019 年 7 月 2 日

發布 androidx.benchmark:benchmark:1.0.0-alpha03androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03。您可以前往這裡查看這個版本包含的修訂版本。

新功能

  • 在完整的 JSON 報表中顯示因防止裝置過熱而進入休眠的持續時間 (根據基準測試)。

修正錯誤

  • 在執行 Android 外掛程式和 Android 區塊後,不再需要套用 Gradle 外掛程式
  • 支援在設有範圍儲存空間的 Android 10 裝置上支援基準報表

1.0.0-alpha02 版本

2019 年 6 月 6 日

發布 androidx.benchmark:1.0.0-alpha02androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02。此版本中包含的承諾使用權限請參閱這裡

請注意,我們會將 JSON 結構定義視為 API。我們計劃採用與其他 API 相同的穩定性限制:在 Beta 版中保持穩定 (使用極少數例外),並修正最終版本,只有小幅的新增項目和主要變更/移除的部分版本。

API 變更

  • 覆寫的 JSON 結構定義。對 JSON 結構定義所做的進一步變更可能只有新增項目會有下列限制:

    • 重新整理結果物件結構,以在未來支援更多指標群組 (b/132713021)
    • 在頂層物件中新增測試執行情境資訊,例如裝置和建構資訊,以及時鐘是否鎖定 (b/132711920)
    • 時間指標名稱中包含「ns」一詞 (b/132714527)
    • 每項已回報的指標 (最大值、中位數、最小值) 會增加額外的統計資料,並移除簡化的「nanos」摘要統計資料 (b/132713851)
  • 已移除 XML 輸出 (b/132714414)

  • 已從 BenchmarkState.reportData API 中移除過熱保護偵測機制 (b/132887006)

修正錯誤

  • 已修正 ./gradlew lockClocks 並未安裝在部分近期的 OS 裝置上 (b/133424037)
  • 模擬器的過熱保護偵測機制已停用 (b/132880807)

1.0.0-alpha01 版本

2019 年 5 月 7 日

發布 androidx.benchmark:benchmark:1.0.0-alpha01。此版本提供的修訂版本可在這裡取得。