Benchmark

Mengukur performa kode Anda secara akurat dalam Android Studio.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
1 September 2021 1.0.0 - - 1.1.0-alpha07

Mendeklarasikan dependensi

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

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Groovy

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

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

Kotlin

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

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

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

Untuk menggunakan plugin ini, sertakan classpath berikut dalam file build.gradle level teratas:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath "androidx.benchmark:benchmark-gradle-plugin:1.0.0"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath("androidx.benchmark:benchmark-gradle-plugin:1.0.0")
    }
}

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

Groovy

apply plugin: "androidx.benchmark"

Kotlin

plugins {
    id("androidx.benchmark")
}

Macrobenchmark

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

Groovy

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

Kotlin

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

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.1.0

Versi 1.1.0-alpha07

1 September 2021

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

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 berikut 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 berikut 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 tracing, 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 berikut 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 berikut.

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 berikut.

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 tolok ukur, 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 tolok ukur lebih tinggi dari pengukuran lainnya secara buatan. Masalah ini lebih jelas dalam tolok ukur yang sangat kecil (1 mikrodetik atau kurang). (b/142058671)
  • Memperbaiki error InstrumentationResultParser yang ditampilkan untuk setiap tolok ukur 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 berikut 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 berikut.

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 berikut.

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 berikut.

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 tolok ukur 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 tolok ukur 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 penyempurnaan 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 tolok ukur 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.