Benchmark

Mengukur performa kode Anda secara akurat dalam Android Studio.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
7 Oktober 2026 1.5.0 - - 1.6.0-alpha01

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Benchmark, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk informasi selengkapnya.

Macrobenchmark

Untuk menggunakan Macrobenchmark dalam project Anda, tambahkan dependensi berikut ke file build.gradle untuk modul macrobenchmark:

Groovy

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

Kotlin

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

Microbenchmark

Untuk menggunakan Microbenchmark dalam project Anda, tambahkan dependensi berikut ke file build.gradle untuk modul microbenchmark:

Groovy

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

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

Kotlin

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

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

Library Microbenchmark juga menyediakan plugin Gradle untuk digunakan dengan modul microbenchmark. Plugin ini menyetel default konfigurasi build untuk modul, menyiapkan salinan output benchmark ke host, dan memberikan tugas ./gradlew lockClocks.

Untuk menggunakan plugin ini, sertakan baris berikut dalam blok `plugins` di file build.gradle level teratas:

Groovy

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

Kotlin

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

Lalu, terapkan plugin ke file build.gradle modul benchmark Anda

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.6

Versi 1.6.0-alpha01

7 Oktober 2026

androidx.benchmark:benchmark-*:1.6.0-alpha01 dirilis. Versi 1.6.0-alpha01 berisi commit ini.

Fitur Baru

  • Tugas benchmark :lockClocks kini menggunakan mode performa tetap jika tersedia, bukan implementasi khusus root sebelumnya. Artinya, Anda dapat mengunci clock di lebih banyak perangkat fisik untuk hasil yang stabil, terutama untuk microbenchmark yang stabil. Laporkan masalah terkait pembatasan termal dengan perilaku baru jika Anda melihatnya. (I0d032)

Perubahan API

  • Menambahkan MemoryProfilingConfig ke ExperimentalConfig untuk memungkinkan operasi macrobenchmark memilih ikut serta dalam pembuatan profil heap Perfetto. (Ibc931)

Perbaikan Bug

  • Memperbaiki bug di microbenchmark yang menyebabkan pengambilan pelacakan metode terkadang dilewati secara berlebihan untuk menghindari ANR. (Ifc307)
  • Memperbaiki pengambilan Profil dasar pengukuran untuk proses yang tidak menggunakan pola penamaan :<suffix>. (I512ab)
  • Link trace profiler kini dilaporkan di bagian 'Profiling Traces' terpisah dalam ringkasan IDE. (Id639f)
  • Memperbaiki bug dalam pengosongan file virtual yang akan menghasilkan Unable to flush profiles for <packagename>. (I48ccc)
  • Memperbaiki sinkronisasi dalam pelacakan metode yang disematkan dalam pelacakan sistem. Ifd2e33 b/537688349
  • Plugin Gradle Profil Dasar Pengukuran - CollectBaselineProfileTask yang ditingkatkan untuk mendukung penemuan file test-result.pb di subdirektori, sehingga memungkinkan kompatibilitas dengan platform pengujian bawaan yang baru. Id9c488 b/543799367

Versi 1.5

Versi 1.5.0

9 September 2026

androidx.benchmark:benchmark-*:1.5.0 dirilis. Versi 1.5.0 berisi commit ini.

Versi 1.5.0-rc02

26 Agustus 2026

androidx.benchmark:benchmark-*:1.5.0-rc02 dirilis. Versi 1.5.0-rc02 berisi commit ini.

Versi 1.5.0-rc01

12 Agustus 2026

androidx.benchmark:benchmark-*:1.5.0-rc01 dirilis. Versi 1.5.0-rc01 berisi commit ini.

Versi 1.5.0-beta01

29 Juli 2026

androidx.benchmark:benchmark-*:1.5.0-beta01 dirilis. Versi 1.5.0-beta01 berisi commit ini.

Perubahan API

  • PerfettoCapture dan PerfettoTraceRule kini dapat merekam rekaman aktivitas dalam proses dan menggabungkannya untuk paket target. (I9a00b, b/497959820)

Versi 1.5.0-alpha07

1 Juli 2026

androidx.benchmark:benchmark-*:1.5.0-alpha07 dirilis. Versi 1.5.0-alpha07 berisi commit ini.

Perubahan API

  • Pengambilan rekaman aktivitas Perfetto yang disederhanakan di perangkat. (I48810)
  • Memindahkan API ekstensi TraceProcessor.runServer eksperimental dari androidx.benchmark:benchmark-macro ke androidx.benchmark:benchmark-common, dan ke paket androidx.benchmark. Tindakan ini akan memungkinkan penggunaannya dalam microbenchmark pada masa mendatang. (Ie25bb, b/393640753)

Perbaikan Bug

  • Mengupdate implementasi traceprocessor (serta pengambilan Perfetto Trace yang tidak dipaketkan) untuk menggunakan Perfetto v56.0 (I8fb9d)
  • Tetapkan androidx.benchmark.requireAot dan androidx.benchmark.requireAot ke benar (true) secara default. Setelan default yang lebih aman ini memastikan bahwa kompilasi dilakukan sebelum menjalankan microbenchmark (aktif secara default dengan plugin gradle benchmark saat menggunakan AGP 8.4+), dan bahwa measureRepeated tidak digunakan di thread utama, yang dapat menyebabkan ANR. (I1bc3c, b/379115078)
  • Meningkatkan waktu tunggu penghentian perfetto dari 5 menjadi 30 detik (hanya untuk sesi Perfetto yang diambil benchmark). Menambahkan logging error yang lebih jelas saat masalah terjadi. (If188f, b/435589290)

Versi 1.5.0-alpha06

6 Mei 2026

androidx.benchmark:benchmark-*:1.5.0-alpha06 dirilis. Versi 1.5.0-alpha06 berisi commit ini.

Perbaikan Bug

  • Menangani lingkungan multi-pengguna dengan baik saat memindahkan file dari direktori output benchmark ke direktori output pengujian tambahan. (I90da5, b/489358149)

Versi 1.5.0-alpha05

25 Maret 2025

androidx.benchmark:benchmark-*:1.5.0-alpha05 dirilis. Versi 1.5.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Mengupdate ArtMetric untuk memperhitungkan paket tingkat teratas, yang sangat penting saat menggunakan AGP/R8 9.1+, atau opsi global -repackageclasses. Sebelumnya, ArtMetric gagal mendeteksi pemuatan class ini dalam pengukuran artClassLoad.... (If8a35, b/487402058)

Fitur Baru - Menambahkan argumen instrumentasi baru androidx.benchmark.requireLockedClocks yang memungkinkan pengaktifan pemeriksaan apakah clock CPU dikunci untuk perangkat yang telah di-root. (Id82e8, b/468039042)

Versi 1.5.0-alpha04

11 Maret 2026

androidx.benchmark:benchmark-*:1.5.0-alpha04 dirilis. Versi 1.5.0-alpha04 berisi commit ini.

Perubahan API

  • Menambahkan JvmOverloads ke PowerMetric.Energy dan PowerMetric.Power (Iac0d0, b/481371562).

Perbaikan Bug

  • Mengupdate ArtMetric untuk memperhitungkan paket tingkat teratas, yang sangat penting saat menggunakan AGP/R8 9.1+, atau opsi global -repackageclasses. Sebelumnya, ArtMetric akan gagal mendeteksi pemuatan class ini dalam pengukuran artClassLoad...-nya. (I207ca, b/487402058)

Versi 1.5.0-alpha03

11 Februari 2026

androidx.benchmark:benchmark-*:1.5.0-alpha03 dirilis. Versi 1.5.0-alpha03 berisi commit ini.

  • Diupdate agar bergantung pada UiAutomator 2.4 beta.

Versi 1.5.0-alpha02

28 Januari 2026

androidx.benchmark:benchmark-*:1.5.0-alpha02 dirilis. Versi 1.5.0-alpha02 berisi commit ini.

Perbaikan Bug

  • Menambahkan dukungan parsial untuk pembuatan profil dasar pengukuran untuk modul multiplatform Kotlin. Biasanya, dependensi pada profil dapat ditentukan menggunakan konfigurasi Gradle baselineProfile di blok dependensi, tetapi saat ini tidak berfungsi untuk modul KMP.

    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // THIS DOES NOT WORK
          // baselineProfile(":yourProducerProject")
        }
      }
    }
    
  • Sebagai gantinya, Anda harus menentukan dependensi menggunakan ekstensi baselineProfile **. (Ie19c4)

    plugins {
        id("org.jetbrains.kotlin.multiplatform")
        id("com.android.kotlin.multiplatform.library")
        id("androidx.baselineprofile.consumer")
    }
    
    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // ...
        }
      }
    }
    // Define dependencies
    // This works !
    baselineProfile {
      variants {
        androidMain {
          from(project(":yourProducerProject"))
        }
      }
    }
    

Versi 1.5.0-alpha01

17 Desember 2025

androidx.benchmark:benchmark-*:1.5.0-alpha01 dirilis. Versi 1.5.0-alpha01 berisi commit ini.

  • Macrobenchmark 1.5 menggunakan UiAutomator 2.4 untuk menyederhanakan interaksi dengan aplikasi yang diukur. Objek MacrobenchmarkScope kini memperluas UiAutomatorTestScope, yang memungkinkan Anda menggunakan API UiAutomator modern seperti onElement { ... }.click().
  • Untuk mengetahui informasi selengkapnya tentang UiAutomator 2.4, lihat dokumen.

Fitur Baru

  • Plugin Gradle Profil Dasar Pengukuran tidak lagi memerlukan newDsl=false di AGP 9.0 (Iaaac7, b/443311090)
  • Perluas konfigurasi rekaman aktivitas untuk menyertakan ukuran inti (misalnya, kecil/besar) dalam tolok ukur yang merekam aktivitas sistem/perfetto. (I8e397, b/457469959)

Perubahan API

  • (Di UiAutomator) Mengubah tunggu startActivity menjadi tunggu jendela baru. (I35da6, b/440021797)
  • Menstabilkan BlackHole API di androidx.benchmark. (I2b67e, b/451749438)
  • Menambahkan @JvmOverloads untuk konstruktor praktis untuk PerfettoTraceRule. (I1510a, b/443763207)

Versi 1.4

Versi 1.4.1

10 September 2025

androidx.benchmark:benchmark-*:1.4.1 dirilis. Versi 1.4.1 berisi commit ini.

Perbaikan Bug

  • Memperbaiki perfettoSdkTracing=true (misalnya, saat melacak Compose dalam microbenchmark) akan menghentikan proses target jika sudah berjalan, dan StartupMode tidak ditentukan. (Ib2c1f)

Versi 1.4.0

30 Juli 2025

androidx.benchmark:benchmark-*:1.4.0 dirilis. Versi 1.4.0 berisi commit ini.

Perubahan penting sejak versi 1.3.0

Microbenchmark

  • Memindahkan tugas Gradle lockClocks dan unlockClocks ke project benchmark, bukan di level teratas untuk mematuhi isolasi project Gradle.
  • Memfaktorkan ulang BenchmarkRule agar dibangun di atas coroutine, dan mendukung perilaku yield() yang lebih baik. Hal ini akan mengurangi risiko ANR secara signifikan selama pengoperasian benchmark, terutama pengoperasian CI yang lama. Catatan: Benchmark UI harus dijalankan dengan measureRepeatedOnMainThread

Macrobenchmark

  • Menambahkan solusi pada API 34+ untuk CompilationMode.None() akan memiliki performa yang tidak konsisten karena verifikasi ART sekarang mengompilasi aplikasi sebagian setelah peluncuran pertama.
  • Fitur eksperimental - Insight Startup dapat menandai masalah umum tertentu dalam Macrobenchmark startup dengan meneruskan MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))).
  • Menambahkan ArtMetric yang dapat digunakan untuk mendeteksi Kompilasi JIT, dan pemuatan class yang tidak dioptimalkan - keduanya berguna untuk memvalidasi pengoptimalan Profil Dasar Pengukuran.

Profil Dasar Pengukuran

  • BaselineProfileRule kini mengumpulkan profil untuk aplikasi multiproses.

Perubahan Lainnya

  • TraceProcessor telah ditarik ke library-nya sendiri (androidx.benchmark:benchmark-traceprocessor) sehingga dapat digunakan di luar metrik Macrobenchmark, dalam kasus lain. Server ini juga dapat dijalankan di JVM Desktop dengan menentukan ServerLifecycleManager Anda sendiri.

Versi 1.4.0-rc01

18 Juni 2025

androidx.benchmark:benchmark-*:1.4.0-rc01 dirilis. Versi 1.4.0-rc01 berisi commit ini.

Perbaikan Bug

  • Menambahkan solusi untuk gambar runtime yang menyebabkan CompilationMode.None() tidak mengukur performa terburuk setelah iterasi pertama. Sayangnya, solusi ini memerlukan penundaan selama 5 detik untuk sengaja merusak image runtime di awal setiap suite macrobenchmark (I4a4f1).

Versi 1.4.0-beta02

4 Juni 2025

androidx.benchmark:benchmark-*:1.4.0-beta02 dirilis. Versi 1.4.0-beta02 berisi commit ini.

Perubahan API

  • Menambahkan BaselineProfileConfig.Builder untuk mempermudah pemanggilan BaselineProfileRule.collectWithResults() bagi developer Java. (I94905)

Versi 1.4.0-beta01

7 Mei 2025

androidx.benchmark:benchmark-*:1.4.0-beta01 dirilis. Versi 1.4.0-beta01 berisi commit ini.

Perubahan API

  • Menambahkan varian konstruktor PerfettoTraceRule yang menerima PerfettoConfig (Ie53ba)

Perbaikan Bug

  • Memperbarui format link insight startup TraceProcessor untuk menggunakan plugin yang benar, dan pembatas yang lebih jelas (: lebih pendek dari %3A, dan keduanya didukung) (Ie18ef)
  • Selalu gunakan paksa berhenti untuk menghentikan proses, bahkan saat di-root dan menghentikan aplikasi sistem. Memperbaiki pengecualian formulir: Expected no stdout/stderr from killall ... No such process. (Idca2c)

Kontribusi Eksternal

  • Menambahkan pengendali pengecualian proxy untuk TraceProcessorHttpServer (I480f5)

Versi 1.4.0-alpha11

9 April 2025

androidx.benchmark:benchmark-*:1.4.0-alpha11 dirilis. Versi 1.4.0-alpha11 berisi commit ini.

Perubahan API

  • Mengubah waktu tunggu argumen TraceProcessor: Durasi menjadi timeoutMs long untuk kegunaan pemanggil Java. (I9fbb5)
  • Tandai konstruktor TraceProcessor sebagai internal. Pemanggil harus menggunakan TraceProcessor.startServer atau TraceProcessor.runServer. (Ia8c5b)

Perbaikan Bug

  • Saat menghentikan aplikasi dengan MacrobenchmarkScope.killProcess, validasi hasil perintah penghentian untuk mencegah kegagalan senyap dan error waktu tunggu. (I84555)

Update Dependensi

  • Library ini sekarang menargetkan tingkat bahasa Kotlin 2.0 dan memerlukan KGP 2.0.0 atau yang lebih baru. (Idb6b5)

Versi 1.4.0-alpha10

26 Maret 2025

androidx.benchmark:benchmark-*:1.4.0-alpha10 dirilis. Versi 1.4.0-alpha10 berisi commit ini.

Perubahan API

  • Meningkatkan waktu tunggu default untuk pemuatan dan kueri server TraceProcessor menjadi 120 detik (dari sebelumnya 60/30), dan membuat keduanya dapat dikonfigurasi dengan satu parameter waktu tunggu. (Ifec87)

Perbaikan Bug

  • Memperbaiki beberapa masalah yang akan terjadi saat melakukan tolok ukur atau merekam profil aplikasi tanpa profileinstaller, dan BroadcastReciever disertakan. Hal ini hanya memengaruhi eksekusi di perangkat yang telah di-root. (Ied308)

Versi 1.4.0-alpha09

12 Maret 2025

androidx.benchmark:benchmark-*:1.4.0-alpha09 dirilis. Versi 1.4.0-alpha09 berisi commit ini.

Perubahan API

  • Menambahkan TraceProcessor dan Session API dengan Handle yang dapat ditutup, untuk penggunaan yang lebih mudah dengan siklus proses kustom. Hal ini juga merupakan langkah untuk mempermudah penggunaan Coroutine dan Java API. Fungsi ekstensi ke TraceProcessor.runServer {} kini ditandai sebagai eksperimental, karena kemungkinan akan dipindahkan, dan dibuat non-eksperimental di masa mendatang. (I358b4)

Perbaikan Bug

  • Memperbaiki pengambilan Profil Dasar Pengukuran dan Tolok Ukur yang tidak berfungsi dengan API 36 karena perubahan pada kotak mainan pgrep yang kini memerlukan -a untuk mencetak command line lengkap. (Idc991)
  • Memfilter konfigurasi pelacakan default untuk mengurangi risiko kehilangan data dalam pelacakan di level API yang lebih baru. (I54e8a)
  • Menambahkan argumen instrumentasi androidx.benchmark.killExistingPerfettoRecordings eksperimental, yang dapat ditetapkan ke false untuk memungkinkan pengambilan rekaman aktivitas perfetto yang sudah ada sebelumnya dilanjutkan. Secara default, rekaman aktivitas rekaman aktivitas perfetto yang sudah ada di perangkat akan dihentikan untuk mencegah gangguan. (I02a3c)
  • Kolom JSON context.osCodenameAbbreviated kini akan menjadi REL untuk versi OS yang dirilis pada dan di atas API 35, karena nama kode non-numerik tidak lagi didukung oleh platform yang mendasarinya. (Ib17fd)
  • Memperbaiki error di FrameTimingMetric saat terjadi frame yang disinkronkan ulang. (I7c6f4, b/394610806)
  • Tidak lagi mengasumsikan Choreographer#doFrame sebagai bagian atas frame stack di thread utama untuk FrameTimingQuery. (Iee0e0, b/340206285)

Versi 1.4.0-alpha08

12 Februari 2025

androidx.benchmark:benchmark-*:1.4.0-alpha08 dirilis. Versi 1.4.0-alpha08 berisi commit ini.

Perubahan API

  • Memindahkan API ekstensi TraceProcessor.runSession() menjadi eksperimental, karena kemungkinan akan dipindahkan menjadi konstruktor konkret di Android pada akhirnya. (Ib0528, b/393640753)
  • Sebagian besar implementasi Startup Insights kini bersifat publik/eksperimental, dan dipindahkan ke artefak TraceProcessor. Lihat StartupInsights. (I0aa00)
  • Menghentikan penggunaan BenchmarkRule.runWithTimingDisabled {} dan menggantinya dengan BenchmarkRule.runWithMeasurementDisabled {}, yang menjelaskan perilaku dengan lebih jelas - semua metrik dijeda. Selain itu, ekspos superclass MicrobenchmarkScope karena mendeklarasikan ulang fungsi runWithMeasurementDisabled untuk membuka akses tidak dapat dilakukan, karena bersifat inline. (I9e23b, b/389149423, b/149979716)
  • Library Benchmark telah dipindahkan ke Kotlin 2.0. (I9d1e0)
  • Menghapus argumen instrumentasi androidx.benchmark.startupProfiles.enable. Argumen ini tidak lagi berguna, karena dapat dikontrol oleh argumen includeInStartupProfile di BaselineProfileRule.collect(). (I39eb4)

Perbaikan Bug

  • Mengurangi jumlah panggilan fungsi internal Microbenchmark selama pembuatan profil untuk membuat, misalnya, pelacakan metode lebih jelas (Ifaed8)
  • Perbaikan spekulatif untuk error: 'Gagal menghentikan [ProcessPid(processName=perfetto, pid=...)]'. Sekarang, Benchmark akan mencatat pesan ke dalam log, bukan mengalami error, saat proses Perfetto latar belakang tidak dapat dihentikan sebelum menjalankan benchmark. (I37d3e, b/323601788)
  • Memperbaiki IllegalStateExceptions dengan label 'Expected pm dump-profiles stdout' yang disebabkan oleh pemeriksaan format output yang terlalu ketat. (I358dc)

Versi 1.4.0-alpha07

29 Januari 2025

androidx.benchmark:benchmark-*:1.4.0-alpha07 dirilis. Versi 1.4.0-alpha07 berisi commit ini.

Fitur Baru

  • BaselineProfileRule kini memperkenalkan collectWithResults(...) API yang mencakup daftar jalur ke profil yang dihitung. (I056f8)
  • Menambahkan argumen instrumentasi androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline, yang dapat disetel ke false untuk menonaktifkan perilaku menampilkan error pada batas waktu measureRepeatedOnMainThread untuk pengujian lokal. Tidak direkomendasikan, karena hal ini meningkatkan kemungkinan ANR selama pengujian. (Idbeec, b/353226476)

Perubahan API

  • Menambahkan @JvmOverloads ke konstruktor MicrobenchmarkConfig. (I13fd3)
  • Memfaktorkan ulang BenchmarkRule agar dibangun di atas coroutine, dan mendukung perilaku yield() yang lebih baik. Refaktorisasi ini menghapus beberapa API BenchmarkState eksperimental, tetapi akan diikuti dengan penggantian sesuai kebutuhan. Selain itu, menambahkan runWithMeasurementDisabled untuk memperjelas perilaku (semua pengukuran dijeda). Pada masa mendatang, runWithTimingDisabled tidak akan digunakan lagi. (I19837, b/389149423, b/311242861)
  • Memindahkan PerfettoTraceProcessor ke TraceProcessor dalam artefak androidx.benchmark:benchmark-traceprocessor baru, dan menjadikan sebagian besar API-nya non-eksperimental. TraceMetric kustom atau apa pun yang membaca dari trace harus diupdate ke impor TraceProcessor baru. TraceProcessor API baru berfungsi persis seperti yang lama, tetapi merupakan library antarmuka mandiri (agak mirip dengan lapisan androidx.sqlite dari Room) dengan implementasi khusus Android yang di-build ke dalam macrobenchmark. Artefak baru juga dapat digunakan di JVM, tetapi saat ini Anda harus memulai salinan biner TraceProcessor Anda sendiri dan menawarkan port untuk terhubung ke biner tersebut. (I3a767, I62563, b/381134564)

Perbaikan Bug

  • Menampilkan pesan error yang lebih jelas saat MacrobenchmarkScope.startActivityAndWait gagal meluncurkan proses target (kemungkinan karena error dalam proses target), bukan pesan 'Unable to confirm activity launch completion' yang lebih ambigu (I3539b)
  • Memperbaiki beberapa error sintaksis dalam contoh Kotlin, dan penyorotan sintaksis dalam beberapa contoh Java / build.gradle. (Ib3808)
  • Mengklarifikasi dokumen parameter ArtMetric dan CaptureInfo. (I96e60)

Versi 1.4.0-alpha06

11 Desember 2024

androidx.benchmark:benchmark-*:1.4.0-alpha06 dirilis. Versi 1.4.0-alpha06 berisi commit ini.

Perubahan API

  • Menghapus penggunaan @Language("sql") di PerfettoTraceProcessor.Session.query(), karena penandaan/penguraian Studio rusak. (Idc2fa, b/377733398)

Perbaikan Bug

  • Library ini kini menggunakan anotasi nullness JSpecify, yang merupakan penggunaan jenis. Developer Kotlin harus menggunakan argumen compiler berikut untuk menerapkan penggunaan yang benar: -Xjspecify-annotations=strict (ini adalah default yang dimulai dengan compiler Kotlin versi 2.1.0). (I46810, b/326456246)
  • Memperbaiki ArtMetric untuk melaporkan pemuatan class (bukan init), dan meningkatkan kualitas dokumen untuk memperjelas perilaku runtime. (I9915c)
  • Di Multiuser Android, jalankan perintah sebagai root hanya di perangkat yang telah di-root. (I88b44)

Versi 1.4.0-alpha05

13 November 2024

androidx.benchmark:benchmark-*:1.4.0-alpha05 dirilis. Versi 1.4.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Memperbaiki masalah pada API 34+ saat CompilationMode.None() memiliki performa yang tidak konsisten dan tidak mewakili performa awal yang terburuk. Hal ini mengatasi perubahan platform yang memungkinkan status kompilasi ART verify mengompilasi aplikasi sebagian (hanya memengaruhi pemuatan class) segera setelah peluncuran pertama. (Ie48d0)
  • Memperbaiki masalah saat rekaman aktivitas (terutama yang singkat) dapat direkam, tetapi tidak akan melaporkan pengukuran dari Metrik Macrobenchmark bawaan, karena nama proses terpotong dalam rekaman aktivitas Perfetto. Sekarang, macrobenchmark mengatasi masalah ini dengan mencari nama paket yang terpotong di semua kueri bawaan, selain nama paket yang diharapkan. Perhatikan bahwa implementasi TraceMetric kustom atau pemanggil langsung PerfettoSession.query lainnya dapat menerapkan perilaku yang sama ini dengan mengubah process.name LIKE "$packageName" dalam kueri Perfetto menjadi (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). (I5bf01, b/377565760)

Versi 1.4.0-alpha04

30 Oktober 2024

androidx.benchmark:benchmark-*:1.4.0-alpha04 dirilis. Versi 1.4.0-alpha04 berisi commit ini.

Fitur Baru

  • (Eksperimental) Aktifkan pembuatan Profil Dasar Pengukuran, dan tolok ukur pada aplikasi yang diinstal ke pengguna sekunder, misalnya aplikasi apa pun di perangkat Android Auto tanpa layar. Dukungan ini telah diuji dalam beberapa skenario, tetapi beri tahu kami jika ada bug yang tidak berfungsi untuk Anda. (I9fcbe, b/356684617, b/373641155)

Perbaikan Bug

  • isProfileable kini selalu diganti dalam build benchmark, dan isDebuggable juga kini selalu diganti dalam build benchmark dan nonMinified (pengambilan profil dasar pengukuran). (I487fa, b/369213505)
  • Memperbaiki deteksi kompilasi di beberapa perangkat fisik sebelum API 28 - memengaruhi context.compilationMode json, serta perilaku androidx.benchmark.requireAot=true (yang tidak lagi salah memunculkan pengecualian) (Ic3e08, b/374362482)
  • Dalam metrik CpuEventCounter, tampilkan jika pengukuran yang tidak valid diamati (misalnya, instructions/cpucycles==0) (I8c503)

Versi 1.4.0-alpha03

16 Oktober 2024

androidx.benchmark:benchmark-*:1.4.0-alpha03 dirilis. Versi 1.4.0-alpha03 berisi commit ini.

Perubahan API

  • Macrobenchmark: Menambahkan ArtMetric, yang dapat digunakan untuk memeriksa cakupan profil atau performa Android RunTime secara umum. Merekam jumlah dan total durasi JIT, inisialisasi class (jika tersedia), dan verifikasi class. Selain itu, mengubah CaptureInfo untuk menyertakan versi mainline ART opsional dengan default. (I930f7)
  • Menambahkan coefficientOfVariation ke output JSON Benchmark untuk menunjukkan stabilitas dalam operasi benchmark tertentu. (Ib14ea)

Perbaikan Bug

  • Memperbaiki CollectBaselineProfileTask saat perangkat AVD memiliki spasi di dalamnya. (Ia0225, b/371642809)
  • Perbaikan spekulatif untuk error dari pengecualian StartupMode.COLD: Package <packagename> must not be running prior to cold start!. Sekarang, MacrobenchmarkScope.killProcess() (termasuk yang dijalankan sebelum setiap iterasi, yang digunakan untuk menerapkan perilaku StartupMode.COLD) akan menunggu untuk memverifikasi bahwa semua proses aplikasi telah berhenti berjalan. (I60aa6, b/351582215)
  • Memperbaiki masalah saat error UNLOCKED_ muncul di beberapa emulator yang di-root. (Ic5117)
  • Library ini kini menggunakan anotasi nullness JSpecify, yang merupakan penggunaan jenis. Developer Kotlin harus menggunakan argumen compiler berikut untuk menerapkan penggunaan yang benar: -Xjspecify-annotations=strict (ini adalah default yang dimulai dengan compiler Kotlin versi 2.1.0). (I7104f, b/326456246)

Versi 1.4.0-alpha02

2 Oktober 2024

androidx.benchmark:benchmark-*:1.4.0-alpha02 dirilis. Versi 1.4.0-alpha02 berisi commit ini.

Perubahan API

  • Memindahkan tugas Gradle lockClocks dan unlockClocks ke project benchmark, bukan tersedia di level teratas. Perubahan ini diperlukan karena sayangnya tidak ada cara untuk mendaftarkan tindakan ini sebagai tindakan tingkat teratas tanpa merusak isolasi project. (I02b8f, b/363325823)

Perbaikan Bug

  • BaselineProfileRule kini mengumpulkan profil untuk aplikasi multiproses dengan memberi sinyal ke setiap proses yang berjalan di akhir blok untuk membuang profil. Jika kompilasi berbasis profil tidak pernah berhasil menemukan proses untuk disiarkan, kompilasi akan gagal, karena tidak diharapkan adanya data profil di dalamnya. Selain itu, menambahkan argumen instrumentasi untuk mengontrol durasi tunggu dump: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469)
  • Dari Benchmark 1.3.2: Memperbaiki Firebase Test Lab (FTL) yang tidak dapat menarik file hasil Profil Dasar Pengukuran atau Macrobenchmark dari Plugin Gradle Profil Dasar Pengukuran. (I2f678, b/285187547)

Untuk menggunakan FTL, terapkan plugin ke modul profil dasar pengukuran di blok plugin, dengan:

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

lalu konfigurasi Firebase Test Lab dengan:

  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}")
          }
      }
  }

Selain itu, perangkat FTL yang dibuat harus ditambahkan ke ekstensi profil dasar pengukuran:

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

Versi 1.4.0-alpha01

18 September 2024

androidx.benchmark:benchmark-*:1.4.0-alpha01 dirilis. Versi 1.4.0-alpha01 berisi commit ini.

Fitur Baru - Insight Startup Aplikasi

  • Versi awal insight peluncuran aplikasi dapat diaktifkan di Macrobenchmark. (09fae38)

Untuk mengaktifkan di benchmark startup:

  @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(...)
      }
  }

Kemudian, menjalankan benchmark startup akan menganalisis rekaman aktivitas untuk mencari masalah umum, dan mencetaknya setelah metrik ke output pengujian Studio di tab benchmark, misalnya:

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

Fitur ini masih dalam proses pengembangan, dengan peningkatan pada dokumentasi dan ekstensibilitas yang akan dilakukan, tetapi masukan sangat diharapkan.

Fitur Baru

  • Menambahkan properti gradle androidx.baselineprofile.suppressWarnings untuk menyembunyikan semua peringatan profil dasar pengukuran. (314153a)
  • Metrik microbench kini ditampilkan dalam rekaman aktivitas Perfetto sebagai penghitung. (3214854)
  • Menambahkan skrip eksperimental untuk menonaktifkan jit (memerlukan root / mulai ulang runtime), dan mereset status perf/pengujian perangkat. Saat ini tidak dipublikasikan sebagai tugas gradle. (7c3732b)
  • Menambahkan argumen benchmark untuk melewati pengujian saat dijalankan di emulator. Jika build automaticGenerationDuring diaktifkan, benchmark juga akan memicu pembuatan profil dasar pengukuran. Tindakan ini akan gagal jika emulator digunakan. Dengan argumen baru skipBenchmarksOnEmulator, kita dapat melewati pengujian. (0c2ddcd)
  • Mengubah logika pengaktifan peristiwa performa agar berjalan di API 23+ (2550048)

Perubahan API

  • Argumen PerfettoConfig eksperimental yang ada ke MacrobenchmarkRule.measureRepeated() dipindahkan ke objek ExperimentalConfig baru.

Perbaikan Bug

  • Meningkatkan jumlah percobaan ulang lockClocks.sh (99e9dac)
  • Jangan membuat jenis build nonMinified dan benchmark jika sudah ada. Karena adanya bug, meskipun jenis build nonMinified dan benchmark sudah ada, jenis build tersebut akan dibuat ulang. (e75f0a5)
  • Abaikan slice yang tidak dihentikan dari hasil TraceSectionMetric. (a927d20)
  • Pemeriksaan emulator yang ditingkatkan untuk mempertimbangkan awalan sdk_. (1587de8)
  • Memperlakukan paket yang tidak berjalan sebagai dihapus di FrameTimingGfxInfoMetric. (35cc79c)
  • Memperbaiki androidx.benchmark.cpuEventCounter yang menghasilkan nilai rusak untuk peristiwa non-Instruction. (06edd59)
  • Memperbaiki resumeTiming/runWithTimingDisabled untuk mematuhi urutan prioritas metrik, dan secara signifikan mengurangi dampak jeda/lanjutkan metrik berprioritas lebih rendah pada hasil metrik berprioritas lebih tinggi. Misalnya, jika menggunakan penghitung performa CPU melalui argumen instrumentasi cpuEventCounter.enable, timeNs tidak lagi berkurang secara signifikan saat jeda/lanjutkan terjadi. (5de0968)

Versi 1.3

Versi 1.3.4

26 Maret 2025

androidx.benchmark:benchmark-*:1.3.4 dirilis. Versi 1.3.4 berisi commit ini.

Perbaikan Bug

  • Memperbaiki ketidakkompatibelan Isolasi Project Gradle di Plugin Gradle Dasar Pengukuran Tolok Ukur. (b/404523257)

Versi 1.3.3

16 Oktober 2024

androidx.benchmark:benchmark-*:1.3.3 dirilis. Versi 1.3.3 berisi commit ini.

Perbaikan Bug

  • Memperbaiki CollectBaselineProfileTask saat perangkat AVD memiliki spasi (Ia0225, b/371642809)

Versi 1.3.2

2 Oktober 2024

androidx.benchmark:benchmark-*:1.3.2 dirilis. Versi 1.3.2 berisi commit ini.

Perbaikan Bug

  • Memperbaiki Firebase Test Lab (FTL) yang tidak dapat mengambil file hasil Profil Dasar Pengukuran atau Macrobenchmark dari Plugin Gradle Profil Dasar Pengukuran. (I2f678, b/285187547)

Untuk menggunakan FTL, terapkan plugin ke modul profil dasar pengukuran di blok plugin, dengan:

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

lalu konfigurasi Firebase Test Lab dengan:

  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}")
          }
      }
  }

Selain itu, perangkat FTL yang dibuat perlu ditambahkan ke ekstensi profil dasar pengukuran:

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

Versi 1.3.1

18 September 2024

androidx.benchmark:benchmark-*:1.3.1 dirilis. Versi 1.3.1 berisi commit ini.

Perbaikan Bug

  • Menambahkan properti gradle androidx.baselineprofile.suppressWarnings untuk menekan semua peringatan profil dasar pengukuran (I7c36e, b/349646646)
  • Memperbaiki Plugin Gradle Profil Dasar Pengukuran untuk menggunakan nonMinified… dan benchmark… yang sudah ada jika dibuat oleh aplikasi, bukan membuat wrapper. (Ia8934, b/361370179)
  • Memperbaiki java.lang.AssertionError: ERRORS (not suppressed): EMULATOR saat automaticGenerationDuringBuild diaktifkan di emulator. Argumen baru digunakan untuk melewati pengujian. (If3f51, b/355515798)
  • Minifikasi microbenchmark - mempertahankan subclass org.junit.runner.notification.RunListener di proguard library benchmark (Ic8ed5, b/354264743)
  • Perbaiki TraceSectionMetric untuk Mengabaikan slice yang tidak dihentikan. Sebelumnya, durasi ini dianggap memiliki durasi -1, misalnya selama penjumlahan atau menemukan durasi minimum. (If74b7)
  • Memperbaiki masalah di FrameTimingGfxInfoMetric saat memulai metrik akan mengalami error jika proses belum berjalan. (I6e412)

Versi 1.3.0

21 Agustus 2024

androidx.benchmark:benchmark-*:1.3.0 dirilis. Versi 1.3.0 berisi commit ini.

Perubahan Microbenchmark sejak versi 1.2.0

  • Pelacakan metode diaktifkan secara default dalam microbenchmark saat dijalankan di sebagian besar perangkat
    • Pelacakan metode berjalan sebagai fase terpisah, setelah pengukuran - hal ini memungkinkan pengukuran dan pelacakan metode yang akurat untuk dihasilkan dari satu operasi benchmark
    • Pelacakan metode pada beberapa versi Android OS dan ART akan memengaruhi fase pengukuran berikutnya - pada versi ini, pelacakan metode dinonaktifkan secara default dan peringatan akan dicetak ke output Studio
  • Benchmark thread utama dan ANR
    • Menambahkan measureRepeatedOnMainThread untuk benchmark UI thread (misalnya, yang berinteraksi dengan UI Compose/View) untuk menghindari ANR saat berjalan selama beberapa detik.
    • Pelacakan metode akan dilewati jika diperkirakan akan melampaui batas waktu penghindaran ANR. Setel androidx.benchmark.profiling.skipWhenDurationRisksAnr ke false untuk menonaktifkan perilaku ini (tidak direkomendasikan untuk menjalankan CI, karena ANR dapat menyebabkan masalah dalam menjalankan CI yang lama).
  • Minifikasi
    • Aturan proguard tersemat untuk meningkatkan microbenchmarking dengan minifikasi diaktifkan
    • Minifikasi/R8 dalam modul library memerlukan AGP 8.3, dan dapat diaktifkan melalui android.buildTypes.release.androidTest.enableMinification di build.gradle Anda
    • BlackHole.consume() API eksperimental ditambahkan untuk mencegah penghapusan kode mati (If6812, b/286091643)
  • Metrik
    • Fitur penghitung peristiwa CPU eksperimental (metrik dari perf_event_open, yang memerlukan akses root di sebagian besar versi platform), akses melalui InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (dapat disetel ke true), dan androidx.benchmark.cpuEventCounter.events dapat disetel misalnya ke (Instructions,CpuCycles). Fitur ini harus didukung di beberapa emulator userdebug, tetapi dukungan belum diuji di semua emulator yang tersedia

Perubahan MACRObenchmark sejak versi 1.2.0

  • Perombakan pelacakan metode untuk macrobenchmark.
    • Sekarang pelacakan metode dicakupkan ke durasi measureBlock, dan dapat merekam beberapa sesi jika proses dimulai beberapa kali.
    • Sebelumnya, pelacakan metode hanya akan berfungsi untuk benchmark StartupMode.COLD, dan tidak menangkap apa pun untuk measureBlocks yang tidak memulai ulang proses target
    • Memperbaiki flush pelacakan metode di macrobenchmark, sehingga pelacakan metode harus diambil sepenuhnya dan valid, bahkan di perangkat yang lebih lambat. (I6349a, b/329904950)
  • Melakukan dump profil ART dengan benar selama iterasi warmUp individual saat proses dihentikan sehingga pengukuran CompilationMode.Partial(warmup=N) lebih akurat. (I17923)
  • Pesan kegagalan siaran Drop Shader
    • Menambahkan saran proses debug ke pesan kegagalan siaran drop shader
    • Menambahkan dua argumen instrumentasi untuk mengganti perilaku penghapusan shader guna mengatasi error saat melakukan benchmark aplikasi tanpa ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : dapat digunakan untuk melewati semua penghapusan shader (termasuk yang dilakukan dalam peluncuran StartupMode.Cold), terutama saat melakukan tolok ukur aplikasi yang belum menggunakan profileinstaller 1.3
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : dapat digunakan untuk menoleransi kegagalan saat mencoba menghapus shader, misalnya saat melakukan tolok ukur aplikasi tanpa profileinstaller 1.3 (I4f573)
  • Menambahkan varian MacrobenchmarkRule#measureRepeated eksperimental yang menggunakan PerfettoConfig kustom untuk perekaman aktivitas Perfetto yang sepenuhnya disesuaikan. Perhatikan bahwa konfigurasi yang salah dapat menyebabkan class Metrik bawaan gagal. (Idfd3d, b/309841164, b/304038384)
  • Batalkan tugas dexopt latar belakang sebelum menjalankan Macrobenchmark untuk mengurangi gangguan. (I989ed)
  • Macrobenchmark kini menunggu selama 1 detik hingga aplikasi target menghapus total profil ART (sebelumnya menunggu selama 500 md). (I85a50, b/316082056)
  • Perombakan TraceSectionMetric
    • Catatan: Perubahan TraceSectionMetric di bawah dapat memengaruhi output dalam penggunaan CI, dan dapat menyebabkan diskontinuitas, atau merusak penguraian
    • Jumlah kini menjadi default, karena sebagian besar penggunaan metrik ini adalah untuk peristiwa berulang, dan yang pertama akan menghapus data dalam kasus ini
    • Diubah agar lebih dapat disesuaikan, dengan lebih banyak mode yang tersedia
    • Nama mode kini disematkan dalam nama output metrik (di Studio dan JSON)
    • Kini mendukung slice yang dibuat menggunakan Trace.{begin|end}AsyncSection.
  • Metrik
    • Power - Menambahkan PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge(), dan PowerMetric.deviceSupportsPowerEnergy()
    • Mengganti nama Metric.getResult menjadi getMeasurements agar sesuai dengan jenis nilai yang ditampilkan
    • Menambahkan label log.w / pengecualian ke semua kegagalan deteksi startup. Tindakan ini tidak mengubah perilaku saat ini (sehingga beberapa error ditampilkan, dan error lainnya gagal mendeteksi startup secara otomatis), hanya membuatnya lebih mudah dipahami. Umumnya, yang Log.w() dan gagal melaporkan metrik startup adalah yang tidak memiliki peristiwa non-frame, pengecualian ditampilkan saat startup terdeteksi, kecuali untuk informasi pengaturan waktu render frame (dari slice UI/RT). (Id240f, b/329145809)
    • Menambahkan pengukuran frameCount ke FrameTimingMetric untuk membantu menemukan skenario saat pengukuran berubah karena jumlah frame yang dihasilkan berubah (animasi baru ditambahkan, masalah pembatalan validasi diperbaiki). (I1e5aa)
    • Menjelaskan bahwa frameOverrunMs adalah metrik yang lebih disarankan untuk pelacakan jika tersedia dalam dokumen, dan alasannya. (I18749, b/329478323)
    • Memperbaiki masalah saat frame yang tidak dihentikan di awal dan akhir rekaman aktivitas dapat dipasangkan, yang akan salah dilaporkan sebagai satu frame yang sangat panjang. (I39353, b/322232828)
    • Meningkatkan error FrameTimingMetric saat frame tidak dihasilkan, dan selalu menampilkan link ke rekaman aktivitas saat penguraian metrik gagal untuk membantu mendiagnosis masalah. (I956b9)
    • Memperbaiki error saat FrameTimingMetric gagal mengurai ID frame, terutama di perangkat OEM tertentu. (Ia24bc, b/303823815, b/306235276)
    • Melonggarkan ketatnya pemeriksaan di FrameMetrics, dan menambahkan lebih banyak detail ke pesan error. (Iadede)

Perubahan pengambilan Profil Dasar Pengukuran / plugin Gradle sejak versi 1.2.0

  • Meningkatkan versi AGP maksimum yang direkomendasikan menjadi 9.0.0-alpha01.
  • Pastikan tugas mergeArtProfile dan mergeStartupProfile selalu menunggu pembuatan profil dasar pengukuran. (I623d6, b/343086054)
  • Membuat profil dasar pengukuran dengan berhasil akan menghasilkan ringkasan perubahan (I824c8, b/269484510)
  • Menambahkan DSL untuk menonaktifkan peringatan (Ic4deb, b/331237001)
  • Perbaikan untuk memastikan benchmark menggunakan profil dasar pengukuran yang dihasilkan saat automaticGenerationDuringBuild nonaktif (Ic144f, b/333024280)
  • Memperbaiki penggantian properti plugin gradle BaselineProfile untuk mengaktifkan pembuatan profil dasar pengukuran dan benchmark saat menyesuaikan jenis build nonMinified atau benchmark. (Ib8f05, b/324837887)
  • Perbaikan untuk menyertakan profil dasar pengukuran library dalam AAR sebelum AGP 8.3.0-alpha15. (I1d2af, b/313992099)
  • Memperbaiki URL output profil startup dan dasar pengukuran di akhir tugas pembuatan. (I802e5, b/313976958)

Perubahan signifikan lainnya sejak versi 1.2.0

  • Pengambilan rekaman aktivitas
    • Mengurangi error EXITCODE 2 saat memulai perfetto dari error ke peringatan yang dicatat
    • Mengaktifkan pelacakan AIDL secara default dalam tolok ukur(memerlukan API 28) (Ia0af2, b/341852305)
    • Mengaktifkan pelacakan tag porter secara default dalam tolok ukur. Hal ini mencakup, misalnya, titik rekaman aktivitas penguncian layar saat aktif. (Icfe44, b/286551983)
    • Meningkatkan waktu tunggu mulai pengambilan rekaman aktivitas untuk menghindari error saat memulai pelacakan di perangkat yang lebih lambat (I98841, b/329145808)
    • Menambahkan API publik PerfettoTraceProcessor.Session.queryMetrics dengan varian JSON, textproto, dan biner proto (tidak didekode). Hal ini memungkinkan Anda mengkueri metrik yang disertakan dalam TraceProcessor (I54d7f, b/304038382)
    • Aktifkan pemblokiran mulai pada rekaman pelacakan Perfetto untuk mengurangi risiko hilangnya data di awal rekaman pelacakan. Hanya didukung di API 33+. (Ie6e41, b/310760059)
  • Output JSON
    • Menambahkan informasi tambahan dalam konteks benchmark di output JSON:
      • context.artMainlineVersion - versi bilangan bulat modul utama Art (jika ada di perangkat, -1 jika tidak)
      • context.build.id - Sama dengan android.os.Build.ID
      • context.build.version.codename - Sama dengan android.os.Build.VERSION.CODENAME
      • context.build.version.abbreviatedCodename - sesuai dengan huruf pertama namakode pra-rilis (termasuk pada build rilis) (Ie5020)
    • Menambahkan daftar profilerOutput ke output JSON untuk mempermudah penggunaan alat terkait rekaman aktivitas pembuatan profil (misalnya, Perfetto, pelacakan metode) (I05ddd, b/332604449)
    • Menambahkan peringatan saat Android Test Orchestrator digunakan dalam modul benchmark, karena hal ini akan menyebabkan file JSON output per modul ditimpa berulang kali. (Ia1af6, b/286899049)
    • Mengecualikan saat nama file lebih panjang dari 200 karakter untuk menghindari error yang tidak jelas saat menulis atau memproses file setelahnya. (I4a5ab)

Versi 1.3.0-rc01

7 Agustus 2024

androidx.benchmark:benchmark-*:1.3.0-rc01 dirilis. Versi 1.3.0-rc01 berisi commit ini.

Perbaikan Bug

  • Memperbaiki androidx.benchmark.cpuEventCounter yang menghasilkan nilai rusak untuk peristiwa non-Instruction (I7386a, b/286306579)
  • Memperbaiki resumeTiming/runWithTimingDisabled untuk mematuhi urutan prioritas metrik, dan mengurangi dampak jeda/lanjutkan metrik berprioritas rendah secara signifikan pada hasil metrik berprioritas tinggi. Misalnya, jika menggunakan penghitung performa CPU melalui argumen instrumentasi cpuEventCounter.enable, timeNs tidak lagi berkurang secara signifikan saat jeda/lanjutkan terjadi. (I39c2e, b/286306579, b/307445225)
  • Mengurangi kemungkinan pengambilan sampel stack yang menyebabkan measureRepeatedOnMainThread mencapai waktu tunggu habis thread utama dengan memindahkan konversi pengambilan sampel stack dari thread utama. (I487a8, b/342237318)
  • Menghapus penjelasan manual tentang akses ke API platform baru karena hal ini terjadi secara otomatis melalui pemodelan API saat menggunakan R8 dengan AGP 7.3 atau yang lebih baru (misalnya, R8 versi 3.3) dan untuk semua build saat menggunakan AGP 8.1 atau yang lebih baru (misalnya, D8 versi 8.1). Klien yang tidak menggunakan AGP disarankan untuk mengupdate ke D8 versi 8.1 atau yang lebih baru. Baca artikel ini untuk informasi selengkapnya. (I9496c, b/345472586)
  • Menambahkan pemeriksaan versi AGP untuk mengirim nama paket sebagai argumen instr. Sebelum AGP 8.4.0, nama paket aplikasi target tidak dapat dikirim ke aplikasi instrumentasi melalui argumen instrumentasi. (0c72a3f)

Versi 1.3.0-beta02

10 Juli 2024

androidx.benchmark:benchmark-*:1.3.0-beta02 dirilis. Versi 1.3.0-beta02 berisi commit ini.

Perbaikan Bug

  • Tangani EXITCODE 2 dengan baik saat memulai Perfetto untuk mencatat peringatan, tetapi lanjutkan.

Versi 1.3.0-beta01

12 Juni 2024

androidx.benchmark:benchmark-*:1.3.0-beta01 dirilis. Versi 1.3.0-beta01 berisi commit ini.

Perubahan API

  • MethodTracing.affectsMeasurementOnThisDevice diganti namanya menjadi AFFECTS_MEASUREMENT_ON_THIS_DEVICE demi konsistensi. (I1bdfa)
  • Menambahkan API BlackHole.consume() eksperimental untuk mencegah penghapusan kode mati di microbenchmark. (If6812, b/286091643)
  • Microbenchmark kini akan menampilkan error dengan benar untuk mencegah pelacakan metode mengganggu pengukuran. Hal ini terjadi di perangkat tertentu saat pelacakan metode diaktifkan secara paksa (melalui argumen instrumentasi atau MicrobenchmarkConfig), dan jika pengukuran dicoba setelah pelacakan metode. Perangkat yang terpengaruh menjalankan API 26-30 atau versi modul utama ART tertentu yang terpengaruh oleh gangguan ini, dan dapat dideteksi saat runtime melalui ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)

Perbaikan Bug

  • Versi AGP maksimum yang direkomendasikan diubah menjadi 9.0.0-alpha01. (I5bbb0)
  • Menambahkan mode kompilasi ke konteks benchmark (If5612, b/325512900)
  • Mengaktifkan pelacakan AIDL secara default (memerlukan API 28) (Ia0af2, b/341852305)
  • Menambahkan informasi tambahan dalam konteks benchmark di output JSON:
    • context.artMainlineVersion - versi bilangan bulat dari modul utama Art (jika ada di perangkat, -1 jika tidak ada)
    • context.build.id - Sama dengan android.os.Build.ID
    • context.build.version.codename - Sama dengan android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename - sesuai dengan huruf pertama namakode pra-rilis (bahkan pada build rilis) (Ie5020)
  • Memperbaiki StackSampling agar mematuhi androidx.benchmark.profiling.sampleDurationSeconds (Ib1d53)
  • Mengubah dependensi macro->common menjadi api(), sehingga lebih mudah digunakan, misalnya PerfettoTrace dan PerfettoConfig. (Icdae3, b/341851833)
  • Pastikan tugas mergeArtProfile dan mergeStartupProfile selalu menunggu pembuatan profil dasar pengukuran. (I623d6, b/343086054)
  • Pertimbangkan status pengaktifan varian saat memutuskan apakah varian harus diaktifkan. (I5d19e, b/343249144)
  • Peningkatan waktu tunggu mulai default untuk pemroses rekaman aktivitas perfetto. (I87e8c, b/329145808)

Versi 1.3.0-alpha05

14 Mei 2024

androidx.benchmark:benchmark-*:1.3.0-alpha05 dirilis. Versi 1.3.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Menampilkan pengecualian yang lebih jelas saat metrik macrobench menampilkan nilai nol untuk semua iterasi (Iab58f, b/314931695)
  • Aturan solusi tambahan ditambahkan ke aturan proguard microbench, termasuk dukungan untuk aturan pemroses dan peringatan / error lain yang diamati. (I14d8f, b/329126308, b/339085669)
  • Pelacakan metode berjalan sebagai fase terpisah selama Macrobenchmark, dan tidak lagi memengaruhi pengukuran. (If9a50, b/285912360, b/336588271)
  • Menambahkan saran proses debug tambahan untuk menghilangkan pesan kegagalan siaran shader. (I5efa6, b/325502725)

Versi 1.3.0-alpha04

1 Mei 2024

androidx.benchmark:benchmark-*:1.3.0-alpha04 dirilis. Versi 1.3.0-alpha04 berisi commit ini.

Perubahan API

  • Menambahkan varian MacrobenchmarkRule#measureRepeated eksperimental yang menggunakan PerfettoConfig kustom untuk perekaman rekaman aktivitas Perfetto yang sepenuhnya disesuaikan. Perhatikan bahwa konfigurasi yang salah dikonfigurasi dapat menyebabkan kegagalan class Metrik bawaan. (Idfd3d, b/309841164, b/304038384)
  • Mengganti nama PowerMetric.deviceSupportsPowerEnergy menjadi PowerMetric.deviceSupportsHighPrecisionTracking agar lebih jelas (I5b82f)
  • Menambahkan PowerMetric.deviceBatteryHasMinimumCharge() dan PowerMetric.deviceSupportsPowerEnergy() untuk memungkinkan perubahan atau pengabaian benchmark berdasarkan kemampuan pengukuran daya perangkat. (I6a591, b/322121218)

Perbaikan Bug

  • Menambahkan perbandingan dengan profil dasar pengukuran sebelumnya (I824c8, b/269484510)
  • Menambahkan DSL untuk menonaktifkan peringatan (Ic4deb, b/331237001)
  • Mengubah pengecualian menjadi log info saat varian benchmark dinonaktifkan (I8a517, b/332772491)
  • Mempermudah pengambilan pelacakan metode untuk Macrobenchmark yang dicakup ke durasi measureBlock() yang sebenarnya. Sebelumnya, pelacakan dimulai saat peluncuran proses target dan hanya mendukung cold start (Iee85a, b/300651094)
  • Menghindari error saat pemroses rekaman aktivitas perfetto lambat dimulai (I98841, b/329145808)

Versi 1.3.0-alpha03

17 April 2024

androidx.benchmark:benchmark-*:1.3.0-alpha03 dirilis. Versi 1.3.0-alpha03 berisi commit ini.

Fitur Baru

  • Menambahkan API PerfettoTraceProcessor.Session.queryMetrics API publik dengan varian biner (tidak didekode) JSON, textproto, dan proto. Dengan demikian, Anda dapat mengkueri metrik yang disertakan dalam TraceProcessor (I54d7f, b/304038382)
  • Menambahkan profilerOutput ke output JSON untuk memudahkan alat seputar pelacakan pembuatan profil (misalnya, perfetto, pelacakan metode). (I05ddd, b/332604449)
  • Menambahkan tag daya ke benchmark Perfetto Config. Hal ini mencakup, misalnya, titik pelacakan wakelock. (Icfe44, b/286551983)
  • Menambahkan argumen inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, dapat disetel ke salah (false) untuk menghindari melewati pelacakan metode saat durasi yang diharapkan dapat menyebabkan ANR - sangat direkomendasikan untuk dihindari dalam operasi CI.
  • Menambahkan argumen inst eksperimental androidx.benchmark.profiling.perfCompare.enable, tetapkan argumen ini ke true untuk menjalankan pengaturan waktu perbandingan antara fase pengukuran dan pembuatan profil. Berguna, misalnya, dalam mengevaluasi overhead pelacakan metode. (I61fb4, b/329146942)

Perubahan API

  • Mengubah TraceSectionMetric.Mode menjadi class tersegel untuk memungkinkan perluasan di masa mendatang tanpa merusak pernyataan when menyeluruh (I71f7b)
  • Menambahkan TraceSectionMetric.Mode.Average dan .Count, serta mengurutkan ulang argumen sehingga argumen yang lebih umum (mode) berada di awal daftar argumen, sehingga mengurangi kebutuhan untuk menentukan nama parameter. (Ibf0b0, b/315830077, b/322167531)
  • Mengganti nama Metric.getResult menjadi getMeasurements agar sesuai dengan jenis yang ditampilkan (I42595)

Perbaikan Bug

  • Perbaikan untuk memastikan benchmark menggunakan profil dasar pengukuran yang dihasilkan saat automaticGenerationDuringBuild nonaktif (Ic144f, b/333024280)
  • Memperbaiki penggantian properti plugin gradle BaselineProfile untuk mengaktifkan pembuatan profil dasar pengukuran dan benchmark saat menyesuaikan jenis build nonMinified atau benchmark. (Ib8f05, b/324837887)
  • Memperbaiki flush pelacakan metode di macrobenchmark, sehingga pelacakan metode harus diambil sepenuhnya dan valid, bahkan di perangkat yang lebih lambat. (I6349a, b/329904950)
  • Aktifkan pemblokiran mulai pada rekaman pelacakan Perfetto untuk mengurangi risiko kehilangan data di awal rekaman pelacakan. Hanya didukung di API 33+. (Ie6e41, b/310760059)
  • Menambahkan peringatan saat Android Test Orchestrator digunakan dalam modul benchmark, karena hal ini akan menyebabkan file JSON output per modul ditimpa berulang kali. (Ia1af6, b/286899049)
  • Memaksakan pemisah ribuan ',' (koma) agar konsisten di output Studio, dengan mengabaikan lokalitas perangkat (I3e921, b/313496656)
  • TraceSectionMetric kini mendukung slice yang dibuat menggunakan Trace.{begin|end}AsyncSection. (I91b32, b/300434906)
  • Menambahkan label log.w / pengecualian ke semua kegagalan deteksi startup. Hal ini tidak mengubah perilaku saat ini (sehingga beberapa error ditampilkan, dan yang lain gagal mendeteksi startup secara diam-diam), hanya membuatnya lebih mudah dipahami. Umumnya, yang Log.w() dan gagal melaporkan metrik startup adalah yang tidak memiliki peristiwa non-frame, pengecualian ditampilkan saat startup terdeteksi, kecuali untuk informasi pengaturan waktu render frame (dari slice UI/RT). (Id240f, b/329145809)
  • Batalkan tugas dexopt latar belakang sebelum menjalankan Macrobenchmark untuk mengurangi gangguan. (I989ed)
  • Menambahkan pengukuran frameCount ke FrameTimingMetric untuk membantu penemuan skenario saat pengukuran berubah karena jumlah frame yang dihasilkan berubah (animasi baru ditambahkan, masalah pembatalan validasi diperbaiki). (I1e5aa)
  • Memperjelas bahwa frameOverrunMs adalah metrik pilihan untuk pelacakan jika tersedia dalam dokumen, dan alasannya. (I18749, b/329478323)

Versi 1.3.0-alpha02

20 Maret 2024

androidx.benchmark:benchmark-*:1.3.0-alpha02 dirilis. Versi 1.3.0-alpha02 berisi commit ini.

Fitur Baru

  • Dukungan R8 eksperimental di microbenchmark melalui aturan proguard yang disematkan. Perhatikan bahwa dukungan ini bersifat eksperimental, dan memerlukan AGP 8.3 untuk minifikasi pengujian modul library. Gunakan kode berikut untuk mengaktifkan minifikasi/pengoptimalan R8 di build.gradle modul benchmark Anda, yang akan menghasilkan peningkatan performa yang signifikan, bergantung pada workload. (I738a3, b/184378053)

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

Perbaikan Bug

  • Memperbaiki peringatan pelacakan metode agar berada di baris terpisah dari output microbenchmark. (I0455c, b/328308833)

Versi 1.3.0-alpha01

21 Februari 2024

androidx.benchmark:benchmark-*:1.3.0-alpha01 dirilis. Versi 1.3.0-alpha01 berisi commit ini.

Perubahan API

  • Mengganti nama parameter boolean MicrobenchmarkConfig untuk menghindari kata 'should' yang tidak perlu (Ia8f00, b/303387299)
  • Menambahkan BenchmarkRule.measureRepeatedOnMainThread agar benchmark thread utama (misalnya, yang menyentuh UI View atau Compose) dapat menghindari pemicuan ANR, terutama selama suite besar di CI. (I5c86d)
  • Menambahkan FrameTimingGfxInfoMetric, implementasi alternatif eksperimental FrameTimingMetric dengan pengukuran yang berasal langsung dari platform, bukan diekstrak dari rekaman aktivitas Perfetto. (I457cb, b/322232828)
  • Menambahkan kemampuan untuk membuat profil ART selama setiap iterasi warmUp. (I17923)
  • Beberapa perubahan pada TraceSectionMetric API:
    • Tambahkan Mode.Min, Mode.Max
    • Tambahkan argumen label untuk mengganti nama bagian sebagai label metrik
    • Menambahkan nama mode ke output untuk memperjelas arti metrik
    • Mengubah default ke jumlah, karena sebagian besar penggunaan metrik ini adalah untuk peristiwa berulang Perhatikan perubahan ini dalam penggunaan CI, karena dapat menyebabkan diskontinuitas atau mengganggu penguraian. (Ic1e82, b/301892382, b/301955938)

Perbaikan Bug

  • Pesan error yang ditingkatkan dalam plugin Gradle profil dasar pengukuran saat perangkat terkelola yang ditentukan tidak ada (Idea2b, b/313803289)
  • Perbaikan untuk menyertakan profil dasar pengukuran library di AAR sebelum AGP 8.3.0-alpha15 (I1d2af, b/313992099)
  • Memperbaiki URL output profil dasar dan profil startup di akhir tugas pembuatan (I802e5, b/313976958)
  • Menyesuaikan waktu tunggu sumber data untuk mencoba memperbaiki java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Menambahkan dua argumen instrumentasi untuk mengganti perilaku pelepasan shader guna mengatasi masalah aplikasi yang terhenti saat melakukan benchmark tanpa ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false : dapat digunakan untuk melewati semua penghapusan shader (termasuk yang dilakukan dalam peluncuran StartupMode.Cold), terutama saat melakukan benchmark pada aplikasi yang belum menggunakan profileinstaller 1.3
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : dapat digunakan untuk mentoleransi kegagalan saat mencoba menghilangkan shader, misalnya saat aplikasi tolok ukur tanpa profileinstaller 1.3 (I4f573)
  • Lewati pelacakan metode di UI thread jika diperkirakan akan memerlukan waktu lebih dari beberapa detik, dan bersihkan pelacakan metode saat menampilkan error. (I6e768)
  • Memunculkan pengecualian jika nama file lebih panjang dari 200 karakter untuk menghindari error yang tidak jelas saat menulis atau memproses file setelahnya. (I4a5ab)
  • Memperbaiki masalah saat frame yang tidak dihentikan di awal dan akhir rekaman aktivitas dapat dipasangkan bersama, yang akan salah dilaporkan sebagai satu frame yang sangat panjang. (I39353, b/322232828)
  • Gunakan --skip verification di API 30+ saat menginstal ulang paket di API 30-33 untuk menghapus profil ART di build pengguna. Tindakan ini membantu mengabaikan peringatan Play Protect yang menyebabkan kegagalan pada beberapa jenis perangkat. (Ic9e36)
  • Gunakan am force-stop untuk menghentikan aplikasi jika bukan aplikasi sistem seperti UI Sistem atau Peluncur. (I5e028)
  • Macrobenchmark kini menunggu 1 second agar aplikasi target mengosongkan profil ART (sebelumnya menunggu 500 ms). (I85a50, b/316082056)
  • Meningkatkan error FrameTimingMetric saat frame tidak dihasilkan, dan selalu menampilkan link ke rekaman aktivitas saat penguraian metrik gagal untuk membantu mendiagnosis masalah. (I956b9)
  • Memperbaiki error saat FrameTimingMetric gagal mengurai ID frame, terutama di perangkat OEM tertentu. (Ia24bc, b/303823815, b/306235276)
  • Melonggarkan ketatnya pemeriksaan di FrameMetrics, dan menambahkan lebih banyak detail ke pesan error. (Iadede)

Versi 1.2

Versi 1.2.4

17 April 2024

androidx.benchmark:benchmark-*:1.2.4 dirilis. Versi 1.2.4 berisi commit ini.

Perbaikan Bug

  • Memperbaiki srcset profil dasar pengukuran yang tidak disiapkan dalam varian benchmark. Juga memperbaiki automaticGenerationDuringBuild di library yang menyebabkan dependensi sirkular. (I28ab7, b/333024280)
  • Gunakan am force-stop untuk menghentikan aplikasi jika bukan aplikasi sistem seperti UI Sistem atau Peluncur. Tindakan ini memperbaiki error benchmark StartupMode.COLD dari "Paket $package tidak boleh berjalan sebelum cold start" karena penghentian proses tidak sepenuhnya berhasil. (I5e028)

Versi 1.2.3

24 Januari 2024

androidx.benchmark:benchmark-*:1.2.3 dirilis. Versi 1.2.3 berisi commit ini.

Perbaikan Bug

  • Menghapus pengecualian dari Plugin Gradle Profil Dasar Pengukuran saat versi AGP adalah 8.3.0 atau yang lebih tinggi.
  • Perbaikan untuk menyertakan profil dasar pengukuran library di AAR sebelum AGP 8.3.0-alpha15.

Versi 1.2.2

1 Desember 2023

androidx.benchmark:benchmark-*:1.2.2 dirilis. Versi 1.2.2 berisi commit ini.

Profil Dasar Pengukuran

Versi 1.2.1

15 November 2023

androidx.benchmark:benchmark-*:1.2.1 dirilis. Versi 1.2.1 berisi commit ini.

Fitur Baru

  • Meningkatkan kualitas pesan error saat pengguna menonaktifkan varian pengujian (b/307478189)
  • Menambahkan properti untuk mendukung integrasi uji coba AS (b/309805233), (b/309116324)

Versi 1.2.0

18 Oktober 2023

androidx.benchmark:benchmark-*:1.2.0 dirilis. Versi 1.2.0 berisi commit ini.

Perubahan penting sejak 1.1.0

Profil Dasar Pengukuran

  • Plugin Gradle Profil Dasar Pengukuran baru mengotomatiskan pengambilan dan penyertaan profil dasar pengukuran dalam alur kerja pengujian dan build Anda.
  • BaselineProfileRule.collect kini stabil, versi API BaselineProfileRule.collectBaselineProfile eksperimental sebelumnya yang disederhanakan
    • Cukup tentukan packageName, dan jalankan aplikasi Anda
  • Untuk library yang membuat profil dasar pengukuran, Anda kini dapat memfilter aturan yang dibuat dalam kode (argumen BaselineProfileRule.collect), atau bahkan lebih mudah di plugin gradle
  • Perbaikan
    • Memperbaiki pengumpulan profil dasar pengukuran di Android U+ (Id1392, b/277645214)

Macrobenchmark

  • Kompilasi
    • Macrobenchmark kini mereset status kompilasi sepenuhnya dengan benar untuk setiap kompilasi. Hal ini memerlukan penginstalan ulang APK sebelum Android 14, sehingga tolok ukur di Android 14+ sangat direkomendasikan jika Anda ingin mempertahankan status (seperti login pengguna) dalam hal yang diukur.
    • Anda juga dapat mengatasi masalah ini dengan mengontrol kompilasi aplikasi secara terpisah, dan melewati kompilasi dengan CompilationMode.Ignore() atau argumen instrumentasi
  • Argumen Instrumentasi

    • Dukungan untuk argumen instrumentasi androidx.benchmark.dryRunMode.enable, (sudah tersedia di microbenchmark) untuk menjalankan validasi yang lebih cepat (misalnya saat membuat benchmark, atau dalam pra-pengiriman)
    • Dukungan untuk androidx.benchmark.profiling.mode=StackSampling dan MethodTracing.
    • Menambahkan androidx.benchmark.enabledRules untuk memungkinkan pemfilteran runtime pengujian aturan profil dasar pengukuran vs macrobenchmark
    • Menambahkan argumen androidx.benchmark.perfettoSdkTracing.enable untuk mengaktifkan pelacakan dengan tracing-perfetto, misalnya pelacakan rekomposisi Compose. Perhatikan bahwa jika digunakan dengan StartupMode.COLD, pengaturan waktu akan sangat terpengaruh karena library pelacakan dimuat dan diaktifkan selama startup aplikasi.
  • Persyaratan

    • Macrobenchmark kini memerlukan ProfileInstaller 1.3.0 atau yang lebih baru di aplikasi target, untuk mengaktifkan pengambilan / reset profil, dan penghapusan cache shader.
  • Metric API Eksperimental Baru

    • Menambahkan TraceSectionMetric eksperimental, yang memungkinkan ekstraksi pengaturan waktu sederhana dari blok trace("") {} di aplikasi Anda, atau TraceMetric untuk memanfaatkan kemampuan kueri penuh TraceProcessor Perfetto.
    • Menambahkan PowerMetric eksperimental untuk merekam informasi penggunaan daya
    • Menambahkan MemoryCountersMetric eksperimental untuk menghitung kesalahan halaman
    • Menambahkan API PerfettoTraceProcessor eksperimental, yang digunakan secara internal untuk mengekstrak metrik dari pelacakan Sistem (alias pelacakan Perfetto)
  • Perbaikan

    • Memperbaiki error saat menginstal atau mengekstrak profil dari aplikasi yang diinstal dari beberapa APK (misalnya, dari app bundle).
    • Memperbaiki FrameTimingMetric yang mengabaikan frame dengan ID frame yang tidak konsisten (umumnya, frame selama riak pada API 31+) (I747d2, b/279088460)
    • Memperbaiki error penguraian pada rekaman aktivitas > 64 MB (Ief831, b/269949822)
    • Menjelaskan error saat image OS perangkat (terutama emulator) tidak dikonfigurasi dengan benar untuk pelacakan atau kompilasi
    • Melewati pemeriksaan level baterai untuk perangkat tanpa baterai (mikro dan makro)
    • Peningkatan output file, dengan error yang lebih jelas untuk direktori output yang tidak valid, dan default yang lebih aman
    • Meningkatkan stabilitas StartupMode.COLD dengan menghapus cache shader secara konsisten (juga diekspos melalui MacrobenchmarkScope.dropShaderCache)
    • Memperbaiki fallback leanback untuk startActivityAndWait.

Microbenchmark

  • Fitur
    • Pembuatan profil dipindahkan ke fase terpisah, setelah metrik lainnya, sehingga satu pengujian dapat menampilkan hasil pengaturan waktu dan pembuatan profil yang akurat.
  • API eksperimental
    • Menambahkan API MicrobenchmarkConfig eksperimental untuk menentukan metrik kustom serta mengonfigurasi pelacakan dan pembuatan profil. Dapat digunakan untuk merekam pelacakan metode, atau merekam titik pelacakan (tetapi perhatikan overhead pelacakan).
    • Menambahkan API eksperimental untuk mengontrol BenchmarkState secara terpisah dari BenchmarkRule, tanpa JUnit
    • Menambahkan rekaman PerfettoTrace eksperimental untuk memungkinkan pengambilan rekaman aktivitas Perfetto, dengan konfigurasi kustom, terpisah dari API tolok ukur.
  • Perbaikan
    • Solusi untuk spasi kosong di awal yang tidak ada dalam output benchmark Android Studio.
    • Memperbaiki masalah saat peringatan gagal dicetak di output benchmark Android Studio.
    • Memperbaiki error SampledProfiling di Android 13 (API 33) dan yang lebih tinggi.
    • Peningkatan performa dryRunMode secara signifikan dengan melewati IsolationActivity dan perekaman aktivitas Perfetto (Mode uji coba hingga 10x lebih cepat pada versi OS yang lebih lama).

Versi 1.2.0-rc02

6 Oktober 2023

androidx.benchmark:benchmark-*:1.2.0-rc02 dirilis. Versi 1.2.0-rc02 berisi commit ini.

Perbaikan Bug

  • Memperbaiki output file Benchmark agar tidak lagi merusak penyalinan file Plugin BaselineProfile. File dibuat dan disalin dari perangkat, tetapi telah diganti namanya sehingga plugin gradle tidak akan melihatnya. (I8dbcc, b/303034735, b/296453339)
  • Memperjelas pesan error pemuatan tracing-perfetto saat memasukkan dari modul macrobenchmark ke aplikasi target.

Versi 1.2.0-rc01

20 September 2023

androidx.benchmark:benchmark-*:1.2.0-rc01 dirilis. Versi 1.2.0-rc01 berisi commit ini.

Perbaikan Bug

  • Pengecualian (dengan petunjuk perbaikan) kini ditampilkan saat inisialisasi perekaman aktivitas Perfetto SDK gagal dalam Benchmark. (I6c878, b/286228781)
  • Memperbaiki error OOM saat mengonversi pelacakan metode ART -> format perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) Memperjelas label pelacakan metode saat ditautkan dalam output pengujian Studio, dan memperbaiki nama file pelacakan metode agar unik di perangkat/host, sehingga tidak akan ditimpa saat lebih dari satu benchmark dijalankan. (I08e65, b/285912360)
  • Memastikan perangkat aktif saat mengambil profil dasar pengukuran. (I503fc)

Versi 1.2.0-beta05

30 Agustus 2023

androidx.benchmark:benchmark-*:1.2.0-beta05 dirilis. Versi 1.2.0-beta05 berisi commit ini.

Fitur Baru

  • Plugin Gradle Profil Dasar Pengukuran kini mendukung Plugin Android Gradle 8.3. (aosp/2715214)

Versi 1.2.0-beta04

23 Agustus 2023

androidx.benchmark:benchmark-*:1.2.0-beta04 dirilis. Versi 1.2.0-beta04 berisi commit ini.

Fitur Baru

  • Plugin Gradle Profil Dasar Pengukuran kini mendukung Plugin Android Gradle 8.3. (aosp/2715214)

Perbaikan Bug

  • Memperbaiki kegagalan dalam menulis / memindahkan dan menarik file (terutama yang berasal dari pengujian berparameter) dengan membersihkan nama file output lebih lanjut, menghindari '=' dan ':' dalam nama file output. (I759d8)

Versi 1.2.0-beta03

9 Agustus 2023

androidx.benchmark:benchmark-*:1.2.0-beta03 dirilis. Versi 1.2.0-beta03 berisi commit ini.

Perubahan API

  • Menambahkan argumen untuk memfilter TraceSectionMetric hanya ke paket target, aktif secara default (Ia219b, b/292208786)

Perbaikan Bug

  • Mengganti nama argumen instrumentasi fullTracing.enable menjadi perfettoSdkTracing.enable agar konsisten dengan nama artefak, dan referensi lainnya. fullTracing.enable akan terus berfungsi sebagai pengganti. (I7cc00)
  • Titik pelacakan internal library benchmark (termasuk pelacakan loop/fase microbenchmark) kini akan muncul di pelihat rekaman aktivitas sistem Studio, dan berada di bawah proses yang benar di Perfetto. (I6b2e7, b/293510459)
  • Menghapus error macrobenchmark NOT-PROFILEABLE di API 31+, dan melewati pemeriksaan yang dapat di-profil di perangkat yang telah di-root eng/userdebug. (I2abac, b/291722507)
  • Saat menggunakan Pengoptimalan Tata Letak Dex, aturan profil startup kini juga dianggap sebagai aturan profil dasar. (aosp/2684246, b/293889189)

Versi 1.2.0-beta02

26 Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta02 dirilis. Versi 1.2.0-beta02 berisi commit ini.

Perubahan API

  • Menambahkan API eksperimental untuk metrik dan konfigurasi kustom microbenchmark (misalnya, profiler, dan pelacakan). (I86101, b/291820856)

Perbaikan Bug

  • Melaporkan error di macrobench saat OS salah dikonfigurasi untuk pelacakan, seperti yang baru-baru ini diperbaiki di emulator ARM64 API 26/28. (I0a328, b/282191686)
  • Menambahkan detail ke kegagalan reset kompilasi untuk menyarankan update emulator, karena beberapa emulator baru-baru ini memperbaiki masalah ini. (I8c815, b/282191686)
  • Jadikan androidx.test.uiautomator:uiautomator:2.2.0 sebagai api, bukan dependensi implementation. (I1981e)

Versi 1.2.0-beta01

18 Juli 2023

androidx.benchmark:benchmark-*:1.2.0-beta01 dirilis. Versi 1.2.0-beta01 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki peringatan yang terkadang disembunyikan di output Benchmark di Studio, dan solusi untuk spasi kosong di awal dari output Benchmark yang tidak muncul di Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
  • Memperbaiki komentar untuk FrameTimingMetric. Submetrik diberi nama frameDurationCpuMs. (Ib097f, b/288830934).

Versi 1.2.0-alpha16

21 Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha16 dirilis. Versi 1.2.0-alpha16 berisi commit ini.

Perubahan API

  • API BaselineProfileRule.collectBaselineProfile() telah diganti namanya menjadi BaselineProfileRule.collect(). (I4b665)

Perbaikan Bug

  • Dukungan Macrobenchmark untuk androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • Pembuatan profil Microbenchmark dipindahkan ke fase terpisah, sehingga terjadi secara berurutan setelah pengukuran, bukan menggantikannya. Bagian rekaman aktivitas MethodTracing kini juga disertakan dalam rekaman aktivitas Perfetto yang diambil, jika ada. (I9f657, b/285014599)
  • Tambahkan pengukuran jumlah ke TraceSectionMetric dengan Mode.Sum. (Ic121a, b/264398606)

Versi 1.2.0-alpha15

7 Juni 2023

androidx.benchmark:benchmark-*:1.2.0-alpha15 dirilis. Versi 1.2.0-alpha15 berisi commit ini.

Fitur Baru

  • Menambahkan MemoryUsageMetric eksperimental untuk melacak penggunaan memori aplikasi target. (I56453, b/133147125, b/281749311)
  • Menambahkan dukungan untuk konfigurasi Perfetto kustom sepenuhnya dengan PerfettoTrace.record (If9d75, b/280460183)
  • Menambahkan properti untuk melewati pembuatan profil dasar pengukuran. Penggunaan: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

Perubahan API

  • collectBaselineProfile API selalu menghasilkan profil dasar pengukuran yang stabil. API collectStableBaselineProfile telah dihapus dan collectBaselineProfile harus digunakan sebagai gantinya. (I17262, b/281078707)
  • Mengubah argumen filterPredicate BaselineProfileRule menjadi non-null, dengan nilai default yang setara sehingga perilaku filter default lebih jelas dalam dokumen. (I3816e)

Perbaikan Bug

  • Nonaktifkan pelacakan IsolationActivity dan Perfetto di dryRunMode untuk meningkatkan performa secara signifikan, karena keduanya merupakan mayoritas runtime. (Ie4f7d)
  • Dukungan untuk pengambilan sampel stack panggilan di Macrobenchmark menggunakan argumen uji instrumentasi androidx.benchmark.profiling.mode=StackSampling dan androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Memperbaiki error saat menghapus shader di Android U (API 34), serta di emulator. (I031ca, b/274314544)

Versi 1.2.0-alpha14

3 Mei 2023

androidx.benchmark:benchmark-*:1.2.0-alpha14 dirilis. Versi 1.2.0-alpha14 berisi commit ini.

Perbaikan Bug

  • Memperbaiki FrameTimingMetric yang mengabaikan frame dengan ID frame yang tidak konsisten. Hal ini akan menyebabkan beberapa animasi pada versi platform terbaru (API 31+) mengabaikan banyak frame saat RenderThread sedang dianimasikan (misalnya, selama ripple). (I747d2, b/279088460)
  • Memperbaiki penguraian pemroses rekaman aktivitas untuk rekaman aktivitas yang lebih besar dari 64 Mb. (Ief831, b/269949822)
  • Memperbaiki pembuatan profil dasar pengukuran di Android U yang gagal karena output perintah pm dump-profiles yang berbeda. (Id1392, b/277645214)
  • Memperbaiki skrip penguncian clock GPU untuk membandingkan string dengan benar (I53e54, b/213935715)

Versi 1.2.0-alpha13

5 April 2023

androidx.benchmark:benchmark-*:1.2.0-alpha13 dirilis. Versi 1.2.0-alpha13 berisi commit ini.

Perubahan API

  • Menambahkan parameter jenis profil saat membuat profil dasar pengukuran untuk mendukung fitur profil peluncuran yang akan datang (Ie20d7, b/275093123)
  • Menambahkan API TraceMetric eksperimental baru untuk menentukan metrik kustom sepenuhnya berdasarkan konten rekaman aktivitas Perfetto. (I4ce31, b/219851406)
  • Menambahkan metrik eksperimental untuk menentukan jumlah kesalahan halaman selama benchmark. (I48db0)

Versi 1.2.0-alpha12

22 Maret 2023

androidx.benchmark:benchmark-*:1.2.0-alpha12 dirilis. Versi 1.2.0-alpha12 berisi commit berikut ini.

Fitur Baru

  • Plugin Gradle profil dasar pengukuran baru dirilis dalam versi alfa, sehingga memudahkan pembuatan profil dasar pengukuran dan menyederhanakan alur kerja developer.

Perubahan API

  • Menghapus dukungan rekaman aktivitas Perfetto di API 21 dan 22, yang mencakup Microbenchmark dan API PerfettoTrace eksperimental. Sebelum versi ini, koneksi UiAutomation tidak dapat diandalkan di beberapa perangkat. (I78e8c)
  • Menambahkan API eksperimental publik untuk PerfettoTraceProcessor guna mengaktifkan penguraian konten rekaman aktivitas. Langkah ini merupakan langkah menuju metrik kustom yang sepenuhnya berdasarkan data rekaman aktivitas Perfetto. (I2659e, b/219851406)

Versi 1.2.0-alpha11

8 Maret 2023

androidx.benchmark:benchmark-*:1.2.0-alpha11 dirilis. Versi 1.2.0-alpha11 berisi commit berikut ini.

Perbaikan Bug

  • Memperbaiki error di MacrobenchmarkRule dan BaselineProfileRule saat menginstal ulang atau mengekstrak profil dari app bundle dengan beberapa APK. (I0d8c8, b/270587281)

Versi 1.2.0-alpha10

22 Februari 2023

androidx.benchmark:benchmark-*:1.2.0-alpha10 dirilis. Versi 1.2.0-alpha10 berisi commit berikut.

Fitur Baru

  • Di Android 14+, Macrobenchmark tidak lagi menginstal ulang aplikasi target untuk mereset status kompilasi, berkat fitur platform baru. Sebelumnya, Anda perlu memiliki perangkat yang telah di-root, atau menangani semua status aplikasi (mis. login pengguna) yang dihapus sebelum setiap benchmark dijalankan. (I9b08c, b/249143766)

Perbaikan Bug

  • Memperbaiki DryRunMode agar tidak lagi error dengan profil kosong, karena melewati proses kompilasi. Sebagai gantinya, item ini akan menjalankan satu iterasi dan mengekstrak profil untuk memastikan ada hal yang direkam. (I2f05d, b/266403227)
  • Memperbaiki error PowerMetric saat memeriksa keberadaan powerstats di API level lama. (5faaf9, b/268253898)

Versi 1.2.0-alpha09

11 Januari 2023

androidx.benchmark:benchmark-*:1.2.0-alpha09 dirilis. Versi 1.2.0-alpha09 berisi commit ini.

Perbaikan Bug

  • Mengaktifkan penerusan None ke argumen instrumentasi androidx.benchmark.enabledRules untuk menonaktifkan semua pembuatan benchmark/profil dasar pengukuran. (I3d7fd, b/258671856)
  • Memperbaiki pengambilan PerfettoTrace dalam modul aplikasi (yaitu APK pengujian tanpa instrumentasi) (I12cfc)
  • Memperbaiki urutan argumen pull adb profil dasar pengukuran di output Studio (I958d1, b/261781624)
  • Arm emulator API 33 sekarang dikenali dengan benar seperti itu saat mencoba menjalankan macrobenchmark dan akan mencetak peringatan dengan benar. (69133b,b/262209591)
  • Melewati pemeriksaan level baterai pada perangkat tanpa baterai di Macrobenchmark (fe4114, b/232448937)

Versi 1.2.0-alpha08

7 Desember 2022

androidx.benchmark:benchmark-*:1.2.0-alpha08 dirilis. Versi 1.2.0-alpha08 berisi commit ini.

Perubahan API

  • Menambahkan API baru eksperimental PerfettoTrace.record {} dan PerfettoTraceRule untuk menangkap rekaman aktivitas Perfetto (juga dikenal sebagai Rekaman Aktivitas Sistem) sebagai bagian dari pengujian, untuk memeriksa perilaku dan performa pengujian. (I3ba16)
  • BaselineProfileRule kini menerima predikat filter, bukan daftar awalan paket. Perubahan ini memberikan kontrol penuh atas pemfilteran. (I93240)
  • Menambahkan API eksperimental BaselineProfileRule.collectStableBaselineProfile yang menunggu hingga profil dasar pengukuran stabil untuk iterasi N. (I923f3)
  • Menambahkan kemampuan untuk menentukan awalan nama file output saat membuat profil dasar pengukuran menggunakan BaselineProfileRule. (I7b59f, b/260318655)

Perbaikan Bug

  • Meningkatkan keamanan penulisan output file, yang akan mencegah file output diam-diam tidak ditulis/ditambahkan, terutama di API 21/22. (If8c44, b/227510293)
  • Memperbaiki output rekaman aktivitas simpleperf untuk membuat dan menempatkan file dengan benar. Tindakan ini juga akan memperbaiki masalah saat file gagal diambil oleh Gradle. (I12a1c, b/259424099)
  • Memperbaiki pesan error profileinstaller yang dicetak saat versi profileinstaller terlalu lama. Pesan ini sekarang memberi tahu Anda agar mengupdate versi profileinstaller (1.2.1) untuk mengukur profil dasar pengukuran di API 31 hingga 33, bukan untuk menyatakan bahwa profil tidak didukung. (Ia517f, b/253519888)
  • Memperbaiki beberapa kegagalan perintah shell pada pesan error API yang memerlukan Cetak <=23, termasuk kegagalan perfetto dalam merekam penyiapan biner dan kegagalan perekaman aktivitas (Ib6b87, b/258863685)
  • Otomatis mengurutkan aturan profil yang dihasilkan untuk meminimalkan jumlah perubahan seiring perubahannya dari waktu ke waktu (saat memeriksa aturan profil ke dalam kontrol sumber). (Ie2509)
  • Memperbaiki error pada build yang tidak di-root di bawah Android 13 (API 33) dengan pesan Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

Masalah Umum - MacrobenchmarkScope.dropShaderCache() mungkin error karena registry siaran tidak ada dalam manifes profileinstaller, yang belum dirilis. (I5c728, b/258619948) Untuk mengatasi masalah di profileinstaller:1.3.0-alpha02, tambahkan kode berikut ke AndroidManifest.xml (bukan benchmark) aplikasi Anda:

  <!-- 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>

Versi 1.2.0-alpha07

9 November 2022

androidx.benchmark:benchmark-*:1.2.0-alpha07 dirilis. Versi 1.2.0-alpha07 berisi commit ini.

Perubahan API

  • Menambahkan PowerMetric API untuk mengukur energi dan daya di Macrobenchmark. (Ife601, b/220183779)
  • Memperbaiki MacrobenchmarkScope.dropShaderCache() untuk benar-benar menghapus cache shader. Tindakan ini akan menghilangkan sekitar 20 md derau dari benchmark StartupMode.COLD, karena shader sekarang dihapus secara konsisten setiap iterasi. Sebelumnya, kompilasi Partial yang menggunakan iterasi pemanasan akan salah melaporkan angka cepat karena cache shader lebih cenderung terjadi selama pemanasan. Perbaikan ini memerlukan perangkat yang telah di-root, atau menggunakan profileinstaller:1.3.0-alpha02 pada aplikasi target. Untuk perubahan API library ProfileInstaller, lihat halaman ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • Menambahkan TraceSectionMode("label", Mode.Sum), yang memungkinkan pengukuran total waktu yang dihabiskan di beberapa bagian rekaman aktivitas dengan label yang sama. Misalnya, TraceSectionMetric("inflate", Mode.Sum) akan melaporkan metrik inflateMs untuk total waktu dalam macrobenchmark yang dihabiskan untuk meng-inflate. Juga menghapus persyaratan API 29 karena TraceSectionMetric berfungsi bersama dengan androidx.tracing.Trace kembali ke API level yang lebih rendah, dengan penggunaan forceEnableAppTracing dalam aplikasi target. (Id7b68, b/231455742)

Perbaikan Bug

  • Meningkatkan keamanan semua perintah shell internal dengan memvalidasi semua output/error. (I5984d, b/255402908, b/253094958)
  • Menentukan perangkat dalam perintah adb pull profil dasar pengukuran sehingga perintah pull dapat disalin dengan mudah jika beberapa perangkat terhubung (hingga satu emulator) (I6ac6c, b/223359380 )
  • Menambahkan error jika apk pengujian macrobenchmark tidak disiapkan sebagai instrumentasi mandiri. Error ini mencegah macrobenchmark dalam proses aplikasi target. Dalam prosesnya, macrobench tidak akan dapat mengompilasi/menghentikan/cold start aplikasi, atau mengontrol izinnya sendiri (I4279b)
  • Memperbaiki masalah di measureRepeated() tempat StartupMode.COLD tidak akan menghentikan proses target setelah setupBlock. Sekarang setupBlock yang berinteraksi dengan aplikasi tidak akan membiarkan proses aplikasi berjalan, dan pengukuran cold start tidak valid. (I8ebb7)

Versi 1.2.0-alpha06

24 Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha06 dirilis. Versi 1.2.0-alpha06 berisi commit ini.

Perubahan API

  • BaselineProfileRule tidak lagi memerlukan root di Android 13 (API 33), dan tidak lagi bersifat eksperimental. (Ie0a7d, b/250083467, b/253094958)
    • Perubahan ini juga memperbaiki cara flush profil dari aplikasi ke disk pada perangkat yang tidak di-root, tetapi memerlukan update dependensi profilinstaller aplikasi target.
    • Untuk menggunakan BaselineProfileRule atau CompilationMode.Partial(warmupIterations) di perangkat yang tidak di-root, Anda juga harus mengupdate aplikasi target agar dapat menggunakan androidx.profileinstaller.profileinstaller:1.3.0-alpha01. Tindakan ini memungkinkan flush profil ke disk dengan benar, sehingga dapat dikompilasi/diekstrak.

Perbaikan Bug

Versi 1.2.0-alpha05

5 Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha05 dirilis. Versi 1.2.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Memperbaiki perincian frame di penampil rekaman aktivitas sistem Studio untuk rekaman aktivitas yang direkam benchmark (I3f3ae, b/239677443)
  • Memperbaiki FrameTimingMetric untuk mencantumkan bahwa FrameOverrun memerlukan API 31, bukan 29 (I716dd, b/220702554)
  • Menyetel iterasi dalam BaselineProfileRule, dan menampilkan dengan jelas jika paket target tidak diinstal (sudah dilakukan untuk MacrobenchmarkRule). (Ic09a3, b/227991471)

Versi 1.2.0-alpha04

21 September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha04 dirilis. Versi 1.2.0-alpha04 berisi commit ini.

Fitur Baru

  • Menambahkan dukungan untuk argumen instrumentasi dryRunMode.enable ke macrobenchmark (sudah tersedia dalam micro) untuk pengembangan lokal yang lebih cepat, dan memvalidasi otomatisasi aplikasi (misalnya dalam pra-pengiriman). Ini akan mengganti iterasi ke 1, melewati kompilasi, menyembunyikan semua error konfigurasi, dan menonaktifkan output file .json pengukuran. (Ib51b4, b/175149857)

    Di command line Gradle:

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

    Di build.gradle:

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

Perbaikan Bug

  • Memperbaiki StartupTimingMetric agar Aktivitas yang diukur tidak perlu lagi diluncurkan melalui MacrobenchmarkScope.startActivityAndWait(). Artinya, metrik dapat mengambil peluncuran dari notifikasi, Context.startActivity(), navigasi berbasis Aktivitas dalam aplikasi, atau perintah shell. (Ia2de6, b/245414235)
  • Memperbaiki bug saat startActivityAndWait mengalami waktu tunggu habis ketika mencoba menyelesaikan peluncuran pada emulator dengan mengurangi pengetatan deteksi frame. (Ibe2c6, b/244594339, b/228946895)

Versi 1.2.0-alpha03

7 September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha03 dirilis. Versi 1.2.0-alpha03 berisi commit ini.

Fitur Baru

  • Menambahkan API eksperimental untuk menggunakan BenchmarkState secara independen, terpisah dari BenchmarkRule/JUnit4. (Id478f, b/228489614)

Perbaikan Bug

Versi 1.2.0-alpha02

24 Agustus 2022

androidx.benchmark:benchmark-*:1.2.0-alpha02 dirilis. Versi 1.2.0-alpha02 berisi commit ini.

Perubahan API

  • Menjadikan default ke am force stop untuk MacrobenchmarkScope.killProcess(), meskipun saat di-root, kecuali selama pembuatan Profil Baseline. Anda dapat menggantinya dengan argumen boolean opsional. (02cce9, b/241214097)

Perbaikan Bug

  • Mendukung pembuatan profil baseline untuk aplikasi Sistem. (I900b8, b/241214097)
  • Mendukung pemeriksaan metrik daya ODPM di perangkat yang tidak di-root. (a38c78, b/229623230)

Versi 1.2.0-alpha01

27 Juli 2022

androidx.benchmark:benchmark-*:1.2.0-alpha01 dirilis. Versi 1.2.0-alpha01 berisi commit ini.

Fitur Baru

  • Komponen tracing-perfetto-common baru yang memungkinkan alat untuk mengaktifkan pelacakan SDK Perfetto di aplikasi yang mengeksposnya (I2cc7f)
  • Menambahkan argumen instrumentasi androidx.benchmark.enabledRules untuk mengaktifkan pemfilteran macrobenchmark yang berjalan hanya ke benchmark, atau hanya pembuatan profil dasar pengukuran. Teruskan 'Macrobenchmark', atau 'BaselineProfile' untuk menjalankan satu jenis pengujian saja, misalnya saat membuat BaselineProfiles pada emulator saja. Daftar yang dipisahkan koma juga Didukung. (I756b7, b/230371561)

    Misalnya dalam build.gradle macrobenchmark Anda:

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

    Atau dari command line Gradle:

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

Perubahan API

  • Menambahkan PowerMetric baru untuk mengukur tugas energi dan daya dalam benchmark. (I9f39b, b/220183779)
  • Menambahkan mode kompilasi baru CompilationMode.Ignore untuk melewati proses reset dan kompilasi profil. (Ibbcf8, b/230453509)
  • Menambahkan parameter baru ke BaselineProfileRule#collectBaselineProfile untuk memfilter file output berdasarkan nama paket (If7338, b/220146561)
  • Memungkinkan developer mengeluarkan perangkat untuk mengukur konsumsi daya. (I6a6cb)
  • Menambahkan kemampuan untuk menghapus cache shader di MacrobenchmarkScope. (I32122)
  • Memungkinkan developer mengonfigurasi tampilan jenis metrik dan menjelaskan perincian kategori subsistem yang diinginkan. (I810c9)
  • Sebelumnya, UnsupportedOperationException ditampilkan dalam benchmark jika dijalankan di perangkat yang tidak didukung. Sekarang UOE hanya terjadi jika metrik digunakan di perangkat yang tidak didukung (yaitu: PowerMetric.configure). (I5cf20, b/227229375)
  • Menambahkan TotalPowerMetric dan TotalEnergyMetric untuk mengukur total daya dan energi dalam setiap kategori sistem di macrobenchmark. (I3b26b, b/224557371)

Perbaikan Bug

  • Memperbaiki masalah saat metode yang dikompilasi tidak direset dengan benar di antara setiap macrobenchmark pada build yang tidak di-root. Sayangnya, tindakan ini memerlukan penginstalan ulang apk pada setiap iterasi, yang akan menghapus data aplikasi untuk setiap macrobenchmark. (I31c74, b/230665435)
  • Memperbaiki error rekaman aktivitas di API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
  • Merombak deteksi penyelesaian peluncuran aktivitas untuk memperbaiki pengecualian 'Tidak dapat membaca metrik' dalam macrobenchmark startup. (Ia517c)

Versi 1.1.1

Versi 1.1.1

9 November 2022

androidx.benchmark:benchmark-*:1.1.1 dirilis. Versi 1.1.1 berisi commit ini.

Perbaikan Bug

  • Memperbaiki android.system.ErrnoException: open failed: EACCES yang akan terjadi di beberapa perangkat Android11 (API 30)+. Ini adalah pengambilan perbaikan dari 1.2.0-alpha01. (aosp/2072249)

Versi 1.1.0

Versi 1.1.0

15 Juni 2022

androidx.benchmark:benchmark-*:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

  • Versi ini sama persis dengan androidx.benchmark:benchmark-*:1.1.0-rc03.

Perubahan penting sejak versi 1.0.0

Versi 1.1.0-rc03

1 Juni 2022

androidx.benchmark:benchmark-*:1.1.0-rc03 dirilis. Versi 1.1.0-rc03 berisi commit ini.

Perbaikan Bug

Versi 1.1.0-rc02

11 Mei 2022

androidx.benchmark:benchmark-*:1.1.0-rc02 dirilis. Versi 1.1.0-rc02 berisi commit ini.

  • Perhatikan bahwa rilis ini menyertakan perubahan perilaku, karena aplikasi kini diinstal ulang sepenuhnya di antara setiap benchmark untuk memastikan pengukuran yang akurat.

Perbaikan Bug/Perubahan Perilaku

  • Memperbaiki masalah kompilasi aplikasi yang tidak direset dengan benar di antara macrobenchmark, dan tidak direset sama sekali pada build yang tidak di-root. Tindakan ini memperbaiki banyak kasus saat menjalankan beberapa pengujian akan menyebabkan CompilationMode memiliki sedikit pengaruh atau tidak berpengaruh pada pengukuran. Untuk mengatasi masalah ini, aplikasi target kini sepenuhnya menginstal ulang setiap metode pengujian, yang akan menghapus data aplikasi di antara setiap macrobenchmark. (I31c74, b/230665435)

  • Karena hal ini mencegah aplikasi menyiapkan status sebelum pengujian, sekarang Anda dapat melewati kompilasi/penginstalan ulang untuk memungkinkan penyelesaian masalah ini. Misalnya, Anda dapat mengompilasi target sepenuhnya dengan perintah shell cmd package compile -f -m speed <package>, lalu mengabaikan langkah kompilasi macrobenchmark.

    Misalnya dalam build.gradle macrobenchmark Anda:

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

    Atau dari command line Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Memungkinkan untuk berbagi modul antara macrobenchmark dan profil baseline yang menghasilkan pengujian dengan menambahkan argumen instrumentasi androidx.benchmark.enabledRules. Teruskan 'Macrobenchmark', atau 'BaselineProfile' untuk menjalankan satu jenis pengujian saja, misalnya saat membuat BaselineProfiles pada emulator. (I756b7, b/230371561)

    Misalnya dalam build.gradle macrobenchmark Anda:

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

    Atau dari command line Gradle:

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

Versi 1.1.0-rc01

20 April 2022

androidx.benchmark:benchmark-*:1.1.0-rc01 dirilis. Versi 1.1.0-rc01 berisi commit ini.

Perbaikan Bug

  • Link output profil dasar pengukuran di Android Studio kini menggunakan nama file yang unik. Dengan cara ini, output selalu mencerminkan hasil terbaru penggunaan BaselineProfileRule. ( aosp/2057008, b/228203086 )

Versi 1.1.0-beta06

6 April 2022

androidx.benchmark:benchmark-*:1.1.0-beta06 dirilis. Versi 1.1.0-beta06 berisi commit ini.

Perbaikan Bug

  • Memperbaiki error rekaman aktivitas di API 21/22 (If7fd6, b/227509388)
  • Merombak deteksi penyelesaian peluncuran aktivitas untuk memperbaiki pengecualian 'Tidak dapat membaca metrik' dalam macrobenchmark startup. (Ia517c)
  • Memperbaiki metrik startup untuk Macrobenchmark saat CompilationMode.None() digunakan. Sebelum perubahan ini, CompilationMode.Partial() akan tampak lebih lambat dari Compilation.None(). (611ac9).

Versi 1.1.0-beta05

23 Maret 2022

androidx.benchmark:benchmark-*:1.1.0-beta05 dirilis. Versi 1.1.0-beta05 berisi commit ini.

Perbaikan Bug

Versi 1.1.0-beta04

23 Februari 2022

androidx.benchmark:benchmark-*:1.1.0-beta04 dirilis. Versi 1.1.0-beta04 berisi commit ini.

Perbaikan Bug

  • Memperbaiki metrik yang hilang di Android 10, dan NoSuchElementException yang disebabkan oleh nama proses yang tidak terekam dengan benar di rekaman aktivitas. (Ib4c17, b/218668335)

  • Menggunakan PowerManager untuk deteksi throttling termal pada Q (API 29) dan yang lebih tinggi. Hal ini secara signifikan mengurangi frekuensi positif palsu (PP) dalam deteksi throttling termal (percobaan ulang benchmark setelah periode tunggu 90 detik), dan mempercepat benchmark secara signifikan pada build pengguna. Hal ini juga memberikan deteksi throttle meskipun jam dikunci (jika dikunci terlalu tinggi untuk lingkungan fisik perangkat). (I9c027, b/217497678, b/131755853)

  • Memfilter profiling sampel simpleperf ke thread measureRepeated hanya untuk menyederhanakan pemeriksaan (Ic3e12, b/217501939)

  • Mendukung metrik dari subproses UI bernama dalam aplikasi multiproses (Ice6c0, b/215988434)

  • Memfilter aturan Profil Baseline untuk menargetkan Android 9 (SDK 28). aosp/1980331 b/216508418

  • Melewati Penginstalan Profil saat menggunakan Compilation.None(). Selain itu, melaporkan peringatan saat aplikasi menggunakan androidx.profileinstaller dan Plugin Android Gradle versi lama. aosp/1977029

Versi 1.1.0-beta03

9 Februari 2022

androidx.benchmark:benchmark-*:1.1.0-beta03 dirilis. Versi 1.1.0-beta03 berisi commit ini.

Perubahan API

  • Menambahkan AudioUnderrunMetric ke library macrobenchmark di bagian flag eksperimental untuk memungkinkan deteksi underrun audio (Ib5972)
  • BaselineProfileRule tidak lagi menerima blok setup karena fungsi ini sama dengan profileBlock. (Ic7dfe, b/215536447)

    Misalnya,

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

Perbaikan Bug

  • Memperbaiki masalah ketika rekaman aktivitas profiler microbench akan gagal diupdate pada run berikutnya saat ditautkan di output Studio (I5ae4d, b/214917025)
  • Mencegah perintah shell kompilasi di API 23 (Ice380)
  • Mengganti nama FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi guna memperjelas ini adalah durasi, bukan stempel waktu, dan untuk mencocokkan awalan. (I0eba3, b/216337830)

Versi 1.1.0-beta02

26 Januari 2022

androidx.benchmark:benchmark-*:1.1.0-beta02 dirilis. Versi 1.1.0-beta02 berisi commit ini.

Perbaikan Bug

  • Hasil Pengambilan Sampel/Pelacakan Stack Profil Microbenchmark kini ditautkan dalam output Studio, mirip dengan output profiling lainnya, dan tidak menyembunyikan metrik alokasi. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule sekarang mencetak perintah adb pull di logcat dan output Studio untuk menarik file teks BaselineProfile yang dihasilkan. (f08811)

Versi 1.1.0-beta01

12 Januari 2022

androidx.benchmark:benchmark-*:1.1.0-beta01 dirilis. Versi 1.1.0-beta01 berisi commit ini.

Perbaikan Bug

  • Memperbaiki argumen profiler agar diabaikan. (I37373, b/210619998)
  • Menghapus CompliationModes yang tidak digunakan lagi (I98186, b/213467659)
  • Mengalihkan argumen profil dasar pengukuran CompilationMode.Partial ke enum untuk kejelasan. (Id67ea)

Versi 1.1.0-alpha13

15 Desember 2021

androidx.benchmark:benchmark-*:1.1.0-alpha13 dirilis. Versi 1.1.0-alpha13 berisi commit ini.

Perubahan API

  • Menambahkan Pelacakan Sistem dengan overhead rendah ke output microbench di Android Q (API 29+). Perlu diperhatikan bahwa saat ini tindakan ini tidak menangkap pelacakan kustom (melalui android.os.Trace atau androidx.tracing API Jetpack) untuk menghindari dampak hasil. Pelacakan ini seharusnya berguna untuk mendiagnosis ketidakstabilan, terutama dari sumber di luar benchmark. (I298be, b/205636583, b/145598917)
  • Mengklarifikasi CompilationModes ke dalam tiga class - Penuh, Tidak ada, Parsial. Sebelumnya namanya dinamai secara tidak konsisten berdasarkan argumen kompilasi (yang sekarang kita perlakukan sebagai detail implementasi) dan fitur. Hal ini membuat tradeoff, potensi kombinasi, dan perilaku di seluruh versi platform lebih jelas. (I3d7bf, b/207132597)
  • Penyiapan dan pengukuran kini selalu berpasangan, secara berurutan. Anda kini dapat mengkueri nama paket dan iterasi (meskipun iterasinya mungkin null dalam skenario pemanasan tertentu). (Id3b68, b/208357448, b/208369635)

Perbaikan Bug

  • Memperbaiki CompilationMode.Speed yang salah diperlakukan sebagai None (I01137)

Versi 1.1.0-alpha12

17 November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha12 dirilis. Versi 1.1.0-alpha12 berisi commit ini.

Fitur Baru

  • Menambahkan TraceSectionMetric eksperimental ke pengukuran waktu berbasis pelacakan kustom. (I99db1, b/204572664)

Perbaikan Bug

  • Mengaktifkan perangkat di setiap iterasi, untuk memastikan UI dapat diuji - layar kunci perlu dinonaktifkan. (Ibfa28, b/180963442)
  • Memperbaiki beberapa error dalam mode pembuatan profil StackSampling di emulator dan perangkat yang tidak di-root (Icdbda, b/202719335)
  • Menghapus tidur 0,5 detik di akhir setiap iterasi - jika Anda melihat metrik yang hilang dengan perubahan ini, laporkan bug. (Iff6aa)
  • Mengurangi peluang penurunan data, dan menurunkan overhead memori dari pelacakan (Id2544, b/199324831, b/204448861)
  • Mengurangi ukuran pelacakan hingga ~40% dengan beralih ke format penyimpanan sched yang ringkas. (Id5fb6, b/199324831)
  • Memperbarui implementasi metrik startup agar selalu berakhir di akhir renderthread. Ini akan lebih konsisten di seluruh versi platform, dan lebih memetakan ke pengukuran dalam aplikasi. (Ic6b55)

Versi 1.1.0-alpha11

3 November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha11 dirilis. Versi 1.1.0-alpha11 berisi commit ini.

Perubahan API

  • Macrobenchmark kini memiliki minSdkVersion 23. (If2655)
  • Menambahkan BaselineProfileRule eksperimental baru yang mampu menghasilkan profil dasar pengukuran untuk perjalanan penting pengguna aplikasi. Dokumentasi mendetail untuk diikuti. (Ibbefa, b/203692160)
  • Menghapus varian antarmuka measureRepeated, yang ditambahkan untuk pemanggil java, karena menyebabkan ambiguitas dalam menyelesaikan/me-resolve metode. Pemanggil Java sekali lagi harus menampilkan Unit.Instance dari measureRepeated. Jika hal ini menimbulkan ketidaknyamanan, laporkan bug, kami dapat memeriksanya kembali pada versi mendatang. (Ifb23e, b/204331495)

Versi 1.1.0-alpha10

27 Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha10 dirilis. Versi 1.1.0-alpha10 berisi commit ini.

Perubahan API

  • Backport StartupTimingMetric agar berfungsi kembali ke API 23. Implementasi baru ini juga dapat menangani reportFullyDrawn() dengan lebih baik untuk menunggu hingga konten yang terkait telah dirender. (If3ac9, b/183129298)
  • Menambahkan JvmOverloads ke beberapa metode MacrobenchmarkScope untuk pemanggil Java. (I644fe, b/184546459)
  • Menyediakan fungsi MacrobenchmarkRule.measureRepeated alternatif yang menggunakan Consumer<MacrobenchmarkScope> untuk penggunaan idiomatis dalam bahasa Java. (If74ab, b/184546459)

Perbaikan Bug

  • Perbaikan untuk rekaman aktivitas tidak dimulai cukup awal, dan tidak ada data metrik. Perbaikan ini diharapkan dapat memperbaiki pengecualian "Tidak dapat membaca metrik selama benchmark" yang disebabkan oleh library itu sendiri. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack telah diganti namanya menjadi FrameOverrun untuk memperjelas artinya - berapa banyak frame yang melebihi alokasi waktunya. (I6c2aa, b/203008701)

Versi 1.1.0-alpha09

13 Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 dirilis. Versi 1.1.0-alpha09 berisi commit ini.

Perbaikan Bug

Versi 1.1.0-alpha08

29 September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha08 dirilis. Versi 1.1.0-alpha08 berisi commit ini.

Perubahan API

  • Mengaktifkan macrobenchmark scroll untuk dijalankan kembali ke API 23 (If39c2, b/183129298)
  • Menambahkan jenis metrik sampel baru ke output UI dan JSON, yang berfokus pada persentil beberapa sampel per iterasi. (I56247, b/199940612)
  • Beralih ke metrik floating point di seluruh library benchmark (dipotong di UI Studio). (I69249, b/197008210)

Versi 1.1.0-alpha07

1 September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha07 dirilis. Versi 1.1.0-alpha07 berisi commit ini.

Perubahan API

  • Menaikkan API min ke 21 untuk mencerminkan API level terendah yang diinginkan agar didukung di masa mendatang. API min yang saat ini didukung akan terus disampaikan melalui RequiredApi(), dan saat ini adalah 29 (I440d6, b/183129298)

Perbaikan Bug

  • Memperbaiki ProfileInstaller agar mempermudah aplikasi yang menggunakan profil dasar pengukuran untuk menjalankan MacroBenchmarks menggunakan CompilationMode.BaselineProfile. (I42657, b/196074999) CATATAN: perlu update ke androidx.profileinstaller:profileinstaller:1.1.0-alpha04 atau yang lebih tinggi.
  • Benchmark StartupMode.COLD + CompilationMode.None sekarang lebih stabil. (I770cd, b/196074999)

Versi 1.1.0-alpha06

18 Agustus 2021

androidx.benchmark:benchmark-*:1.1.0-alpha06 dirilis. Versi 1.1.0-alpha06 berisi commit ini.

Perubahan API

  • Menambahkan argumen instrumentasi androidx.benchmark.iterations agar memungkinkan penggantian jumlah iterasi secara manual saat menguji/membuat profil secara lokal. (6188be, b/194137879)

Perbaikan Bug

  • Beralih ke Simpleperf sebagai profiler sampel default di API 29+. (Ic4b34, b/158303822)

Masalah Umum

  • CompilationMode.BaselineProfile sedang dalam proses. Sebaiknya Anda tidak menggunakannya untuk menentukan seberapa baik profil untuk saat ini.

Versi 1.1.0-alpha05

4 Agustus 2021

androidx.benchmark:benchmark-*:1.1.0-alpha05 dirilis. Versi 1.1.0-alpha05 berisi commit ini.

1.1.0-alpha04 dibatalkan sebelum dirilis karena error sporatik. b/193827052

Perubahan API

  • startActivityAndWait dialihkan untuk memanggil peluncuran melalui am start, yang mengurangi waktu setiap iterasi pengukuran sekitar 5 detik, dengan mengorbankan penghentian dukungan pada parcelable intent. (I5a6f5, b/192009149

Perbaikan Bug

  • Mengurangi agresivitas deteksi throttle termal, dan mengomputasi ulang dasar pengukuran jika throttle sering terdeteksi. (I7327b)
  • Memperbaiki FrameTimingMetric agar berfungsi di Android S beta (Ib60cc, b/193260119)
  • Menggunakan EmptyActivity untuk mengeluarkan aplikasi target dari status paksa berhenti untuk mendukung CompilationMode.BaselineProfile dengan lebih baik. (Id7cac, b/192084204)
  • Ekstensi file detail migrasi telah diubah ke .perfetto-trace agar sesuai dengan standar platform. (I4c236, b/174663039)
  • StartupTimingMetric sekarang menampilkan metrik "FullDrawnMs" untuk mengukur waktu hingga aplikasi Anda selesai dirender. Untuk menentukan metrik ini bagi aplikasi Anda, panggil Activity.reportFullyDrawn ketika konten awal sudah siap, seperti saat item daftar awal dimuat dari DB atau jaringan. (Metode reportFullyDrawn tersedia tanpa pemeriksaan versi build pada ComponentActivity). Perhatikan bahwa pengujian harus berjalan cukup lama untuk menangkap metrik (startActivityAndWait tidak menunggu reportFullyDrawn). (If1141, b/179176560)
  • Mengurangi biaya penambahan metadata UI ke pelacakan hingga 50+ mdtk (Ic8390, b/193923003)
  • Frekuensi polling meningkat secara drastis saat berhenti melakukan pelacakan, yang dapat mengurangi hal-hal seperti runtime benchmark startup sebesar 30+% (Idfbc1, b/193723768)

Versi 1.1.0-alpha03

16 Juni 2021

androidx.benchmark:benchmark-*:1.1.0-alpha03 dirilis. Versi 1.1.0-alpha03 berisi commit ini.

Fitur Baru

Perbaikan Bug

  • Contoh kode Gradle untuk menekan error benchmark telah diperbarui untuk menggunakan API yang tidak dihentikan dengan sintaksis yang juga mendukung pengguna .gradle.kts.

    Misalnya,

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

Versi 1.1.0-alpha02

18 Mei 2021

Benchmark versi 1.1.0-alpha02 menghadirkan komponen penting untuk benchmarking - Macrobenchmark. Selain benchmark yang memungkinkan Anda mengukur loop CPU, macrobenchmark juga memungkinkan Anda mengukur interaksi seluruh aplikasi seperti startup dan scrolling, serta menangkap rekaman aktivitas. Untuk informasi lebih lanjut, lihat dokumentasi library.

androidx.benchmark:benchmark-*:1.1.0-alpha02 dirilis. Versi 1.1.0-alpha02 berisi commit ini.

Fitur Baru

Artefak macrobenchmark ditambahkan (androidx.benchmark:benchmark-macro-junit4 dan androidx.benchmark:benchmark-macro)

  • Merekam metrik performa startup, scrolling, atau animasi dari aplikasi, baik secara lokal maupun dalam CI
  • Merekam dan memeriksa rekaman aktivitas dari dalam Android Studio

Perbaikan Bug

  • Mengatasi masalah izin shell dengan direktori output di Android 12 (Catatan - mungkin memerlukan update Plugin Android Gradle ke 7.0.0 canary dan Android Studio ke Arctic Fox (2020.3.1) untuk terus mengambil file output di perangkat yang terpengaruh). (Icb039)
  • Mendukung penyimpanan konfigurasi dalam cache di BenchmarkPlugin (6be1c1, b/159804788)
  • Menyederhanakan output file - diaktifkan secara default, dalam direktori yang tidak memerlukan requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Memperbaiki peringatan logcat pencetakan library tentang tidak menemukan thread JIT pada versi platform yang tidak memilikinya. (I9cc63, b/161847393)
  • Perbaikan untuk frekuensi maksimum perangkat membaca. (I55c7a)

Versi 1.1.0-alpha01

10 Juni 2020

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01, dan androidx.benchmark:benchmark-junit4:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Fitur Baru Versi 1.1

  • Metrik Alokasi - Benchmark kini menjalankan fase tambahan setelah pemanasan dan pengaturan waktu, yang merekam penghitungan alokasi. Alokasi dapat menyebabkan masalah performa pada versi platform lama (140 nd di O menjadi 8 nd di M - diukur di Nexus5X, dengan frekuensi cpu terkunci). Metrik ini ditampilkan di output konsol Android Studio, serta di
  • Dukungan pembuatan profil - Anda kini dapat mengambil data pembuatan profil untuk menjalankan benchmark, guna memeriksa alasan kode Anda berjalan dengan lambat. Benchmark mendukung pengambilan data, baik dengan pelacakan metode, atau pengambilan sampel metode dari ART. File ini dapat diperiksa dengan Profiler di dalam Android Studio menggunakan File > Open.
  • Plugin Benchmark Gradle kini menyediakan setelan default untuk penyiapan yang lebih sederhana:
    • testBuildType ditetapkan untuk dirilis secara default, guna menghindari penggunaan dependensi dengan cakupan kode bawaan. BuildType rilis juga dikonfigurasi sebagai buildType default, yang memungkinkan Android Studio otomatis memilih varian build yang tepat saat membuka project untuk pertama kalinya. (b/138808399)
    • signingConfig.debug digunakan sebagai konfigurasi penandatanganan default (b/153583269)

** Perbaikan Bug **

  • Mengurangi overhead transisi pemanasan secara signifikan, ketika pengukuran pertama untuk setiap benchmark lebih tinggi dari pengukuran lainnya secara buatan. Masalah ini lebih jelas dalam benchmark yang sangat kecil (1 mikrodetik atau kurang). (b/142058671)
  • Memperbaiki error InstrumentationResultParser yang ditampilkan untuk setiap benchmark saat dijalankan dari command line. (I64988, b/154248456)

Masalah Umum

  • Command line, pemanggilan Gradle pada Benchmark tidak menampilkan hasil secara langsung. Anda dapat mengatasi masalah ini dengan menjalankan Studio, atau mengurai file output JSON untuk hasil.
  • Pelaporan Benchmark gagal mengambil laporan dari perangkat yang menginstal aplikasi dengan applicationId yang diakhiri dengan "android" atau "download" (tidak peka huruf besar/kecil). Pengguna yang memiliki masalah ini harus mengupgrade Plugin Android Gradle ke 4.2-alpha01 atau yang lebih baru.

Versi 1.0.0

Benchmark Versi 1.0.0

20 November 2019

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0, dan androidx.benchmark:benchmark-junit4:1.0.0 dirilis tanpa perubahan dari versi 1.0.0-rc01. Versi 1.0.0 berisi commit ini.

Fitur utama 1.0.0

Library Benchmark memungkinkan Anda menulis benchmark performa kode aplikasi dan mendapatkan hasilnya dengan cepat.

Hal ini mencegah masalah konfigurasi build dan runtime serta menstabilkan performa perangkat untuk memastikan bahwa pengukuran dilakukan secara akurat dan konsisten. Jalankan benchmark secara langsung di Android Studio, atau dalam Continuous Integration untuk mengamati performa kode dari waktu ke waktu, dan untuk mencegah regresi.

Fitur utama mencakup:

  • Stabilisasi jam
  • Penetapan prioritas thread otomatis
  • Dukungan untuk pengujian performa UI, seperti dalam Contoh RecyclerView
  • Perulangan dan pemanasan yang sensitif terhadap JIT
  • Output benchmark JSON untuk pascapemrosesan

Versi 1.0.0-rc01

23 Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01, dan androidx.benchmark:benchmark-junit4:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit ini.

Fitur baru

  • Menambahkan perekaman aktivitas systrace ke benchmark

Perbaikan bug

  • Memperbaiki masalah ketidakstabilan metrik dengan JIT yang tidak dapat diselesaikan sebelum pemanasan karena pembatalan prioritas (b/140773023)
  • Direktori output JSON terpadu di Plugin Android Gradle 3.5 dan 3.6

Versi 1.0.0-beta01

9 Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01, dan androidx.benchmark:benchmark-junit4:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Fitur baru

  • Menjalankan pembersihan sampah memori sebelum pemanasan untuk mengurangi tekanan memori dari satu benchmark agar disebarkan ke benchmark berikutnya (b/140895105)

Perbaikan bug

  • Menambahkan dependensi androidx.annotation:android-experimental-lint sehingga kode Java akan menghasilkan error lint dengan benar ketika API eksperimental tidak digunakan, mirip dengan yang diberikan oleh anotasi eksperimental Kotlin untuk pemanggil Kotlin.
  • Penggunaan argumen instrumentasi additionalTestOutputDir kini dideteksi dengan benar untuk output di Plugin Android Gradle 3.6, untuk mengetahui kapan AGP akan menangani penyalinan data.
  • Memperbaiki frekuensi jam yang tidak terdeteksi di JSON agar mencetak -1 dengan benar (b/141945670).

Versi 1.0.0-alpha06

18 September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit ini.

Fitur baru

  • Menambahkan pemeriksaan untuk kesalahan penggunaan paket lama bagi runner pengujian, yang kini memberikan pesan error yang lebih bermanfaat

Perubahan API

  • ExperimentalAnnotationReport anotasi eksperimental kini sudah beralih ke publik dengan benar. Penggunaan API BenchmarkState#report eksperimental kini mewajibkan anotasi ini

Versi 1.0.0-alpha05

5 September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha05 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perubahan API

  • API BenchmarkState.reportData kini ditandai sebagai eksperimental

Perbaikan bug

  • Perbaikan untuk skrip penguncian jam, yang sebelumnya gagal di perangkat yang tidak memiliki utilitas shell cut atau expr.
  • Memperbaiki masalah tugas ./gradlew lockClocks yang berhenti bekerja di perangkat yang telah di-root dengan versi lama utilitas su, yang tidak mendukung tanda -c.

Versi 1.0.0-alpha04

7 Agustus 2019

androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha04 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Dokumentasi baru juga telah ditambahkan untuk mengetahui cara menggunakan library Benchmark tanpa Gradle, baik untuk penggunaan dengan sistem build yang berbeda (seperti Bazel atau Buck) maupun saat menjalankan library ini di CI. Untuk informasi selengkapnya, lihat Mem-build benchmark tanpa Gradle dan Menjalankan benchmark dalam Continuous Integration.

Fitur baru

  • Plugin Gradle
    • Cakupan pengujian kini dinonaktifkan secara otomatis, dan AndroidBenchmarkRunner ditetapkan secara default (b/138374050)
    • Menambahkan dukungan untuk salinan data berbasis AGP baru, saat menentukan benchmark dan saat menggunakan AGP 3.6+
  • Penambahan format JSON
    • Menghasilkan output total waktu pengujian benchmark (b/133147694)
    • Benchmark @Parameterized yang menggunakan string nama (misalnya @Parameters(name = "size={0},depth={1}")) kini menghasilkan output nama parameter dan nilai per benchmark dalam output JSON (b/132578772)
  • Mode Dry Run (b/138785848)
    • Menambahkan mode "dry run" untuk menjalankan setiap loop benchmark sekali saja, guna memeriksa apakah ada error/fungsi yang terhenti tanpa merekam pengukuran. Hal ini bisa bermanfaat untuk, misalnya, menjalankan benchmark dengan cepat saat presubmit untuk memeriksa apakah ada kerusakan.

Perubahan API

  • Struktur modul telah diubah, dengan memisahkan library (b/138451391)
    • benchmark:benchmark-junit4 berisi class dengan dependensi JUnit: AndroidBenchmarkRunner, dan BenchmarkRule, yang keduanya telah dialihkan ke paket androidx.benchmark.junit4
    • benchmark:benchmark-common berisi logika lainnya, termasuk BenchmarkState API
    • Pemisahan ini memungkinkan library mendukung benchmark tanpa JUnit4 API di masa mendatang
  • Peringatan konfigurasi sekarang diperlakukan sebagai error, dan akan menyebabkan error pada pengujian (b/137653596)
    • Hal ini dilakukan untuk meningkatkan akurasi pengukuran, terutama di CI
    • Error ini dapat dikembalikan menjadi peringatan dengan argumen instrumentasi. Contoh: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Perbaikan bug

  • Error saat menulis ke penyimpanan eksternal pada perangkat Android Q memberikan pesan yang lebih deskriptif, disertai saran cara menyelesaikan masalah tersebut
  • Layar otomatis menyala selama proses benchmark berlangsung, bukannya menggagalkan proses saat layar mati

Kontribusi eksternal

  • Terima kasih kepada Sergey Zakharov atas kontribusi peningkatan output JSON dan perbaikan untuk masalah layar mati!

Versi 1.0.0-alpha03

2 Juli 2019

androidx.benchmark:benchmark:1.0.0-alpha03 dan androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Menunjukkan durasi tidur karena throttling termal per benchmark dalam laporan JSON lengkap

Perbaikan bug

  • Plugin Gradle tidak perlu lagi diterapkan setelah plugin Android dan blok Android
  • Menambahkan dukungan untuk laporan benchmark pada perangkat Android 10 yang menggunakan penyimpanan terbatas

Versi 1.0.0-alpha02

6 Juni 2019

androidx.benchmark:1.0.0-alpha02 dan androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perlu diperhatikan bahwa kami memperlakukan skema JSON sebagai API. Kami akan mengikuti batasan stabilitas yang sama dengan API lainnya: stabil (dengan pengecualian yang sangat jarang) setelah dalam versi beta, dan ditetapkan dalam rilis final, dengan hanya beberapa penambahan pada rilis kecil dan perubahan/penghapusan dalam rilis besar.

Perubahan API

  • Merombak skema JSON. Perubahan lebih lanjut pada skema JSON kemungkinan dibatasi pada penambahan:

    • Mengatur ulang struktur objek hasil untuk mendukung grup metrik tambahan di masa mendatang (b/132713021)
    • Menambahkan informasi konteks pengujian, seperti informasi perangkat dan build serta apakah jam dikunci, ke objek tingkat teratas (b/132711920)
    • Metrik waktu sekarang memiliki 'ns' dalam namanya (b/132714527)
    • Menambahkan statistik tambahan per metrik yang dilaporkan (maksimum, median, minimum), dan menghapus statistik ringkasan 'nanos' yang disederhanakan (b/132713851)
  • Menghapus output XML (b/132714414)

  • Deteksi throttle termal dihapus dari BenchmarkState.reportData API (b/132887006)

Perbaikan bug

  • Memperbaiki ./gradlew lockClocks yang tidak menempel pada beberapa perangkat OS terbaru (b/133424037)
  • Deteksi throttle dinonaktifkan untuk emulator (b/132880807)

Versi 1.0.0-alpha01

7 Mei 2019

androidx.benchmark:benchmark:1.0.0-alpha01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.