Benchmark
Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
1 Juni 2022 | 1.0.0 | 1.1.0-rc03 | - | - |
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:
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-rc03" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.1.0-rc03") }
Microbenchmark
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 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.0.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.0.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.
Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.
Versi 1.1.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
Menghindari penginstalan ulang paket target pada setiap iterasi benchmark. ( aosp/2093027, b/231976084)
Menghapus delay
300ms
daripressHome()
. (aosp/2086030, b/231322975)Meningkatkan kecepatan iterasi Macrobenchmark dengan mengoptimalkan perintah Shell yang digunakan di balik layar. (aosp/2086023, b/231323582)
Dukungan untuk Perangkat Gradle Terkelola saat membuat Profil Baseline dengan Macrobenchmark. (aosp/2062228, b/228926421)
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 membuatBaselineProfiles
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 dariCompilation.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
- Menghentikan paket setelah melewati penginstalan profil saat menggunakan
CompilationMode.None
. (aosp/1991373) - Memperbaiki masalah Macrobenchmarks yang tidak dapat mengumpulkan metrik startup saat menggunakan
StartupMode.COLD
. (aosp/2012227 b/218668335)
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 menggunakanandroidx.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 bloksetup
karena fungsi ini sama denganprofileBlock
. (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
atauandroidx.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 sebagaiNone
(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
- Mendukung penurunan cache halaman Kernel tanpa root di API 31/S+ yang akan meningkatkan akurasi peluncuran StartupMode.COLD. (Iecfdb, b/200160030)
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 menggunakanCompilationMode.BaselineProfile
. (I42657, b/196074999) CATATAN: perlu update keandroidx.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 mendukungCompilationMode.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
- Menambahkan
CompilationMode.BaselineProfile
baru untuk mendukung profil yang diinstal menggunakan library Jetpack ProfileInstaller. (aosp/1720930)
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
atauexpr
. - 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+
- Cakupan pengujian kini dinonaktifkan secara otomatis, dan
- 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
, danBenchmarkRule
, yang keduanya telah dialihkan ke paketandroidx.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.