Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Benchmark

Mengukur performa kode Anda secara akurat dalam Android Studio.
Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
10 Juni 2020 1.0.0 - - 1.1.0-alpha01

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:

    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 menetapkan 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:

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

Lalu terapkan plugin ke file build.gradle modul benchmark Anda

apply plugin: "androidx.benchmark"

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau memiliki ide untuk meningkatkan kualitas library ini. Harap lihat masalah yang ada di library ini sebelum Anda membuat laporan baru. Anda dapat memberikan suara pada masalah yang ada dengan mengklik tombol bintang.

Membuat masalah baru

Lihat dokumentasi Issue Tracker untuk mengetahui informasi selengkapnya.

Versi 1.1.0

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)
    • Tolok ukur @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, untuk 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.