Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Benchmark

Library Benchmark memudahkan Anda menentukan tolok ukur kode berbasis Java atau Kotlin dari Android Studio. Library ini menangani pemanasan, mengukur performa kode, dan menampilkan hasil tolok ukur ke konsol Android Studio.

Untuk mengetahui informasi tentang penggunaan library Benchmark di aplikasi atau library Anda, lihat kode aplikasi Benchmark.

Update Terbaru Rilis Stabil Saat Ini Kandidat Rilis Berikutnya Rilis Beta Rilis Alfa
20 November 2019 1.0.0 - - -

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 yang baru. Anda dapat memberikan suara pada masalah yang ada dengan mengklik tombol bintang.

Membuat masalah baru

Baca dokumentasi Issue Tracker untuk mengetahui informasi selengkapnya.

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.