基準

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

宣告依附元件

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

Macrobenchmark

如要在專案中使用 Macrobenchmark,請將以下依附元件加入巨觀效能基準測試模組build.gradle 檔案中:

Groovy

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

Kotlin

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

Microbenchmark

如要在專案中使用 Microbenchmark,請將以下依附元件加入微基準測試模組build.gradle 檔案中:

Groovy

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

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

Kotlin

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

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

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

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

Groovy

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

Kotlin

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

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

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

意見回饋

您的意見可協助我們改善 Jetpack。如果您發現新問題,或是有改進這個程式庫的建議,請告訴我們。回報新問題前,請先查看這個程式庫的現有問題。只要按一下星號按鈕,即可投票給現有的問題。

建立新問題

詳情請參閱 Issue Tracker 文件

1.4 版

1.4.0 版本

2025 年 7 月 30 日

發布 androidx.benchmark:benchmark-*:1.4.0。1.4.0 版包含這些修訂項目

自 1.3.0 版以來的重要異動

Microbenchmark

  • 將 Gradle 工作 lockClocksunlockClocks 移至基準專案,而非頂層,以尊重 Gradle 專案隔離。
  • 重構 BenchmarkRule,以協同程式為基礎建構,並支援更完善的 yield() 行為。這應可大幅降低基準測試執行期間 (尤其是長時間的 CI 執行) 發生 ANR 的風險。注意:UI 基準測試應使用 measureRepeatedOnMainThread 執行

Macrobenchmark

  • 在 API 34 以上版本中新增了 CompilationMode.None() 的解決方法,因為 ART 會在首次啟動後部分編譯應用程式,導致效能不一致。
  • 實驗功能 - Startup Insights 可以傳遞 MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))),醒目顯示啟動 Macrobenchmark 中的某些常見問題。
  • 新增 ArtMetric,可用於偵測 JIT 編譯和未最佳化的類別載入作業,這兩者都有助於驗證基準設定檔最佳化作業。

基準設定檔

  • BaselineProfileRule 現在會收集多程序應用程式的設定檔。

其他變更

  • TraceProcessor 已抽出至專屬程式庫 (androidx.benchmark:benchmark-traceprocessor),因此可在其他情況下使用,不限於 Macrobenchmark 指標。您也可以定義自己的 ServerLifecycleManager,在電腦 JVM 上執行。

1.4.0-rc01 版本

2025 年 6 月 18 日

發布 androidx.benchmark:benchmark-*:1.4.0-rc01。1.4.0-rc01 版包含這些修訂項目

修正錯誤

  • 新增解決方法,避免執行階段映像檔導致 CompilationMode.None() 無法在第一次疊代後評估最差情況的效能。很抱歉,這個解決方法需要延遲 5 秒,才能在每個巨集基準測試套件的開頭刻意損毀執行階段映像檔 (I4a4f1)。

1.4.0-beta02 版本

2025 年 6 月 4 日

發布 androidx.benchmark:benchmark-*:1.4.0-beta02。1.4.0-beta02 版包含這些修訂項目

API 變更

  • 新增 BaselineProfileConfig.Builder,方便 Java 開發人員呼叫 BaselineProfileRule.collectWithResults()。(I94905)

1.4.0-beta01 版本

2025 年 5 月 7 日

發布 androidx.benchmark:benchmark-*:1.4.0-beta01。1.4.0-beta01 版包含這些修訂項目

API 變更

  • 新增 PerfettoTraceRule 建構函式變體,可接受 PerfettoConfig (Ie53ba)

修正錯誤

  • 更新 TraceProcessor 啟動洞察連結格式,使用正確的外掛程式,並採用更清楚的分隔符 (:%3A 短,但兩者都支援) (Ie18ef)
  • 請務必一律使用強制停止功能終止程序,即使已取得 Root 權限並終止系統應用程式也一樣。修正表單的例外狀況:Expected no stdout/stderr from killall ... No such process。(Idca2c)

外部貢獻

  • 新增 TraceProcessorHttpServer 的 Proxy 例外狀況處理常式 (I480f5)

1.4.0-alpha11 版

2025 年 4 月 9 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha11。1.4.0-alpha11 版包含這些修訂項目

API 變更

  • 變更 TraceProcessor 的引數逾時:將逾時時間長度從 Duration 改為 timeoutMs,方便 Java 呼叫端使用。(I9fbb5)
  • TraceProcessor 建構函式標示為內部函式。呼叫端應使用 TraceProcessor.startServerTraceProcessor.runServer。(Ia8c5b)

修正錯誤

  • 使用 MacrobenchmarkScope.killProcess 終止應用程式時,請驗證終止指令結果,以免發生無聲失敗和逾時錯誤。(I84555)

依附元件更新

  • 這個程式庫現在指定 Kotlin 2.0 語言層級,且需要 KGP 2.0.0 以上版本。(Idb6b5)

1.4.0-alpha10 版本

2025 年 3 月 26 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha10。1.4.0-alpha10 版包含這些修訂項目

API 變更

  • TraceProcessor 伺服器負載和查詢的預設逾時時間增加至 120 秒 (先前為 60/30 秒),並使用一個逾時參數設定兩者。(Ifec87)

修正錯誤

  • 修正在沒有 profileinstaller 的情況下,對應用程式進行基準測試或擷取設定檔時,會發生 BroadcastReciever 的幾個問題,並加入 BroadcastReciever。這項設定只會影響已取得根存取權的裝置。(Ied308)

1.4.0-alpha09 版本

2025 年 3 月 12 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha09。1.4.0-alpha09 版包含這些修訂項目

API 變更

  • 新增 TraceProcessor 和 Session API,並提供可關閉的控制代碼,方便搭配自訂生命週期使用。這也是簡化協同程式和 Java API 使用方式的步驟。TraceProcessor.runServer {} 的擴充功能現在標示為實驗功能,因為這些功能可能會在日後移至其他位置,並成為非實驗功能。(I358b4)

修正錯誤

  • 修正基準和基準設定檔擷取功能無法搭配 API 36 運作的問題,這是因為 pgrep toybox 發生變更,現在需要 -a 才能列印完整指令列。(Idc991)
  • 篩選預設追蹤設定,降低新版 API 級別中追蹤資料遺失的風險。(I54e8a)
  • 新增實驗性 androidx.benchmark.killExistingPerfettoRecordings 檢測引數,可設為 false,以便繼續擷取現有的 perfetto 追蹤記錄。根據預設,系統會終止裝置上現有的 perfetto 追蹤記錄擷取作業,避免干擾。(I02a3c)
  • 對於 API 35 以上的已發布 OS 版本,JSON 欄位 context.osCodenameAbbreviated 現在會是 REL,因為基礎平台不再支援非數字的代號。(Ib17fd)
  • 修正發生重新同步影格時,FrameTimingMetric 中的異常終止問題。(I7c6f4b/394610806)
  • 不再假設 Choreographer#doFrameFrameTimingQuery 主執行緒的堆疊框架頂端。(Iee0e0b/340206285)

1.4.0-alpha08 版本

2025 年 2 月 12 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha08。1.4.0-alpha08 版包含這些修訂項目

API 變更

  • TraceProcessor.runSession() 擴充功能 API 移至實驗階段,因為這些 API 最終可能會移至 Android 上的具體建構函式。(Ib0528b/393640753)
  • Startup Insights 的大部分實作項目現已公開/實驗性,並移至 TraceProcessor 構件 (請參閱 StartupInsights)。(I0aa00)
  • 淘汰 BenchmarkRule.runWithTimingDisabled {},改用 BenchmarkRule.runWithMeasurementDisabled {},更清楚地說明行為 - 所有指標都會暫停。此外,由於重新宣告 runWithMeasurementDisabled 函式來開放存取權是不可能的 (因為該函式是內嵌函式),因此請公開 MicrobenchmarkScope 超類別。(I9e23bb/389149423b/149979716)
  • 基準測試程式庫已遷移至 Kotlin 2.0。(I9d1e0)
  • 已移除 androidx.benchmark.startupProfiles.enable 檢測引數。由於 BaselineProfileRule.collect() 中的 includeInStartupProfile arg 可控制這項功能,因此不再需要使用這個屬性。(I39eb4)

修正錯誤

  • 減少剖析期間呼叫的 Microbenchmark 內部函式數量,讓方法追蹤等項目更清楚 (Ifaed8)
  • 修正可能導致當機的問題:「Failed to stop [ProcessPid(processName=perfetto, pid=...)]」。現在,如果無法在執行基準測試前停止背景 Perfetto 程序,基準測試會記錄訊息,而不是當機。(I37d3eb/323601788)
  • 修正因輸出格式檢查過於嚴格而導致的「Expected pm dump-profiles stdout」標籤問題。IllegalStateExceptions(I358dc)

1.4.0-alpha07 版本

2025 年 1 月 29 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha07。1.4.0-alpha07 版包含這些修訂項目

新功能

  • BaselineProfileRule 現在推出 collectWithResults(...) API,其中包含計算設定檔的路徑清單。(I056f8)
  • 新增 androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline 檢測引數,可設為 false,在本機測試時停用 measureRepeatedOnMainThread 的截止時間擲回行為。否則不建議使用,因為這會增加測試期間發生 ANR 的可能性。(Idbeecb/353226476)

API 變更

  • @JvmOverloads 新增至 MicrobenchmarkConfig 建構函式。(I13fd3)
  • 重構 BenchmarkRule,以協同程式為基礎建構,並支援更完善的 yield() 行為。這項重構作業移除了數個實驗性 BenchmarkState API,但會視需要進行替換。此外,我們也新增了 runWithMeasurementDisabled,說明行為 (所有評估作業都會暫停)。日後 runWithTimingDisabled 將會淘汰。(I19837b/389149423b/311242861)
  • PerfettoTraceProcessor 移至新的 androidx.benchmark:benchmark-traceprocessor 構件中的 TraceProcessor,並將大部分 API 設為非實驗性質。任何自訂 TraceMetric 或從追蹤記錄讀取資料的項目,都需要更新為新的 TraceProcessor 匯入項目。新的 TraceProcessor API 與舊版 API 的運作方式完全相同,但屬於獨立介面程式庫 (與 Room 的 androidx.sqlite 層類似),且巨集基準測試內建 Android 專屬實作項目。新構件也能在 JVM 上使用,但目前您需要啟動自己的 TraceProcessor 二進位檔副本,並提供要連線的通訊埠。(I3a767I62563b/381134564)

修正錯誤

  • MacrobenchmarkScope.startActivityAndWait 無法啟動目標程序 (可能是因為目標程序發生當機) 時,會擲回更明確的錯誤訊息,而不是較為模稜兩可的「無法確認活動啟動完成」訊息 (I3539b)
  • 修正 Kotlin 範例中的幾個語法錯誤,以及 Java / build.gradle 範例中的語法醒目顯示問題。(Ib3808)
  • 清楚說明 ArtMetricCaptureInfo 參數文件。(I96e60)

1.4.0-alpha06 版本

2024 年 12 月 11 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha06。1.4.0-alpha06 版包含這些修訂項目

API 變更

  • 已移除 PerfettoTraceProcessor.Session.query()@Language("sql") 的用法,因為 Studio 醒目顯示/剖析功能已損壞。(Idc2fab/377733398)

修正錯誤

  • 這個程式庫現在使用 JSpecify 空值註解,這些註解屬於型別用途。Kotlin 開發人員應使用下列編譯器引數,強制執行正確用法:-Xjspecify-annotations=strict (這是 Kotlin 編譯器 2.1.0 版的預設值)。(I46810b/326456246)
  • 修正 ArtMetric,以回報類別載入 (而非初始化),並改善文件,清楚說明執行階段行為。(I9915c)
  • 在 Android 多使用者模式下,只有已取得根存取權的裝置才能以根身分執行指令。(I88b44)

1.4.0-alpha05 版

2024 年 11 月 13 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha05。1.4.0-alpha05 版包含這些修訂項目

修正錯誤

  • 修正 API 34 以上版本的問題:CompilationMode.None() 的效能不一致,無法代表初始效能和最差效能。這項做法可解決平台變更問題,讓 ART 的編譯狀態 verify 在首次啟動後不久,就能部分編譯應用程式 (只會影響類別載入)。(Ie48d0)
  • 修正問題:由於 Perfetto 追蹤記錄中的程序名稱遭到截斷,導致系統擷取 (特別是較短的) 追蹤記錄時,無法回報內建 Macrobenchmark 指標的測量結果。現在,除了預期的套件名稱,巨集基準測試也會在所有內建查詢中尋找遭截斷的套件名稱,藉此解決這個問題。請注意,自訂 TraceMetric 實作項目或 PerfettoSession.query 的其他直接呼叫端,可以將 Perfetto 查詢中的 process.name LIKE "$packageName" 變更為 (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"),藉此實作相同的行為。(I5bf01b/377565760)

1.4.0-alpha04 版本

2024 年 10 月 30 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha04。1.4.0-alpha04 版包含這些修訂項目

新功能

  • (實驗功能) 啟用基準設定檔產生功能,並針對安裝到次要使用者的應用程式 (例如無螢幕 Android Auto 裝置上的任何應用程式) 進行基準測試。我們已在部分情境中測試這項支援功能,但如果無法正常運作,請回報錯誤。(I9fcbeb/356684617b/373641155)

修正錯誤

  • isProfileable 現在一律會在基準建構作業中遭到覆寫,而 isDebuggable 現在也一律會在基準和 nonMinified (基準設定檔擷取) 建構作業中遭到覆寫。(I487fab/369213505)
  • 修正 API 28 之前的某些實體裝置上的編譯偵測問題,影響 json context.compilationModeandroidx.benchmark.requireAot=true 的行為 (不再錯誤擲回) (Ic3e08b/374362482)
  • CpuEventCounter 指標中,如果觀察到無效的測量結果 (例如 instructions/cpucycles==0),則會擲回 (I8c503)

1.4.0-alpha03 版

2024 年 10 月 16 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha03。1.4.0-alpha03 版包含這些修訂項目

API 變更

  • Macrobenchmark:新增 ArtMetric,可用於檢查設定檔涵蓋範圍或一般 Android RunTime 效能。擷取 JIT、類別初始化 (如適用) 和類別驗證的數量和總時間長度。此外,變更 CaptureInfo 包含預設的選用 ART 主線版本。(I930f7)
  • 在基準 JSON 輸出中新增 coefficientOfVariation,即可顯示特定基準測試執行期間的穩定性。(Ib14ea)

修正錯誤

  • 修正 AVD 裝置名稱含有空格時的 CollectBaselineProfileTask 問題。(Ia0225b/371642809)
  • 推測性修正 StartupMode.COLD 例外狀況造成的錯誤:Package <packagename> must not be running prior to cold start!。現在,MacrobenchmarkScope.killProcess() (包括每次疊代前執行的項目,用於實作 StartupMode.COLD 行為) 會等待驗證應用程式的程序是否已全部停止執行。(I60aa6b/351582215)
  • 修正部分已取得根存取權的模擬器會顯示 UNLOCKED_ 錯誤的問題。(Ic5117)
  • 這個程式庫現在使用 JSpecify 空值註解,這些註解屬於型別用途。Kotlin 開發人員應使用下列編譯器引數,強制執行正確用法:-Xjspecify-annotations=strict (這是 Kotlin 編譯器 2.1.0 版的預設值)。(I7104fb/326456246)

1.4.0-alpha02 版

2024 年 10 月 2 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha02。1.4.0-alpha02 版包含這些修訂項目

API 變更

  • 將 Gradle 工作 lockClocksunlockClocks 移至基準專案,而非頂層。很抱歉,如果不中斷專案隔離,就無法將這些動作註冊為頂層動作,因此必須進行這項變更。(I02b8fb/363325823)

修正錯誤

  • BaselineProfileRule 現在會在區塊結尾發出信號,要求傾印設定檔,藉此為多程序應用程式收集設定檔。如果以設定檔為基礎的編譯作業從未成功找到要廣播的程序,編譯作業就會失敗,因為設定檔資料不應包含在內。此外,還新增了檢測引數,可控制傾印等待時間長度:androidx.benchmark.saveProfileWaitMillis (I0f519b/366231469)
  • 從 Benchmark 1.3.2:修正 Firebase Test Lab (FTL) 無法從基準設定檔 Gradle 外掛程式擷取基準設定檔或 Macrobenchmark 結果檔案的問題。(I2f678b/285187547)

如要使用 FTL,請在外掛程式區塊中,將外掛程式套用至基準設定檔模組,並使用:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

然後使用下列指令設定 Firebase Test Lab:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

此外,建立的 FTL 裝置也需要新增至基準設定檔擴充功能:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

1.4.0-alpha01 版

2024 年 9 月 18 日

發布 androidx.benchmark:benchmark-*:1.4.0-alpha01。1.4.0-alpha01 版包含這些修訂項目

新功能 - 應用程式啟動深入分析

  • 您可以在 Macrobenchmark 中啟用應用程式啟動洞察的初始版本。(09fae38)

如要在啟動基準測試中啟用這項功能,請按照下列步驟操作:

  @Test
  fun startup {
      macrobenchmarkRule.measureRepeated(
          
          packageName = "com.example.my.application.id"
          metrics = listOf(StartupTimingMetric()),
          iterations = 5,
          startupMode = StartupMode.COLD,
          compilationMode = CompilationMode.None(),
          experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
          ) {
          scope.startActivityAndWait(...)
      }
  }

接著執行啟動基準測試,分析追蹤記錄以找出常見問題,並在基準測試分頁的 Studio 測試輸出內容中,於指標後方列印這些問題,例如:

StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│   ├──   timeToFullDisplayMs                min  1,147.2,   median  1,208.8,   max  1,307.4
│   └──   timeToInitialDisplayMs             min  1,147.2,   median  1,208.8,   max  1,307.4
├── App Startup Insights
│   ├── App in debuggable mode (expected: false)
│   │   └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│   ├── Potential CPU contention with another process (expected: < 100000000ns)
│   │   └── seen in iterations: 4(105022546ns)
│   └── Main Thread - Binder transactions blocked (expected: false)
│       └── seen in iterations: 7(true)
└── Traces
    └── Iteration 0 1 2 3 4 5 6 7 8 9

這項功能仍在開發階段,後續會改善文件和擴充性,歡迎提供意見回饋。

新功能

  • 新增 Gradle 屬性 androidx.baselineprofile.suppressWarnings,可抑制所有基準設定檔警告。(314153a)
  • 微基準測試指標現在會以計數器形式顯示在 Perfetto 追蹤記錄中。(3214854)
  • 新增實驗性指令碼,用於停用 JIT (需要 Root 權限 / 重新啟動執行階段),以及重設裝置效能/測試狀態。目前不會以 Gradle 工作形式發布。(7c3732b)
  • 新增基準測試引數,在模擬器上執行時略過測試。啟用 automaticGenerationDuring 建構作業後,基準測試也會觸發基準設定檔產生作業。如果使用模擬器,這項測試就會失敗。有了新引數 skipBenchmarksOnEmulator,我們就能略過測試。(0c2ddcd)
  • 變更效能事件啟用邏輯,在 API 23 以上版本執行 (2550048)

API 變更

  • 現有的實驗性 PerfettoConfig 引數已移至新的 ExperimentalConfig 物件。MacrobenchmarkRule.measureRepeated()

修正錯誤

  • 增加 lockClocks.sh 重試次數 (99e9dac)
  • 如果現有 nonMinified 和基準建構類型,請勿建立。由於發生錯誤,即使 nonMinified 和基準建構類型存在,系統仍會重新建立這些類型。(e75f0a5)
  • TraceSectionMetric 結果中忽略非終止切片。(a927d20)
  • 改善模擬器檢查功能,將 sdk_ 前置字元納入考量。(1587de8)
  • FrameTimingGfxInfoMetric 中將未執行的套件視為已清除。(35cc79c)
  • 修正 androidx.benchmark.cpuEventCounter 為非指令事件產生損毀值的問題。(06edd59)
  • 修正 resumeTiming/runWithTimingDisabled,以遵守指標優先順序,並大幅減少暫停/繼續較低優先順序指標對較高優先順序指標結果的影響。舉例來說,如果透過 cpuEventCounter.enable 插樁引數使用 CPU 效能計數器,暫停/繼續時,timeNs 不會再大幅減少。(5de0968)

1.3 版本

1.3.4 版本

2025 年 3 月 26 日

發布 androidx.benchmark:benchmark-*:1.3.4。1.3.4 版包含這些修訂版本

修正錯誤

  • 修正基準測試基準 Gradle 外掛程式中的 Gradle 專案隔離不相容問題。(b/404523257)

1.3.3 版本

2024 年 10 月 16 日

發布 androidx.benchmark:benchmark-*:1.3.3。1.3.3 版包含這些修訂項目

修正錯誤

  • 修正 AVD 裝置名稱含有空格時的 CollectBaselineProfileTask (Ia0225b/371642809)

1.3.2 版

2024 年 10 月 2 日

發布 androidx.benchmark:benchmark-*:1.3.2。1.3.2 版包含這些修訂項目

修正錯誤

  • 修正 Firebase Test Lab (FTL) 無法從基準設定檔 Gradle 外掛程式擷取基準設定檔或 Macrobenchmark 結果檔案的問題。(I2f678b/285187547)

如要使用 FTL,請在外掛程式區塊中,將外掛程式套用至基準設定檔模組,並使用:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

然後使用下列指令設定 Firebase Test Lab:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

此外,建立的 FTL 裝置也需要新增至基準設定檔擴充功能:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

1.3.1 版本

2024 年 9 月 18 日

發布 androidx.benchmark:benchmark-*:1.3.1。1.3.1 版包含這些修訂項目

修正錯誤

  • 新增 Gradle 屬性 androidx.baselineprofile.suppressWarnings,可禁止顯示所有基準設定檔警告 (I7c36eb/349646646)
  • 修正基準設定檔 Gradle 外掛程式,如果應用程式已建立 nonMinified…benchmark…,則使用這些項目,而非建立包裝函式。(Ia8934b/361370179)
  • 修正模擬器啟用 automaticGenerationDuringBuild 時發生的 java.lang.AssertionError: ERRORS (not suppressed): EMULATOR。新引數會改為略過測試。(If3f51b/355515798)
  • Microbenchmark 縮減 - 將 org.junit.runner.notification.RunListener 的子類別保留在基準程式庫 ProGuard 中 (Ic8ed5b/354264743)
  • 修正 TraceSectionMetric,忽略非終止切片。先前這些項目會視為 -1 持續時間,例如在加總或尋找最短時間時。(If74b7)
  • 修正 FrameTimingGfxInfoMetric 中的一個問題,此問題會導致如果處理程序尚未執行,啟動指標就會停止運作。(I6e412)

1.3.0 版本

2024 年 8 月 21 日

發布 androidx.benchmark:benchmark-*:1.3.0。1.3.0 版包含這些修訂項目

自 1.2.0 版以來的 Microbenchmark 變更

  • 在大多數裝置上執行微基準測試時,方法追蹤功能預設為開啟
    • 方法追蹤會在測量後以獨立階段執行,因此單一基準測試執行作業可同時輸出準確的測量結果和方法追蹤記錄
    • 在部分 Android 作業系統和 ART 版本上進行方法追蹤,會影響後續的測量階段。在這些版本上,方法追蹤功能預設為關閉,且系統會將警告訊息列印至 Studio 輸出內容
  • 主要執行緒基準和 ANR
    • 為 UI 執行緒基準測試 (例如與 Compose/View UI 互動的基準測試) 新增 measureRepeatedOnMainThread,避免執行時間過長時發生 ANR。
    • 如果預期方法追蹤會超過 ANR 避免期限,系統就會略過追蹤。將 androidx.benchmark.profiling.skipWhenDurationRisksAnr 設為 false 即可停用這項行為 (不建議用於 CI 執行作業,因為 ANR 可能會導致長時間的 CI 執行作業發生問題)。
  • 壓縮
    • 內建 ProGuard 規則,可改善啟用壓縮功能時的微基準測試
    • 程式庫模組中的縮減/R8 需要 AGP 8.3,且可透過 build.gradle 中的 android.buildTypes.release.androidTest.enableMinification 啟用
    • 新增實驗性 BlackHole.consume() API,防止程式碼遭到淘汰 (If6812b/286091643)
  • 指標
    • 實驗性 CPU 事件計數器功能 (來自 perf_event_open 的指標,在大多數平台版本上都需要根層級存取權)、透過 InstrumentationArgument androidx.benchmark.cpuEventCounter.enable 存取 (可設為 true),以及可設為 (Instructions,CpuCycles) 的 androidx.benchmark.cpuEventCounter.events。部分 userdebug 模擬器應支援這項功能,但我們尚未在所有可用模擬器上測試支援情況

自 1.2.0 版以來的 MACRObenchmark 變更

  • 全面翻新巨集基準測試的方法追蹤功能。
    • 現在方法追蹤範圍會限定在 measureBlock 的持續時間內,如果程序多次啟動,則可擷取多個工作階段。
    • 先前,方法追蹤僅適用於 StartupMode.COLD 基準測試,且不會擷取任何未重新啟動目標程序的 measureBlocks
    • 修正巨觀基準測試中的方法追蹤排清問題,即使在較慢的裝置上,方法追蹤也應能完整擷取並有效。(I6349ab/329904950)
  • 在個別warmUp疊代期間,當程序遭到終止時,正確傾印 ART 設定檔,以提高CompilationMode.Partial(warmup=N)測量準確度。(I17923)
  • Drop Shader 廣播失敗訊息
    • 在捨棄著色器廣播失敗訊息中新增偵錯建議
    • 新增兩個檢測引數,覆寫著色器捨棄行為,解決在沒有 ProfileInstaller 1.3 的情況下,對應用程式進行基準測試時發生的當機問題:
      • androidx.benchmark.dropShaders.enable=true/false:可用於略過所有著色器捨棄作業 (包括在 StartupMode.Cold 啟動時完成的作業),特別是在基準化尚未使用 profileinstaller 1.3 的應用程式時
      • androidx.benchmark.dropShaders.throwOnFailure=true/false:可用於容許嘗試捨棄著色器時發生的失敗情形,例如在沒有 profileinstaller 1.3 (I4f573) 的情況下,對應用程式進行基準測試時。
  • 新增實驗性 MacrobenchmarkRule#measureRepeated 變數,可接受自訂 PerfettoConfig,以完全自訂 Perfetto 追蹤記錄。請注意,設定錯誤可能會導致內建指標類別失敗。(Idfd3db/309841164b/304038384)
  • 執行 Macrobenchmark 前,請先取消背景 dexopt 工作,以減少干擾。(I989ed)
  • Macrobenchmark 現在會等待 1 秒,讓目標應用程式排清 ART 設定檔 (先前等待時間為 500 毫秒)。(I85a50b/316082056)
  • TraceSectionMetric 大幅修正
    • 注意TraceSectionMetric下列變更可能會影響 CI 用量輸出內容,並可能造成不連續或中斷剖析
    • 總和現在是預設值,因為這項指標大多用於重複事件,而第一個值會捨棄這些情況下的資料
    • 可自訂程度更高,提供更多模式
    • 模式名稱現在會嵌入指標輸出名稱 (在 Studio 和 JSON 中)
    • 現在支援使用 Trace.{begin|end}AsyncSection 建立的切片。
  • 指標
    • 電源 - 新增 PowerMetric.deviceSupportsHighPrecisionTrackingPowerMetric.deviceBatteryHasMinimumCharge()PowerMetric.deviceSupportsPowerEnergy()
    • 已將 Metric.getResult 重新命名為 getMeasurements,以符合傳回類型
    • 為所有啟動偵測失敗新增 log.w / 例外狀況標籤。這不會改變目前的行為 (因此有些錯誤會擲回,有些錯誤則會無法偵測啟動),只是讓您更容易瞭解。一般而言,如果缺少非影格事件,且系統偵測到啟動作業時擲回例外狀況 (影格時間資訊除外,來自 UI/RT 切片),就會導致應用程式Log.w()並無法回報啟動指標。(Id240fb/329145809)
    • FrameTimingMetric 中新增 frameCount 測量,協助探索因產生的影格數量變更 (新增動畫、修正失效問題) 而導致測量結果變更的情境。(I1e5aa)
    • 闡明 frameOverrunMs 是追蹤文件可用性的首選指標,並說明原因。(I18749b/329478323)
    • 修正問題:追蹤記錄開頭和結尾的未終止影格可能會配對在一起,導致系統錯誤地回報為單一極長的影格。(I39353b/322232828)
    • 改善未產生影格時的 FrameTimingMetric 錯誤,並在指標剖析失敗時一律輸出追蹤連結,協助診斷問題。(I956b9)
    • 修正 FrameTimingMetric 無法剖析影格 ID 而導致當機的問題,尤其是在特定 OEM 裝置上。(Ia24bcb/303823815b/306235276)
    • 放寬 FrameMetrics 中的檢查嚴格程度,並在錯誤訊息中新增更多詳細資料。(Iadede)

自 1.2.0 版以來,基準設定檔擷取 / Gradle 外掛程式的異動

  • 將 AGP 建議使用的最高版本提高至 9.0.0-alpha01。
  • 請確保 mergeArtProfilemergeStartupProfile 工作一律會等待基準設定檔產生。(I623d6b/343086054)
  • 成功產生基準設定檔後,系統會輸出變更摘要 (I824c8b/269484510)
  • 新增 DSL 來停用警告 (Ic4debb/331237001)
  • 修正問題,確保基準測試在 automaticGenerationDuringBuild 關閉時使用產生的基準設定檔 (Ic144fb/333024280)
  • 修正 BaselineProfile Gradle 外掛程式屬性覆寫,以便在自訂 nonMinified 或基準測試建構類型時,啟用基準設定檔產生和基準測試功能。(Ib8f05b/324837887)
  • 修正 AGP 8.3.0-alpha15 之前的問題,在 AAR 中加入程式庫基準設定檔。(I1d2afb/313992099)
  • 在生成工作結束時,修正基準和啟動設定檔輸出網址。(I802e5b/313976958)

自 1.2.0 版以來的其他重大異動

  • 追蹤記錄擷取
    • 將從錯誤啟動 perfetto 時的 EXITCODE 2 錯誤,減少為記錄的警告
    • 在基準測試中預設啟用 AIDL 追蹤(需要 API 28) (Ia0af2b/341852305)
    • 在基準中預設啟用 porter 標記追蹤功能。例如喚醒鎖定追蹤點。(Icfe44b/286551983)
    • 延長追蹤記錄擷取啟動逾時時間,避免在較慢的裝置上啟動追蹤時發生當機問題 (I98841b/329145808)
    • 新增公開 API PerfettoTraceProcessor.Session.queryMetrics API,提供 JSON、textproto 和 proto 二進位 (未解碼) 變體。您可以使用這些指標查詢 TraceProcessor 內建的指標 (I54d7fb/304038382)
    • 在 Perfetto 追蹤記錄中啟用封鎖啟動功能,降低追蹤記錄開頭遺失資料的風險。僅支援 API 33 以上版本。(Ie6e41b/310760059)
  • JSON 輸出內容
    • 在 JSON 輸出內容的基準環境中新增其他資訊:
      • context.artMainlineVersion - Art 主系列模組的整數版本 (如果裝置上有,則為 -1)
      • context.build.id - Equals android.os.Build.ID
      • context.build.version.codename - 等於 android.os.Build.VERSION.CODENAME
      • context.build.version.abbreviatedCodename - 對應於預先發布的代號首字母 (包括在發布版本中) (Ie5020)
    • 在 JSON 輸出中新增 profilerOutput 清單,方便使用分析器追蹤記錄 (例如 Perfetto、方法追蹤記錄) (I05dddb/332604449)
    • 在基準測試模組中使用 Android Test Orchestrator 時,系統會顯示警告,因為這會導致每個模組的輸出 JSON 檔案重複遭到覆寫。(Ia1af6b/286899049)
    • 如果檔案名稱超過 200 個字元,系統會擲回例外狀況,避免在寫入或後續處理檔案時發生不明當機問題。(I4a5ab)

1.3.0-rc01 版本

2024 年 8 月 7 日

發布 androidx.benchmark:benchmark-*:1.3.0-rc01。1.3.0-rc01 版包含這些修訂項目

修正錯誤

  • 修正 androidx.benchmark.cpuEventCounter 為非指令事件產生損毀值的問題 (I7386ab/286306579)
  • 修正 resumeTiming/runWithTimingDisabled,以遵守指標優先順序,並大幅降低暫停/繼續較低優先順序指標對較高優先順序指標結果的影響。舉例來說,如果透過 cpuEventCounter.enable 插樁引數使用 CPU 效能計數器,暫停/繼續時,timeNs 不會再大幅減少。(I39c2eb/286306579b/307445225)
  • 將堆疊取樣轉換作業移出主執行緒,降低堆疊取樣導致 measureRepeatedOnMainThread 達到主執行緒硬性逾時的機率。(I487a8b/342237318)
  • 移除手動列出新平台 API 存取權的步驟,因為使用 AGP 7.3 以上版本 (例如 R8 3.3 版) 的 R8 時,系統會透過 API 建模自動執行這項作業,而使用 AGP 8.1 以上版本 (例如 D8 8.1 版) 時,所有建構作業都會自動執行這項作業。如果用戶端未使用 AGP,建議更新至 D8 8.1 以上版本。詳情請參閱這篇文章。(I9496cb/345472586)
  • 新增 agp 版本檢查,將套件名稱做為 instr 引數傳送。在 AGP 8.4.0 之前,目標應用程式套件名稱無法透過檢測設備引數傳送至檢測設備應用程式。(0c72a3f)

1.3.0-beta02 版

2024 年 7 月 10 日

發布 androidx.benchmark:benchmark-*:1.3.0-beta02。1.3.0-beta02 版包含這些修訂項目

修正錯誤

  • 啟動 Perfetto 時,請妥善處理 EXITCODE 2,記錄警告訊息,但繼續執行。

1.3.0-beta01 版本

2024 年 6 月 12 日

發布 androidx.benchmark:benchmark-*:1.3.0-beta01。1.3.0-beta01 版包含這些修訂項目

API 變更

  • 為求一致,已將 MethodTracing.affectsMeasurementOnThisDevice 重新命名為 AFFECTS_MEASUREMENT_ON_THIS_DEVICE。(I1bdfa)
  • 新增實驗性 BlackHole.consume() API,防止在微基準測試中淘汰無效程式碼。(If6812b/286091643)
  • Microbenchmark 現在會正確擲出,避免方法追蹤干擾測量。如果透過檢測設備引數或 MicrobenchmarkConfig 強制啟用方法追蹤,且在方法追蹤後嘗試進行測量,就會在特定裝置上發生這種情況。受影響的裝置執行的是 API 26 到 30,或是受干擾的特定 ART 主線模組版本,且可在執行階段透過 ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice 偵測到。(Iafb92b/303660864)

修正錯誤

  • 建議的最大 AGP 版本已更新為 9.0.0-alpha01。(I5bbb0)
  • 在基準測試環境中新增編譯模式 (If5612b/325512900)
  • 預設啟用 AIDL 追蹤 (需要 API 28) (Ia0af2b/341852305)
  • 在 JSON 輸出內容的基準環境中新增其他資訊:
    • context.artMainlineVersion - Art 主系列模組的整數版本 (如果裝置上有,否則為 -1)
    • context.build.id - 等於 android.os.Build.ID
    • context.build.version.codename - 等於 android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename - 對應於預先發布的代號首字母 (即使在發布版本上也是如此) (Ie5020)
  • 修正 StackSampling,以遵守 androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53)
  • 將巨集 -> 一般依附元件變更為 api(),方便使用 PerfettoTracePerfettoConfig 等項目。(Icdae3b/341851833)
  • 請確保 mergeArtProfilemergeStartupProfile 工作一律會等待基準設定檔產生。(I623d6b/343086054)
  • 決定是否啟用變體時,請考量變體的啟用狀態。(I5d19eb/343249144)
  • 延長 Perfetto 追蹤記錄處理工具的預設啟動逾時時間。(I87e8cb/329145808)

1.3.0-alpha05 版

2024 年 5 月 14 日

發布 androidx.benchmark:benchmark-*:1.3.0-alpha05。1.3.0-alpha05 版包含這些修訂項目

修正錯誤

  • 當巨觀基準測試指標為所有疊代傳回零值時,擲回更清楚的例外狀況 (Iab58fb/314931695)
  • 微基準測試 ProGuard 規則新增其他解決方法規則,包括支援監聽器規則和其他觀察到的警告 / 錯誤。(I14d8fb/329126308b/339085669)
  • 方法追蹤會在 Macrobenchmark 期間以獨立階段執行,不再影響評估結果。(If9a50b/285912360b/336588271)
  • 在捨棄著色器廣播失敗訊息中,新增額外的偵錯建議。(I5efa6b/325502725)

1.3.0-alpha04 版本

2024 年 5 月 1 日

發布 androidx.benchmark:benchmark-*:1.3.0-alpha04。1.3.0-alpha04 版包含這些修訂項目

API 變更

  • 新增實驗性 MacrobenchmarkRule#measureRepeated 變數,可接受自訂 PerfettoConfig,以完全自訂 Perfetto 追蹤記錄。請注意,設定錯誤可能會導致內建指標類別失敗。(Idfd3db/309841164b/304038384)
  • 將「PowerMetric.deviceSupportsPowerEnergy」重新命名為「PowerMetric.deviceSupportsHighPrecisionTracking」,以便清楚理解 (I5b82f)
  • 新增 PowerMetric.deviceBatteryHasMinimumCharge()PowerMetric.deviceSupportsPowerEnergy(),可根據裝置電量測量功能變更或略過基準。(I6a591b/322121218)

修正錯誤

  • 新增與先前基準設定檔的比較 (I824c8b/269484510)
  • 新增 DSL 來停用警告 (Ic4debb/331237001)
  • 基準變體停用時,例外狀況會變更為資訊記錄 (I8a517b/332772491)
  • 簡化擷取 Macrobenchmark 方法追蹤記錄的程序,範圍限定在實際 measureBlock() 的持續時間。先前,這項功能會在目標程序啟動時開始運作,且僅支援冷啟動 (Iee85ab/300651094)
  • 避免在 Perfetto 追蹤記錄處理器啟動緩慢時發生當機問題 (I98841b/329145808)

1.3.0-alpha03 版

2024 年 4 月 17 日

發布 androidx.benchmark:benchmark-*:1.3.0-alpha03。1.3.0-alpha03 版包含這些修訂項目

新功能

  • 新增公開 API PerfettoTraceProcessor.Session.queryMetrics API,包含 JSON、textproto 和 proto 二進位 (未解碼) 變體。您可以使用這些指標查詢 TraceProcessor 內建的指標 (I54d7fb/304038382)。
  • 在 JSON 輸出中新增 profilerOutput,方便使用剖析追蹤記錄 (例如 perfetto、方法追蹤記錄) 相關工具。(I05dddb/332604449)
  • 在基準 Perfetto 設定中新增電源標記。例如喚醒鎖定追蹤點。(Icfe44b/286551983)
  • 新增 inst 引數 androidx.benchmark.profiling.skipWhenDurationRisksAnr,可以設為 false,避免在預期時間可能導致 ANR 時略過方法追蹤記錄,強烈建議在 CI 執行中避免使用。
  • 新增實驗性 inst 引數 androidx.benchmark.profiling.perfCompare.enable,將此引數設為 true,即可在測量和剖析階段之間執行比較計時。例如,評估方法追蹤的額外負荷時,這項功能就非常實用。(I61fb4b/329146942)

API 變更

  • TraceSectionMetric.Mode 變更為密封類別,以便日後擴充,且不會破壞完整的 when 陳述式 (I71f7b)
  • 新增 TraceSectionMetric.Mode.Average.Count,並重新排序引數,讓較常見的引數 (模式) 位於引數清單的前面,減少指定參數名稱的需求。(Ibf0b0b/315830077b/322167531)
  • Metric.getResult 重新命名為 getMeasurements,以符合傳回型別 (I42595)

修正錯誤

  • 修正問題,確保基準測試在 automaticGenerationDuringBuild 關閉時使用產生的基準設定檔 (Ic144fb/333024280)
  • 修正 BaselineProfile Gradle 外掛程式屬性覆寫,以便在自訂 nonMinified 或基準測試建構類型時,啟用基準設定檔產生和基準測試功能。(Ib8f05b/324837887)
  • 修正巨觀基準測試中的方法追蹤排清問題,即使在較慢的裝置上,方法追蹤也應能完整擷取並有效。(I6349ab/329904950)
  • 在 Perfetto 追蹤記錄中啟用封鎖啟動功能,降低追蹤記錄開頭遺失資料的風險。僅支援 API 33 以上版本。(Ie6e41b/310760059)
  • 在基準測試模組中使用 Android Test Orchestrator 時,系統會顯示警告,因為這會導致每個模組的輸出 JSON 檔案重複遭到覆寫。(Ia1af6b/286899049)
  • 強制使用「,」(半形逗號) 做為千位數分隔符,確保 Studio 輸出內容一致,並忽略裝置語言代碼 (I3e921b/313496656)
  • TraceSectionMetric 現在支援使用 Trace.{begin|end}AsyncSection 建立的切片。(I91b32b/300434906)
  • 為所有啟動偵測失敗新增 log.w / 例外狀況標籤。這不會改變目前的行為 (因此有些錯誤會擲回,有些錯誤則會無法偵測啟動),只是讓您更容易瞭解。一般而言,如果缺少非影格事件,且系統偵測到啟動作業時擲回例外狀況 (影格時間資訊除外,來自 UI/RT 切片),就會導致應用程式Log.w()並無法回報啟動指標。(Id240fb/329145809)
  • 執行 Macrobenchmark 前,請先取消背景 dexopt 工作,以減少干擾。(I989ed)
  • FrameTimingMetric 中新增 frameCount 測量,協助探索因產生的影格數量變更 (新增動畫、修正失效問題) 而導致測量結果變更的情境。(I1e5aa)
  • 闡明 frameOverrunMs 是追蹤文件可用性的首選指標,並說明原因。(I18749b/329478323)

1.3.0-alpha02 版本

March 20, 2024

發布 androidx.benchmark:benchmark-*:1.3.0-alpha02。1.3.0-alpha02 版包含這些修訂項目

新功能

  • 透過內嵌的 ProGuard 規則,在微型基準測試中實驗性支援 R8。請注意,這項支援功能處於實驗階段,且需要 AGP 8.3 才能壓縮程式庫模組測試。在基準測試模組的 build.gradle 中使用下列項目啟用 R8 縮減/最佳化功能,視工作負載而定,這應可大幅提升效能。(I738a3b/184378053)

    android {
        buildTypes.release.androidTest.enableMinification = true
    }
    

修正錯誤

  • 修正方法追蹤警告,使其與微基準測試輸出內容位於不同行。(I0455cb/328308833)

1.3.0-alpha01 版本

2024 年 2 月 21 日

發布 androidx.benchmark:benchmark-*:1.3.0-alpha01查看 1.3.0-alpha01 版的修訂項目

API 變更

  • 重新命名 MicrobenchmarkConfig 布林值參數,避免使用不必要的「應」字 (Ia8f00b/303387299)
  • 新增 BenchmarkRule.measureRepeatedOnMainThread,因此主執行緒基準 (例如觸控 Views 或 Compose UI 的基準) 可以避免觸發 ANR,尤其是在 CI 中的大型套件期間。(I5c86d)
  • 新增 FrameTimingGfxInfoMetric,這是 FrameTimingMetric 的實驗性替代實作項目,可直接從平台取得測量結果,而非從 Perfetto 追蹤記錄擷取。(I457cbb/322232828)
  • 新增在個別 warmUp 疊代期間傾印 ART 設定檔的功能。(I17923)
  • TraceSectionMetric API 有多項異動:
    • 新增 Mode.MinMode.Max
    • 新增標籤引數,將區段名稱覆寫為指標標籤
    • 在輸出內容中新增模式名稱,清楚說明指標意義
    • 將預設值變更為總和,因為這項指標大多用於重複事件 請注意 CI 使用情形的這項變更,因為這可能會造成不連續或中斷剖析。(Ic1e82b/301892382b/301955938)

修正錯誤

  • 如果指定的受管理裝置不存在,基準設定檔 Gradle 外掛程式會顯示更清楚的錯誤訊息 (Idea2bb/313803289)
  • 修正 AGP 8.3.0-alpha15 之前的 AAR 中包含程式庫基準設定檔的問題 (I1d2afb/313992099)
  • 修正生成作業結束時的基準和啟動設定檔輸出網址 (I802e5b/313976958)
  • 調整資料來源逾時,嘗試修正 java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7db/323601788)
  • 新增兩個檢測引數,覆寫著色器捨棄行為,解決在沒有 ProfileInstaller 1.3 的情況下,對應用程式進行基準測試時發生的當機問題:
    • androidx.benchmark.dropShaders.enable=true/false:可用於略過所有著色器捨棄作業 (包括在 StartupMode.Cold 啟動時完成的作業),特別是在基準化尚未使用 profileinstaller 1.3 的應用程式時
    • androidx.benchmark.dropShaders.throwOnFailure=true/false:可用於容許嘗試捨棄著色器時發生的失敗情形,例如在沒有 profileinstaller 1.3 (I4f573) 的情況下,對應用程式進行基準測試時。
  • 如果預計 UI 執行緒上的方法追蹤時間會超過幾秒,請略過追蹤,並在擲回時清除方法追蹤。(I6e768)
  • 如果檔案名稱超過 200 個字元,系統會擲回例外狀況,避免在寫入或後續處理檔案時發生不明當機問題。(I4a5ab)
  • 修正問題:追蹤記錄開頭和結尾的未終止影格可能會配對在一起,導致系統錯誤地回報為單一極長的影格。(I39353b/322232828)
  • 在 API 30 以上版本重新安裝套件時,請使用 --skip verification (API 30-33),清除使用者建構版本中的 ART 設定檔。這有助於略過 Play 安全防護警告,避免某些類型的裝置發生故障。(Ic9e36)
  • 如果不是系統應用程式 (例如系統 UI 或啟動器),請使用 am force-stop 終止應用程式。(I5e028)
  • Macrobenchmark 現在會等待目標應用程式的 1 second 排清 ART 設定檔 (先前是等待 500 ms)。(I85a50b/316082056)
  • 改善未產生影格時的 FrameTimingMetric 錯誤,並在指標剖析失敗時一律輸出追蹤連結,協助診斷問題。(I956b9)
  • 修正 FrameTimingMetric 無法剖析影格 ID 而導致當機的問題,尤其是在特定 OEM 裝置上。(Ia24bcb/303823815b/306235276)
  • 放寬 FrameMetrics 中的檢查嚴格程度,並在錯誤訊息中新增更多詳細資料。(Iadede)

1.2 版本

1.2.4 版本

2024 年 4 月 17 日

發布 androidx.benchmark:benchmark-*:1.2.4。1.2.4 版包含這些修訂項目

修正錯誤

  • 修正基準設定檔 srcset 未在基準測試變體中設定的問題。此外,也修正了程式庫中導致循環依附元件的 automaticGenerationDuringBuild。(I28ab7b/333024280)
  • 如果不是系統應用程式 (例如系統 UI 或啟動器),請使用 am force-stop 終止應用程式。修正 StartupMode.COLD 基準測試因程序終止未完全成功,而導致「Package $package must not be running prior to cold start!」當機的問題。(I5e028)

1.2.3 版

2024 年 1 月 24 日

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

修正錯誤

  • 如果 AGP 版本為 8.3.0 以上,系統會從基準設定檔 Gradle 外掛程式移除例外狀況。
  • 修正 AGP 8.3.0-alpha15 之前的問題,在 AAR 中加入程式庫基準設定檔。

1.2.2 版本

2023 年 12 月 1 日

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

基準設定檔

1.2.1 版本

2023 年 11 月 15 日

發布 androidx.benchmark:benchmark-*:1.2.1查看 1.2.1 版的修訂項目

新功能

1.2.0 版本

2023 年 10 月 18 日

發布 androidx.benchmark:benchmark-*:1.2.01.2.0 版包含此連結所列的修訂項目。

自 1.1.0 版以來的重要異動

基準設定檔

  • 全新基準設定檔 Gradle 外掛程式可自動擷取基準設定檔,並納入測試和建構工作流程。
  • BaselineProfileRule.collect 現在是穩定版,是先前實驗性 BaselineProfileRule.collectBaselineProfile API 的簡化版本
    • 只要指定 packageName,即可啟動應用程式
  • 對於產生基準設定檔的程式庫,您現在可以透過程式碼 (BaselineProfileRule.collect 引數) 篩選產生的規則,甚至透過 Gradle 外掛程式更輕鬆地篩選規則
  • 修正項目

Macrobenchmark

  • 編譯
    • Macrobenchmark 現在會正確地完全重設每項編譯作業的編譯狀態。在 Android 14 之前的版本中,這需要重新安裝 APK,因此強烈建議您在 Android 14 以上版本進行基準測試,以便在測量的內容中保留狀態 (例如使用者登入)。
    • 您也可以分別控管應用程式編譯作業,並使用 CompilationMode.Ignore()插碼引數略過編譯作業,藉此解決這個問題。
  • 檢測引數

    • 支援 androidx.benchmark.dryRunMode.enable 檢測引數 (已推出微型版本),可加快驗證執行速度 (例如建立基準時或在預先提交中)
    • 支援 androidx.benchmark.profiling.mode=StackSamplingMethodTracing
    • 新增 androidx.benchmark.enabledRules,以便在執行階段篩選基準設定檔與 Macrobenchmark 規則測試
    • 新增 androidx.benchmark.perfettoSdkTracing.enable 引數,以使用 tracing-perfetto 啟用追蹤功能,例如 Compose 重組追蹤。請注意,如果搭配 StartupMode.COLD 使用,由於追蹤程式庫會在應用程式啟動期間載入及啟用,因此時間會受到顯著影響。
  • 需求條件

    • 現在目標應用程式必須使用 ProfileInstaller 1.3.0 以上版本,才能擷取 / 重設設定檔,以及清除著色器快取。
  • 全新實驗性指標 API

  • 修正項目

    • 修正從多個 APK 安裝應用程式 (例如從應用程式套件安裝) 時,安裝或擷取設定檔會導致當機的問題。
    • 修正 FrameTimingMetric 忽略影格 ID 不一致的影格 (一般來說,是 API 31 以上版本在漣漪期間的影格) (I747d2b/279088460)
    • 修正大於 64 MB 的追蹤記錄剖析錯誤 (Ief831b/269949822)
    • 釐清裝置 (尤其是模擬器) OS 映像檔未正確設定追蹤或編譯時的錯誤
    • 略過無電池裝置的電池電量檢查 (微觀和巨觀)
    • 改善檔案輸出功能,針對無效的輸出目錄提供更清楚的錯誤訊息,並採用更安全的預設值
    • 持續捨棄著色器快取 (也可透過 MacrobenchmarkScope.dropShaderCache 顯示),提升 StartupMode.COLD 的穩定性
    • 修正 startActivityAndWait 的 Leanback 備用廣告。

Microbenchmark

  • 功能
    • 剖析作業已移至其他指標之後的獨立階段,因此一次測試執行作業可以同時顯示準確的時間剖析結果。
  • 實驗性 API
    • 新增實驗性 MicrobenchmarkConfig API,用於定義自訂指標,以及設定追蹤和剖析功能。可用於擷取方法追蹤記錄或追蹤點 (但請注意追蹤記錄的負擔)。
    • 新增實驗性 API,可獨立控制 BenchmarkState,與 BenchmarkRule 分開使用,不需 JUnit
    • 新增實驗性 PerfettoTrace 記錄,可啟用 Perfetto 追蹤記錄擷取功能,並提供自訂設定,與基準測試 API 分開。
  • 修正項目
    • 解決 Android Studio 基準測試輸出內容缺少開頭空白字元的問題。
    • 修正問題:警告訊息可能無法在 Android Studio 基準測試輸出內容中列印。
    • 修正 Android 13 (API 級別 33) 以上版本發生的 SampledProfiling 錯誤。
    • 大幅提升 dryRunMode 的效能,方法是略過 IsolationActivity 和 Perfetto 追蹤 (在舊版作業系統上,模擬執行模式的速度最多可提升 10 倍)。

1.2.0-rc02 版本

2023 年 10 月 6 日

發布 androidx.benchmark:benchmark-*:1.2.0-rc02查看 1.2.0-rc02 版的修訂項

修正錯誤

  • 修正基準測試檔案輸出,不再中斷BaselineProfile外掛程式檔案複製作業。檔案已產生並複製到裝置外,但已重新命名,因此 Gradle 外掛程式看不到這些檔案。(I8dbccb/303034735b/296453339)
  • 從巨集基準測試模組將內容注入目標應用程式時,釐清 tracing-perfetto 載入錯誤訊息。

1.2.0-rc01 版本

2023 年 9 月 20 日

發布 androidx.benchmark:benchmark-*:1.2.0-rc01查看 1.2.0-rc01 版的修訂項目

修正錯誤

  • 如果 Perfetto SDK 追蹤無法在基準測試中初始化,系統現在會擲回例外狀況 (附上補救說明)。(I6c878b/286228781)
  • 修正將 ART 方法追蹤記錄轉換為 perfetto 格式時,發生的 OOM 當機問題。(I106bdb/296905344)
  • (Macrobenchmark) 釐清連結至 Studio 測試輸出內容時的方法追蹤記錄標籤,並修正方法追蹤記錄檔名,確保裝置/主機上的檔名不重複,因此執行多項基準測試時不會遭到覆寫。(I08e65b/285912360)
  • 確保裝置在擷取基準設定檔時處於喚醒狀態。(I503fc)

1.2.0-beta05 版

2023 年 8 月 30 日

發布 androidx.benchmark:benchmark-*:1.2.0-beta051.2.0-beta05 版包含此連結所列的修訂項目。

新功能

  • 基準設定檔 Gradle 外掛程式現在支援 Android Gradle 外掛程式 8.3。(aosp/2715214)

1.2.0-beta04 版

2023 年 8 月 23 日

發布 androidx.benchmark:benchmark-*:1.2.0-beta041.2.0-beta04 版包含此連結所列的修訂項目。

新功能

  • 基準設定檔 Gradle 外掛程式現在支援 Android Gradle 外掛程式 8.3 版。(aosp/2715214)

修正錯誤

  • 進一步清除輸出檔名,避免輸出檔名中出現「=」和「:」,修正寫入 / 移動及提取檔案時發生的失敗問題 (尤其是來自參數化測試的檔案)。(I759d8)

1.2.0-beta03 版本

2023 年 8 月 9 日

發布 androidx.benchmark:benchmark-*:1.2.0-beta03查看 1.2.0-beta03 版的修訂項目

API 變更

  • 新增引數,將 TraceSectionMetric 篩選為僅限目標套件 (預設為開啟) (Ia219bb/292208786)

修正錯誤

  • 為與構件名稱和其他參照內容保持一致,已將 fullTracing.enable 插樁引數重新命名為 perfettoSdkTracing.enablefullTracing.enable 仍可做為備援。(I7cc00)
  • 基準測試程式庫內部追蹤點 (包括微基準測試迴圈/階段追蹤) 現在會顯示在 Studio 系統追蹤檢視器中,並在 Perfetto 中正確程序下巢狀顯示。(I6b2e7b/293510459)
  • 移除 API 31 以上版本中巨觀基準測試的 NOT-PROFILEABLE 錯誤,並略過 eng/userdebug Root 裝置上的可設定檔檢查。(I2abacb/291722507)
  • 使用 DEX 版面配置最佳化功能時,啟動設定檔規則現在也會視為基準設定檔規則。(aosp/2684246b/293889189)

1.2.0-beta02 版

2023 年 7 月 26 日

發布 androidx.benchmark:benchmark-*:1.2.0-beta021.2.0-beta02 版包含此連結所列的修訂項目。

API 變更

  • 新增微基準自訂指標和設定 (例如剖析器和追蹤) 的實驗性 API。(I86101b/291820856)

修正錯誤

  • 如果作業系統的追蹤設定錯誤,則在巨量基準測試中回報錯誤,這項問題最近已在 API 26/28 ARM64 模擬器中修正。(I0a328b/282191686)
  • 新增編譯重設失敗的詳細資料,建議更新模擬器,因為部分模擬器最近已修正這個問題。(I8c815b/282191686)
  • androidx.test.uiautomator:uiautomator:2.2.0 設為 api,而非 implementation 依附元件。(I1981e)

1.2.0-beta01 版本

2023 年 7 月 18 日

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

修正錯誤

  • 修正 Studio 中基準測試輸出內容有時會遭到抑制的警告,並解決基準測試輸出內容中的前置空白字元未顯示在 Studio 中的問題 (Ia61d0b/227205461b/286306579b/285912360)
  • 修正 FrameTimingMetric 的註解。子指標名稱為「frameDurationCpuMs」。(Ib097fb/288830934)。

1.2.0-alpha16 版

2023 年 6 月 21 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha161.2.0-alpha16 版包含此連結所列的修訂項目。

API 變更

  • BaselineProfileRule.collectBaselineProfile() API 已重新命名為 BaselineProfileRule.collect()。(I4b665)

修正錯誤

  • 支援 androidx.benchmark.profiling.mode = MethodTracing 的 Macrobenchmark。(I7ad37b/285912360)
  • 微型基準測試剖析已移至獨立階段,因此會在測量依序執行,而非取代測量。如果有的話,擷取的 Perfetto 追蹤記錄現在也會包含 MethodTracing 追蹤記錄區段。(I9f657b/285014599)
  • 使用 Mode.Sum,將計數評估新增至 TraceSectionMetric。(Ic121ab/264398606)

1.2.0-alpha15 版

2023 年 6 月 7 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha151.2.0-alpha15 版包含此連結所列的修訂項目。

新功能

  • 新增實驗性 MemoryUsageMetric,可追蹤目標應用程式的記憶體用量。(I56453b/133147125b/281749311)
  • 使用 PerfettoTrace.record 支援完全自訂的 Perfetto 設定 (If9d75b/280460183)
  • 新增屬性,可略過基準設定檔產生作業。使用方式:./gradlew assemble -Pandroidx.baselineprofile.skipgeneration。(I37fdab/283447020)

API 變更

  • collectBaselineProfile API 一律會產生穩定版基準設定檔。已移除 collectStableBaselineProfile API,請改用 collectBaselineProfile。(I17262b/281078707)
  • BaselineProfileRulefilterPredicate arg 變更為非空值,並提供對應的預設值,讓文件中的預設篩選器行為更加清楚。(I3816e)

修正錯誤

  • dryRunMode 中停用 IsolationActivity 和 Perfetto 追蹤功能,因為這些功能佔據了大部分的執行階段,停用後可大幅提升效能。(Ie4f7d)
  • 支援在 Macrobenchmark 中使用檢測測試引數 androidx.benchmark.profiling.mode=StackSamplingandroidx.benchmark.profiling.sampleFrequency 進行呼叫堆疊取樣。(I1d13bb/282188489)
  • 修正在 Android U (API 34) 和模擬器上捨棄著色器時發生的異常終止問題。(I031cab/274314544)

1.2.0-alpha14 版

2023 年 5 月 3 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha141.2.0-alpha14 版包含此連結所列的修訂項目。

修正錯誤

  • 修正 FrameTimingMetric 忽略影格 ID 不一致的影格問題。這會導致在動畫執行期間 (例如漣漪效果),新版平台 (API 31 以上) 上的部分動畫忽略許多影格。RenderThread(I747d2b/279088460)
  • 修正追蹤記錄處理器,可剖析大於 64 MB 的追蹤記錄。(Ief831b/269949822)
  • 修正 Android U 上的基準設定檔產生作業失敗問題,原因是 pm dump-profiles 指令的輸出內容不同。(Id1392b/277645214)
  • 修正 GPU 時脈鎖定指令碼,以正確比較字串 (I53e54b/213935715)

1.2.0-alpha13 版本

2023 年 4 月 5 日

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

API 變更

  • 產生基準設定檔時新增設定檔類型參數,支援即將推出的啟動設定檔功能 (Ie20d7b/275093123)
  • 新增實驗性 TraceMetric API,可根據 Perfetto 追蹤記錄的內容定義完全自訂的指標。(I4ce31b/219851406)
  • 新增實驗性指標,判斷基準測試期間的頁面錯誤次數。(I48db0)

1.2.0-alpha12 版本

2023 年 3 月 22 日

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

新功能

  • 我們發布了 Alpha 版的全新基準設定檔 Gradle 外掛程式,可讓您更輕鬆產生基準設定檔,並簡化開發人員工作流程。

API 變更

  • 移除了 API 21 和 22 的 Perfetto 追蹤支援功能,包括 Microbenchmark 和實驗性 PerfettoTrace API。在此版本之前,部分裝置的 UiAutomation 連線不穩定。(I78e8c)
  • 新增 PerfettoTraceProcessor 的公開實驗性 API,以啟用追蹤內容的剖析功能。這是根據 Perfetto 追蹤記錄資料建立完全自訂指標的步驟。(I2659eb/219851406)

1.2.0-alpha11 版本

2023 年 3 月 8 日

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

修正錯誤

  • 修正從含有多個 APK 的應用程式套件重新安裝或擷取設定檔時,MacrobenchmarkRuleBaselineProfileRule 異常終止的問題。(I0d8c8b/270587281)

1.2.0-alpha10 版本

2023 年 2 月 22 日

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

新功能

  • 在 Android 14 以上版本中,由於有新的平台功能,Macrobenchmark 不再需要重新安裝目標應用程式來重設編譯狀態。先前必須使用已取得根存取權的裝置,或在每次執行基準測試前,處理所有應用程式狀態 (例如使用者登入) 遭移除的問題。(I9b08cb/249143766)

修正錯誤

  • 修正 DryRunMode,避免因略過編譯而導致設定檔空白時當機。而是執行單一疊代並擷取設定檔,確保擷取到內容。(I2f05db/266403227)
  • 修正在舊版 API 級別檢查 powerstats 是否存在時,PowerMetric 異常終止的問題。(5faaf9b/268253898)

1.2.0-alpha09 版本

2023 年 1 月 11 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha09查看 1.2.0-alpha09 版的修訂項

修正錯誤

  • 允許將 None 傳遞至 androidx.benchmark.enabledRules 檢測引數,停用所有基準/基準設定檔產生作業 (I3d7fdb/258671856)
  • 修正應用程式模組中的 PerfettoTrace 擷取 (亦即非自我檢測測試 APK) (I12cfc)
  • 修正 Studio 輸出內容中的基準設定檔 ADB 提取引數順序 (I958d1b/261781624)
  • 現在嘗試執行 Macrobenchmark 時,系統可正確辨識 Arm 模擬器 API 33,後者也能正確顯示警告 (69133bb/262209591)
  • 在 Macrobenchmark 中略過無電池裝置的電池電量檢查 (fe4114b/232448937)

1.2.0-alpha08 版本

2022 年 12 月 7 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha08查看 1.2.0-alpha08 版的修訂項

API 變更

  • 已新增實驗性的新 API PerfettoTrace.record {}PerfettoTraceRule,以擷取 Perfetto 追蹤記錄 (也稱為系統追蹤) 作為測試的一部分,以檢查測試的行為和效能。(I3ba16)
  • BaselineProfileRule 現在可接受篩選器述詞,而不是套件前置字串清單。這樣一來,測試就能完全控制篩選功能。(I93240)
  • 新增實驗性 API BaselineProfileRule.collectStableBaselineProfile,等待 N 個疊代的基準設定檔保持穩定。(I923f3)
  • 新增使用 BaselineProfileRule 產生基準設定檔時,指定輸出檔案名稱前置字串的功能。(I7b59f, b/260318655)

修正錯誤

  • 改善檔案輸出寫入的安全性,避免系統無法靜默輸出 / 附加輸出檔案,尤其是在 API 21/22 上。(If8c44, b/227510293)
  • 修正 simpleperf 追蹤記錄輸出,以正確建立和放置檔案。這通常也能解決無法用 Gradle 提取檔案的問題。(I12a1c, b/259424099)
  • 改善因為 profileinstaller 過舊而出現的列印錯誤問題。現在系統會指出需要更新 profileinstaller 版本 (1.2.1),才能測量 API 31 到 33 的基準設定檔,不再只是表示不支援目前版本。(Ia517f, b/253519888)
  • 修正數個殼層指令失敗的錯誤訊息 列印需要 API <=23,包括perfetto無法擷取二進位檔設定,以及追蹤記錄失敗 (Ib6b87b/258863685)
  • 自動將產生的設定檔規則排序,盡量減少隨時間變化 (在檢查機制規則至來源控制時) 的變更次數。(Ie2509)
  • 已修正 Android 13 (API 33) 之下未取得 Root 權限的版本當機訊息 (Expected no stderr from echo 3 > /proc/sys/vm/drop_caches)。(I6c245b/259508183)

已知問題-MacrobenchmarkScope.dropShaderCache() profileinstaller 資訊清單中缺少播送註冊資料庫,因此可能當機。(I5c728b/258619948) 如要解決 profileinstaller:1.3.0-alpha02 中的問題,請將以下內容新增到應用程式的 (而非基準) AndroidManifest.xml 中:

  <!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
  <receiver
    android:name="androidx.profileinstaller.ProfileInstallReceiver"
    android:permission="android.permission.DUMP"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
    </intent-filter>
  </receiver>

1.2.0-alpha07 版

2022 年 11 月 9 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha07查看 1.2.0-alpha07 版的修訂項

API 變更

  • 新增 PowerMetric API,用於測量 Macrobenchmark 中的能量和電力 (Ife601b/220183779)
  • 已修正 MacrobenchmarkScope.dropShaderCache(),以便確實捨棄著色器快取。這麼做會從 StartupMode.COLD 基準移除約 20 毫秒的雜訊,因為現在每次疊代都會清除著色器。先前,使用暖身疊代的 Partial 編譯作業會回報不正確的數字,因為著色器快取較有可能在暖身時發生。這項修正需要使用已解鎖裝置,或是在目標應用程式中使用 profileinstaller:1.3.0-alpha02。如要瞭解 ProfileInstaller 程式庫的 API 變更,請參閱 ProfileInstaller 1.30-alpha02 頁面。(Ia5171b/231455742)
  • 新增了 TraceSectionMode("label", Mode.Sum),可讓您針對標有相同標籤的多個追蹤記錄部分評估總使用時間。舉例來說,TraceSectionMetric("inflate", Mode.Sum) 會就 Macrobenchmark 中花在加載上的總時間回報指標 inflateMs。此外,我們也移除了 API 29 相關規定,因為 TraceSectionMetricandroidx.tracing.Trace 並用時可以回到較低的 API 級別,也就是在目標應用程式中使用 forceEnableAppTracing。(Id7b68b/231455742)

修正錯誤

  • 驗證所有輸出內容/錯誤,藉此提升所有內部殼層指令的安全性。(I5984db/255402908b/253094958)
  • 在基準設定檔 adb pull 指令中指定裝置,這樣在連接多個裝置 (最多一個模擬器) 時,便可輕鬆複製提取指令 (I6ac6cb/223359380)
  • 如果 Macrobenchmark 測試 APK 未設為自行檢測,即會導致錯誤。這項錯誤會禁止系統從目標應用程式處理程序中執行巨集基準化作業。在處理過程中,Macrobench 將無法編譯/終止/冷啟動應用程式,也無法控制自身權限 (I4279b)
  • 修正 measureRepeated() 中的一個問題,此問題會導致 StartupMode.COLD 不會在 setupBlock 後終止目標處理程序。現在與應用程式互動的 setupBlock 不會讓應用程式處理程序持續執行,冷啟動測量也會失效。(I8ebb7)

1.2.0-alpha06 版本

2022 年 10 月 24 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha06查看 1.2.0-alpha06 版的修訂項目

API 變更

  • BaselineProfileRule 在 Android 13 (API 33) 上不再需要根層級,而且不再處於實驗階段 (Ie0a7db/250083467b/253094958)
    • 此變更還修正了在未取得 Root 權限的裝置上,設定檔從應用程式清除至磁碟的方式,但必須更新目標應用程式的 profileinstaller 依附元件。
    • 如要在未取得 Root 權限的裝置上使用 BaselineProfileRuleCompilationMode.Partial(warmupIterations),您還必須更新目標應用程式以便使用 androidx.profileinstaller.profileinstaller:1.3.0-alpha01。這能使設定檔正確地清除至磁碟,以便進行編譯/擷取。

修正錯誤

  • 修正 API 33 以上版本的 SampledProfiling 當機問題。(I40743b/236109374)

1.2.0-alpha05 版本

2022 年 10 月 5 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha05查看 1.2.0-alpha05 版的修訂項

修正錯誤

  • 修正 Studio 系統追蹤記錄檢視器中頁框細目的基準擷取追蹤記錄問題 (I3f3aeb/239677443)
  • 修正 FrameTimingMetric 以將 FrameOverrun 列為需要 API 31 而非 29 (I716ddb/220702554)
  • BaselineProfileRule 中設定疊代,如果未安裝目標套件,則明確擲回 (已在 MacrobenchmarkRule 中實現)。(Ic09a3, b/227991471)

1.2.0-alpha04 版本

2022 年 9 月 21 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha041.2.0-alpha04 版包含此連結所列的修訂項目。

新功能

  • dryRunMode.enable 檢測引數支援新增至 Macrobenchmark (已推出微型版本) 加快本機開發作業,以及驗證應用程式自動化功能 (例如在預先提交中)。這會將疊代次數覆寫為 1、略過編譯、封鎖所有設定錯誤,以及停用評估 .json 檔案輸出功能。(Ib51b4b/175149857)

    使用 Gradle 指令列:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
    

    在 build.gradle 中:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true'
        }
    }
    

修正錯誤

  • 已修正 StartupTimingMetric,不再需要透過 MacrobenchmarkScope.startActivityAndWait() 啟動測量的活動。這表示指標可擷取通知、Context.startActivity()、應用程式內活動型導覽或殼層指令等的啟動項目。(Ia2de6b/245414235)
  • 修正錯誤,其中 startActivityAndWait 嘗試透過降低影格偵測嚴格程度,以在模擬器上等待啟動時,會出現逾時。(Ibe2c6b/244594339b/228946895)

1.2.0-alpha03 版本

2022 年 9 月 7 日

發布 androidx.benchmark:benchmark-*:1.2.0-alpha03查看 1.2.0-alpha03 版的修訂項

新功能

  • 新增了用於獨立使用 BenchmarkState 的實驗性 API,與 BenchmarkRule / JUnit4 分開使用。(Id478fb/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.1 版本

1.1.1 版本

2022 年 11 月 9 日

發布 androidx.benchmark:benchmark-*:1.1.11.1.1 版包含此連結所列的修訂項目。

修正錯誤

  • 修正部分 Android11 (API 30) 以上版本裝置會發生的 android.system.ErrnoException: open failed: EACCES 問題。這是從 1.2.0-alpha01 中挑選出來的修正程序。(aosp/2072249)

1.1.0 版本

1.1.0 版本

2022 年 6 月 15 日

發布 androidx.benchmark:benchmark-*:1.1.0查看 1.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-rc02查看 1.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-rc01查看 1.1.0-rc01 版的修訂項

修正錯誤

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

1.1.0-beta06 版本

2022 年 4 月 6 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta06查看 1.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-beta05查看 1.1.0-beta05 版的修訂項

修正錯誤

1.1.0-beta04 版本

2022 年 2 月 23 日

發布 androidx.benchmark:benchmark-*:1.1.0-beta04查看 1.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-beta02查看 1.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-beta01查看 1.1.0-beta01 版的修訂項

修正錯誤

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

1.1.0-alpha13 版本

2021 年 12 月 15 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha13查看 1.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-alpha12查看 1.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-alpha10查看 1.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-alpha09查看 1.1.0-alpha09 版的修訂項

修正錯誤

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

1.1.0-alpha08 版本

2021 年 9 月 29 日

發布 androidx.benchmark:benchmark-*:1.1.0-alpha08查看 1.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-alpha07查看 1.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-alpha06查看 1.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-alpha05查看 1.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-alpha02查看 1.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-alpha01查看 1.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-rc01查看 1.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-beta01查看 1.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-alpha06查看 1.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。您可以前往這裡查看這個版本包含的修訂版本。