Benchmark
Update Terbaru | Rilis Stabil | Kandidat Rilis | Rilis Beta | Rilis Alfa |
---|---|---|---|---|
11 Desember 2024 | 1.3.3 | - | - | 1.4.0-alpha06 |
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.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.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.3.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.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.3.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.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.4
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")
diPerfettoTraceProcessor.Session.query()
, karena sorotan/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
,-Xtype-enhancement-improvements-strict-mode
(I46810, b/326456246) - Memperbaiki
ArtMetric
untuk melaporkan pemuatan class (bukan inisialisasi), dan meningkatkan kualitas dokumen untuk memperjelas perilaku runtime. (I9915c) - Di Android Multi-pengguna, jalankan perintah sebagai root hanya di perangkat yang 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()
akan memiliki performa yang tidak konsisten dan tidak mewakili performa kasus terburuk awal. Hal ini berfungsi untuk mengatasi perubahan platform yang memungkinkan status kompilasi ARTverify
mengompilasi aplikasi secara sebagian (hanya memengaruhi pemuatan class) segera setelah peluncuran pertama. (Ie48d0) - Memperbaiki masalah saat rekaman aktivitas (terutama yang singkat) dapat diambil yang 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 langsungPerfettoSession.query
lainnya dapat menerapkan perilaku yang sama ini dengan mengubahprocess.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) Mengaktifkan pembuatan Profil Dasar Pengukuran, dan benchmark pada aplikasi yang diinstal ke pengguna sekunder, misalnya aplikasi apa pun di perangkat Android Auto headless. Dukungan ini telah diuji dalam beberapa skenario, tetapi beri tahu kami jika ada bug jika tidak berfungsi untuk Anda. (I9fcbe, b/356684617, b/373641155)
Perbaikan Bug
isProfileable
kini selalu diganti dalam build benchmark, danisDebuggable
kini juga selalu diganti dalam build benchmark dannonMinified
(perekaman profil dasar pengukuran). (I487fa, b/369213505)- Memperbaiki deteksi kompilasi di beberapa perangkat fisik sebelum API 28 - memengaruhi json
context.compilationMode
, serta perilakuandroidx.benchmark.requireAot=true
(yang tidak lagi salah ditampilkan) (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 RunTime Android umum. Merekam jumlah dan total durasi JIT, inisialisasi class (jika tersedia), dan verifikasi class. Selain itu, mengubahCaptureInfo
untuk menyertakan versi mainline ART opsional dengan default. (I930f7) - Tambahkan
coefficientOfVariation
ke output JSON Benchmark untuk menunjukkan stabilitas dalam benchmark yang dijalankan. (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 perilakuStartupMode.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
,-Xtype-enhancement-improvements-strict-mode
(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
danunlockClocks
ke project benchmark, bukan tersedia di level teratas. Perubahan ini diperlukan karena sayangnya tidak ada cara untuk mendaftarkannya sebagai tindakan tingkat atas 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 terduga untuk memiliki 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 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 konfigurasikan 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 - Analisis Peluncuran Aplikasi
- Versi awal insight startup 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, dengan peningkatan pada dokumentasi dan ekstensi yang akan mengikuti, tetapi masukan akan diterima.
Fitur Baru
- Menambahkan properti gradle
androidx.baselineprofile.suppressWarnings
untuk menyembunyikan semua peringatan profil dasar pengukuran. (314153a) - Metrik microbench kini ditampilkan di rekaman aktivitas Perfetto sebagai penghitung. (3214854)
- Menambahkan skrip eksperimental untuk menonaktifkan jit (memerlukan root / memulai ulang runtime), dan mereset status performa/pengujian perangkat. Saat ini, tugas ini tidak dipublikasikan sebagai tugas gradle. (7c3732b)
- Menambahkan argumen benchmark untuk melewati pengujian saat berjalan di emulator. Jika build
automaticGenerationDuring
diaktifkan, benchmark juga akan memicu pembuatan profil dasar pengukuran. Tindakan ini akan gagal jika emulator digunakan. Dengan argumen baruskipBenchmarksOnEmulator
, kita dapat melewati pengujian. (0c2ddcd) - Mengubah logika pengaktifan peristiwa performa agar berjalan di API 23+ (2550048)
Perubahan API
- Argumen
PerfettoConfig
eksperimental yang ada keMacrobenchmarkRule.measureRepeated()
dipindahkan ke objekExperimentalConfig
baru.
Perbaikan Bug
- Meningkatkan jumlah percobaan ulang
lockClocks.sh
(99e9dac) - Jangan membuat jenis build
nonMinified
dan benchmark jika sudah ada. Karena bug, meskipun jenis buildnonMinified
dan benchmark ada, jenis build tersebut akan dibuat ulang. (e75f0a5) - Mengabaikan slice yang tidak diakhiri dari hasil
TraceSectionMetric
. (a927d20) - Meningkatkan pemeriksaan emulator untuk mempertimbangkan awalan
sdk_
. (1587de8) - Perlakukan paket yang tidak berjalan sebagai dihapus di
FrameTimingGfxInfoMetric
. (35cc79c) - Memperbaiki
androidx.benchmark.cpuEventCounter
yang menghasilkan nilai yang rusak untuk peristiwa non-Perintah. (06edd59) - Memperbaiki
resumeTiming/runWithTimingDisabled
agar mengikuti urutan prioritas metrik, dan secara signifikan mengurangi dampak jeda/lanjutkan metrik prioritas lebih rendah pada hasil metrik prioritas lebih tinggi. Misalnya, jika menggunakan penghitung performa CPU melalui argumen instrumentasicpuEventCounter.enable
, timeNs tidak lagi dikurangi secara signifikan saat jeda/lanjutkan terjadi. (5de0968)
Versi 1.3
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 di dalamnya (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 konfigurasikan 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.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 menyembunyikan semua peringatan profil dasar pengukuran (I7c36e, b/349646646) - Memperbaiki Plugin Gradle Profil Dasar Pengukuran untuk menggunakan
nonMinified…
danbenchmark…
yang sudah ada jika dibuat oleh aplikasi, bukan membuat wrapper. (Ia8934, b/361370179) - Memperbaiki
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
saatautomaticGenerationDuringBuild
diaktifkan di emulator. Argumen baru digunakan untuk melewati pengujian. (If3f51, b/355515798) - Pengompresian microbenchmark - mempertahankan subclass
org.junit.runner.notification.RunListener
di proguard library benchmark (Ic8ed5, b/354264743) - Memperbaiki
TraceSectionMetric
untuk mengabaikan slice yang tidak diakhiri. Sebelumnya, nilai 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 di microbenchmark saat berjalan di sebagian besar perangkat
- Pelacakan metode berjalan sebagai fase terpisah, setelah pengukuran - hal ini memungkinkan pengukuran dan pelacakan metode yang akurat menjadi output dari satu benchmark yang dijalankan
- Pelacakan metode di beberapa versi Android OS dan ART akan memengaruhi fase pengukuran berikutnya - pada versi ini, pelacakan metode dinonaktifkan secara default dan peringatan 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. - Rekaman aktivitas metode dilewati jika diperkirakan akan melampaui batas waktu penghindaran ANR. Tetapkan
androidx.benchmark.profiling.skipWhenDurationRisksAnr
ke salah (false) untuk menonaktifkan perilaku ini (tidak direkomendasikan untuk menjalankan CI, karena ANR dapat menyebabkan masalah dalam menjalankan CI yang lama).
- Menambahkan
- Minifikasi
- Menyematkan aturan proguard untuk meningkatkan microbenchmarking dengan mengaktifkan minifikasi
- Pengompresian/R8 dalam modul library memerlukan AGP 8.3, dan dapat diaktifkan melalui
android.buildTypes.release.androidTest.enableMinification
dibuild.gradle
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 root di sebagian besar versi platform), akses melaluiInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(dapat disetel ketrue
), danandroidx.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
- Fitur penghitung peristiwa CPU eksperimental (metrik dari
Perubahan MACRObenchmark sejak versi 1.2.0
- Perombakan pelacakan metode untuk macrobenchmark.
- Sekarang, rekaman aktivitas metode dicakup dalam 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 untukmeasureBlocks
yang tidak memulai ulang proses target - Memperbaiki penghapusan trace metode di macrobenchmark, sehingga trace metode harus sepenuhnya diambil dan valid, bahkan di perangkat yang lebih lambat. (I6349a, b/329904950)
- Sekarang, rekaman aktivitas metode dicakup dalam durasi
- Men-dump profil ART dengan benar selama setiap iterasi
warmUp
saat proses dihentikan sehingga pengukuranCompilationMode.Partial(warmup=N)
lebih akurat. (I17923) - Pesan kegagalan siaran Shader Drop
- Menambahkan saran proses debug untuk menghapus pesan kegagalan siaran shader
- Menambahkan dua argumen instrumentasi untuk mengganti perilaku penghapusan shader guna mengatasi error saat menjalankan benchmark aplikasi tanpa
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: dapat digunakan untuk melewati semua penghapusan shader (termasuk yang dilakukan dalam peluncuranStartupMode.Cold
), terutama saat menjalankan benchmark aplikasi yang belum menggunakan profileinstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: dapat digunakan untuk menoleransi kegagalan saat mencoba menghapus shader, misalnya saat menjalankan benchmark aplikasi tanpa profileinstaller 1.3 (I4f573)
- Menambahkan varian
MacrobenchmarkRule#measureRepeated
eksperimental yang menggunakanPerfettoConfig
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 agar aplikasi target menghapus profil ART (sebelumnya menunggu selama 500 md). (I85a50, b/316082056)
- Penggantian TraceSectionMetric
- Catatan: Perubahan
TraceSectionMetric
di bawah dapat memengaruhi output dalam penggunaan CI, dan dapat menyebabkan ketidakkontinuan, atau merusak penguraian - Jumlah kini menjadi default, karena sebagian besar penggunaan metrik ini adalah untuk peristiwa berulang, dan pertama-tama 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)
- Sekarang mendukung slice yang dibuat menggunakan
Trace.{begin|end}AsyncSection
.
- Catatan: Perubahan
- Metrik
- Daya - Menambahkan
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
, danPowerMetric.deviceSupportsPowerEnergy()
- Mengganti nama
Metric.getResult
menjadigetMeasurements
agar cocok 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 diam-diam), tetapi hanya membuatnya lebih mudah dipahami. Umumnya, peristiwa yang
Log.w()
dan gagal melaporkan metrik startup adalah peristiwa yang tidak memiliki peristiwa non-frame, pengecualian ditampilkan saat startup terdeteksi kecuali untuk informasi pengaturan waktu frame (dari slice UI/RT). (Id240f, b/329145809) - Menambahkan pengukuran
frameCount
keFrameTimingMetric
untuk membantu menemukan skenario saat pengukuran berubah karena jumlah frame yang dihasilkan berubah (animasi baru ditambahkan, masalah pembatalan validasi diperbaiki). (I1e5aa) - Memperjelas bahwa
frameOverrunMs
adalah metrik yang lebih disukai untuk pelacakan jika tersedia di dokumen, dan alasannya. (I18749, b/329478323) - Memperbaiki masalah saat frame yang tidak diakhiri di awal dan akhir rekaman aktivitas dapat disambungkan, yang akan salah melaporkan sebagai satu frame yang sangat panjang. (I39353, b/322232828)
- Meningkatkan error
FrameTimingMetric
saat frame tidak dihasilkan, dan selalu menampilkan link untuk dilacak saat penguraian metrik gagal untuk membantu mendiagnosis masalah. (I956b9) - Memperbaiki error di
FrameTimingMetric
yang gagal mengurai ID frame, terutama di perangkat OEM tertentu. (Ia24bc, b/303823815, b/306235276) - Mengurangi kekakuan pemeriksaan di
FrameMetrics
, dan menambahkan detail selengkapnya ke pesan error. (Iadede)
- Daya - Menambahkan
Perubahan plugin Gradle / perekaman Profil Dasar Pengukuran sejak versi 1.2.0
- Meningkatkan versi AGP maksimum yang direkomendasikan menjadi 9.0.0-alpha01.
- Pastikan tugas
mergeArtProfile
danmergeStartupProfile
selalu menunggu pembuatan profil dasar pengukuran. (I623d6, b/343086054) - Membuat profil dasar pengukuran dengan sukses 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 buildnonMinified
atau benchmark. (Ib8f05, b/324837887) - Perbaikan untuk menyertakan profil dasar pengukuran library di AAR sebelum AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- Memperbaiki URL output profil dasar pengukuran dan startup di akhir tugas pembuatan. (I802e5, b/313976958)
Perubahan signifikan lainnya sejak versi 1.2.0
- Rekaman aktivitas
- Mengurangi error EXITCODE 2 saat memulai perfetto dari error ke peringatan yang dicatat ke dalam log
- Mengaktifkan pelacakan AIDL secara default dalam benchmark(memerlukan API 28) (Ia0af2, b/341852305)
- Mengaktifkan pelacakan tag porter secara default di benchmark. Hal ini menangkap, misalnya, tracepoint wakelock. (Icfe44, b/286551983)
- Meningkatkan waktu tunggu awal perekaman aktivitas untuk menghindari error saat memulai perekaman aktivitas di perangkat yang lebih lambat (I98841, b/329145808)
- Menambahkan API
PerfettoTraceProcessor.Session.queryMetrics
API publik dengan varian JSON, textproto, dan proto biner (tidak didekode). Hal ini memungkinkan Anda membuat kueri metrik yang disertakan dalamTraceProcessor
(I54d7f, b/304038382) - Mengaktifkan mulai pemblokiran pada data rekaman aktivitas Perfetto untuk mengurangi risiko hilangnya data di awal rekaman aktivitas. 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 mainline Art (jika ada di perangkat,-1
jika tidak)context.build.id
- Sama dengan android.os.Build.IDcontext.build.version.codename
- Sama dengan android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
- sesuai dengan huruf pertama nama kode pra-rilis (termasuk pada build rilis) (Ie5020)
- Menambahkan daftar
profilerOutput
ke output JSON untuk memudahkan alat seputar rekaman aktivitas pembuatan profil (misalnya, Perfetto, Rekaman aktivitas 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)
- Tampilkan saat nama file lebih dari 200 karakter untuk menghindari error yang tidak jelas saat menulis atau memproses ulang file. (I4a5ab)
- Menambahkan informasi tambahan dalam konteks benchmark di output JSON:
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 yang rusak untuk peristiwa non-Perintah (I7386a, b/286306579) - Memperbaiki
resumeTiming
/runWithTimingDisabled
agar mengikuti urutan prioritas metrik, dan secara signifikan mengurangi dampak jeda/lanjutkan metrik prioritas lebih rendah pada hasil metrik prioritas lebih tinggi. Misalnya, jika menggunakan penghitung performa CPU melalui argumen instrumentasicpuEventCounter.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 hard thread utama dengan memindahkan konversi pengambilan sampel stack dari thread utama. (I487a8, b/342237318) - Menghapus garis besar manual 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 ke dalam log, 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
- Mengganti nama
MethodTracing.affectsMeasurementOnThisDevice
menjadiAFFECTS_MEASUREMENT_ON_THIS_DEVICE
untuk konsistensi. (I1bdfa) - Menambahkan API
BlackHole.consume()
eksperimental untuk mencegah penghapusan kode mati dalam microbenchmark. (If6812, b/286091643) - Microbenchmark kini akan ditampilkan 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 interferensi ini, dan dapat dideteksi saat runtime melaluiProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. (Iafb92, b/303660864)
Perbaikan Bug
- Meningkatkan versi agp maksimum yang direkomendasikan 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 mainline Art (jika ada di perangkat, -1 jika tidak)context.build.id
- Sama denganandroid.os.Build.ID
context.build.version.codename
- Sama denganandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
- sesuai dengan huruf pertama nama kode pra-rilis (bahkan pada build rilis) (Ie5020)
- Memperbaiki
StackSampling
agar mematuhiandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53) - Ubah dependensi macro->common menjadi
api()
, sehingga lebih mudah digunakan, misalnyaPerfettoTrace
danPerfettoConfig
. (Icdae3, b/341851833) - Pastikan tugas
mergeArtProfile
danmergeStartupProfile
selalu menunggu pembuatan profil dasar pengukuran. (I623d6, b/343086054) - Pertimbangkan status pengaktifan varian saat memutuskan apakah varian harus diaktifkan. (I5d19e, b/343249144)
- Meningkatkan 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 menghapus 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 menggunakanPerfettoConfig
kustom untuk perekaman aktivitas Perfetto yang sepenuhnya disesuaikan. Perhatikan bahwa konfigurasi yang salah dapat menyebabkan class Metrik bawaan gagal. (Idfd3d, b/309841164, b/304038384) - Mengganti nama
PowerMetric.deviceSupportsPowerEnergy
menjadiPowerMetric.deviceSupportsHighPrecisionTracking
agar lebih jelas (I5b82f) - Menambahkan
PowerMetric.deviceBatteryHasMinimumCharge()
danPowerMetric.deviceSupportsPowerEnergy()
untuk memungkinkan perubahan atau lewati 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 ke log info saat varian benchmark dinonaktifkan (I8a517, b/332772491)
- Mempermudah pengambilan pelacakan metode untuk Macrobenchmark yang dicakup dalam durasi
measureBlock()
yang sebenarnya. Sebelumnya, proses ini dimulai pada 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 JSON, textproto, dan proto biner (tidak didekode). Hal ini memungkinkan Anda membuat kueri metrik yang disertakan dalam TraceProcessor (I54d7f, b/304038382) - Menambahkan
profilerOutput
ke output JSON untuk memudahkan alat seputar rekaman aktivitas pembuatan profil (misalnya, Perfetto, rekaman aktivitas metode). (I05ddd, b/332604449) - Menambahkan tag daya untuk menjalankan benchmark Perfetto Config. Hal ini menangkap, misalnya, tracepoint wakelock. (Icfe44, b/286551983)
- Menambahkan argumen inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, dapat disetel ke salah untuk menghindari melewati pelacakan metode saat durasi yang diharapkan dapat menyebabkan ANR - sangat disarankan untuk dihindari dalam operasi CI. - Menambahkan argumen inst eksperimental
androidx.benchmark.profiling.perfCompare.enable
, tetapkan ini ke benar untuk menjalankan pengaturan waktu perbandingan antara fase pengukuran dan pembuatan profil. Berguna misalnya untuk 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 yang menyeluruh (I71f7b) - Menambahkan
TraceSectionMetric.Mode.Average
dan.Count
, serta mengurutkan ulang argumen sehingga argumen (mode) yang lebih umum berada di awal daftar argumen, sehingga mengurangi kebutuhan untuk menentukan nama parameter. (Ibf0b0, b/315830077, b/322167531) - Mengganti nama
Metric.getResult
menjadigetMeasurements
agar cocok dengan jenis nilai 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 buildnonMinified
atau benchmark. (Ib8f05, b/324837887) - Memperbaiki penghapusan trace metode di macrobenchmark, sehingga trace metode harus sepenuhnya diambil dan valid, bahkan di perangkat yang lebih lambat. (I6349a, b/329904950)
- Mengaktifkan mulai pemblokiran pada data rekaman aktivitas Perfetto untuk mengurangi risiko hilangnya data di awal rekaman aktivitas. 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)
- Memaksa pemisah ribuan ',' (koma) untuk konsistensi dalam output Studio, mengabaikan lokalitas perangkat (I3e921, b/313496656)
TraceSectionMetric
kini mendukung slice yang dibuat menggunakanTrace.{begin|end}AsyncSection
. (I91b32, b/300434906)- 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 diam-diam), tetapi hanya membuatnya lebih mudah dipahami. Umumnya, peristiwa yang
Log.w()
dan gagal melaporkan metrik startup adalah peristiwa yang tidak memiliki peristiwa non-frame, pengecualian ditampilkan saat startup terdeteksi kecuali untuk informasi pengaturan waktu frame (dari UI/RT slice). (Id240f, b/329145809) - Batalkan tugas dexopt latar belakang sebelum menjalankan Macrobenchmark untuk mengurangi gangguan. (I989ed)
- Menambahkan pengukuran
frameCount
keFrameTimingMetric
untuk membantu menemukan skenario saat pengukuran berubah karena jumlah frame yang dihasilkan berubah (animasi baru ditambahkan, masalah pembatalan validasi diperbaiki). (I1e5aa) - Memperjelas bahwa
frameOverrunMs
adalah metrik yang lebih disukai untuk pelacakan jika tersedia di 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 microbench melalui aturan proguard tersemat. 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 beban kerja. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
Perbaikan Bug
- Memperbaiki peringatan pelacakan metode agar berada di baris terpisah dari output microbench. (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
sehingga benchmark thread utama (misalnya, yang menyentuh View atau UI Compose) dapat menghindari pemicuan ANR, terutama selama suite besar di CI. (I5c86d) - Menambahkan
FrameTimingGfxInfoMetric
, implementasi alternatif eksperimentalFrameTimingMetric
dengan pengukuran yang berasal langsung dari platform, bukan diekstrak dari rekaman aktivitas Perfetto. (I457cb, b/322232828) - Menambahkan kemampuan untuk membuang profil ART selama setiap iterasi
warmUp
. (I17923) - Beberapa perubahan pada
TraceSectionMetric
API:- Menambahkan
Mode.Min
,Mode.Max
- Menambahkan argumen label untuk mengganti nama bagian sebagai label metrik
- Menambahkan nama mode ke output untuk memperjelas arti metrik
- Mengubah default menjadi jumlah, karena sebagian besar penggunaan metrik ini adalah untuk peristiwa berulang. Waspadai perubahan ini dalam penggunaan CI, karena dapat menyebabkan ketidakkontinuan atau merusak penguraian. (Ic1e82, b/301892382, b/301955938)
- Menambahkan
Perbaikan Bug
- Meningkatkan pesan error di 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 pengukuran dan 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 penghapusan shader guna mengatasi error saat menjalankan benchmark aplikasi tanpa
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: dapat digunakan untuk melewati semua penghapusan shader (termasuk yang dilakukan dalam peluncuranStartupMode.Cold
), terutama saat menjalankan benchmark aplikasi yang belum menggunakan profileinstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: dapat digunakan untuk menoleransi kegagalan saat mencoba menghapus shader, misalnya saat menjalankan benchmark aplikasi 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. (I6e768)
- Tampilkan saat nama file lebih dari 200 karakter untuk menghindari error yang tidak jelas saat menulis atau memproses file. (I4a5ab)
- Memperbaiki masalah saat frame yang tidak diakhiri di awal dan akhir rekaman aktivitas dapat disambungkan, yang akan salah melaporkan 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 pada 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
untuk aplikasi target guna menghapus profil ART (sebelumnya menunggu500 ms
). (I85a50, b/316082056) - Meningkatkan error
FrameTimingMetric
saat frame tidak dihasilkan, dan selalu menampilkan link untuk dilacak saat penguraian metrik gagal untuk membantu mendiagnosis masalah. (I956b9) - Memperbaiki error di
FrameTimingMetric
yang gagal mengurai ID frame, terutama di perangkat OEM tertentu. (Ia24bc, b/303823815, b/306235276) - Mengurangi kekakuan pemeriksaan di
FrameMetrics
, dan menambahkan detail selengkapnya 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 di varian benchmark. Juga memperbaiki
automaticGenerationDuringBuild
di library yang menyebabkan dependensi melingkar. (I28ab7, b/333024280) - Gunakan
am force-stop
untuk menghentikan aplikasi jika bukan aplikasi sistem seperti UI Sistem atau Peluncur. Tindakan ini memperbaiki benchmarkStartupMode.COLD
yang mengalami error dari "Package $package must not be running prior to cold start!" karena proses kill 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
- Log eksekusi akan menampilkan jalur file output profil dasar pengukuran sebagai URI file lokal (aosp/2843918, aosp/2853665, b/313976958)
Versi 1.2.1
15 November 2023
androidx.benchmark:benchmark-*:1.2.1
dirilis. Versi 1.2.1 berisi commit ini.
Fitur Baru
- Meningkatkan pesan error saat pengguna menonaktifkan varian pengujian (b/307478189)
- Menambahkan properti untuk mendukung integrasi pengujian run 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 yang disederhanakan dan diringkas dariBaselineProfileRule.collectBaselineProfile
API eksperimental sebelumnya- Cukup tentukan
packageName
, dan jalankan aplikasi Anda
- Cukup tentukan
- Untuk library yang membuat profil dasar pengukuran, Anda kini dapat memfilter aturan yang dibuat dalam kode (argumen
BaselineProfileRule.collect
), atau bahkan lebih sederhana 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 benchmark di Android 14+ sangat direkomendasikan jika Anda ingin mempertahankan status (seperti login pengguna) dalam hal yang diukur.
- Anda juga dapat mengatasinya 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
danMethodTracing
. - Menambahkan
androidx.benchmark.enabledRules
untuk mengizinkan pengujian aturan macrobenchmark vs profil dasar pengukuran pemfilteran runtime - Menambahkan argumen
androidx.benchmark.perfettoSdkTracing.enable
untuk mengaktifkan pelacakan dengan pelacakan-perfetto, misalnya pelacakan rekomposisi Compose. Perhatikan bahwa saat digunakan denganStartupMode.COLD
, pengaturan waktu akan terpengaruh secara signifikan karena library pelacakan dimuat dan diaktifkan selama startup aplikasi.
- Dukungan untuk argumen instrumentasi
Persyaratan
- Macrobenchmark kini memerlukan
ProfileInstaller
1.3.0 atau yang lebih baru di aplikasi target, untuk mengaktifkan pengambilan / reset profil, dan penghapusan cache shader.
- Macrobenchmark kini memerlukan
Metric API Eksperimental Baru
- Menambahkan
TraceSectionMetric
eksperimental, yang memungkinkan ekstraksi pengaturan waktu sederhana dari bloktrace("") {}
di aplikasi Anda, atau TraceMetric untuk memanfaatkan kemampuan kueri lengkap PerfettoTraceProcessor
. - Menambahkan
PowerMetric
eksperimental untuk mengambil informasi penggunaan daya - Menambahkan
MemoryCountersMetric
eksperimental untuk menghitung error halaman - Menambahkan API
PerfettoTraceProcessor
eksperimental, yang digunakan secara internal untuk mengekstrak metrik dari rekaman aktivitas Sistem (alias rekaman aktivitas Perfetto)
- Menambahkan
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 ripple di API 31+) (I747d2, b/279088460) - Memperbaiki error penguraian pada rekaman aktivitas > 64 MB (Ief831, b/269949822)
- Memperbaiki 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)
- Output file yang lebih baik, dengan error yang lebih jelas untuk direktori output yang tidak valid, dan default yang lebih aman
- Meningkatkan stabilitas
StartupMode.COLD
dengan secara konsisten menghapus cache shader (juga ditampilkan melaluiMacrobenchmarkScope.dropShaderCache
) - Memperbaiki fallback leanback untuk
startActivityAndWait
.
Microbenchmark
- Fitur
- Pembuatan profil dipindahkan ke fase terpisah, setelah metrik lainnya, sehingga satu pengujian yang dijalankan dapat menampilkan hasil pembuatan profil dan pengaturan waktu yang akurat.
- API Eksperimental
- Menambahkan API
MicrobenchmarkConfig
eksperimental untuk menentukan metrik kustom serta mengonfigurasi pelacakan dan pembuatan profil. Dapat digunakan untuk merekam rekaman aktivitas metode, atau merekam tracepoint (tetapi perhatikan overhead pelacakan). - Menambahkan API eksperimental untuk mengontrol
BenchmarkState
secara terpisah dariBenchmarkRule
, tanpa JUnit - Menambahkan data
PerfettoTrace
eksperimental untuk memungkinkan pengambilan rekaman aktivitas Perfetto, dengan konfigurasi kustom, terpisah dari API benchmark.
- Menambahkan API
- Perbaikan
- Solusi untuk mengatasi spasi kosong di awal yang tidak ada dalam output benchmark Android Studio.
- Memperbaiki masalah saat peringatan dapat gagal dicetak dalam output benchmark Android Studio.
- Memperbaiki error
SampledProfiling
di Android 13 (API 33) dan yang lebih tinggi. - Meningkatkan performa
dryRunMode
secara signifikan dengan melewati pelacakanIsolationActivity
dan Perfetto (Mode dry run hingga 10x lebih cepat pada versi OS 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 pelacakan Perfetto SDK gagal melakukan inisialisasi di Benchmark. (I6c878, b/286228781)
- Memperbaiki error OOM saat mengonversi format rekaman aktivitas metode ART -> 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 dari pengujian berparameter) dengan lebih lanjut membersihkan nama file output, 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
menjadiperfettoSdkTracing.enable
agar konsisten dengan nama artefak, dan referensi lainnya.fullTracing.enable
akan terus berfungsi sebagai penggantian. (I7cc00) - Tracepoint internal library benchmark (termasuk pelacakan fase/loop microbenchmark) kini akan muncul di penampil rekaman aktivitas sistem Studio, dan disusun bertingkat di bawah proses yang benar di Perfetto. (I6b2e7, b/293510459)
- Menghapus error NOT-PROFILEABLE macrobenchmark di API 31+, dan melewati pemeriksaan profileable di perangkat yang di-root eng/userdebug. (I2abac, b/291722507)
- Saat menggunakan Pengoptimalan Tata Letak Dex, aturan profil startup kini juga dianggap sebagai aturan profil dasar pengukuran. (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 microbench (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 pembaruan emulator, karena beberapa emulator baru-baru ini telah memperbaiki masalah ini. (I8c815, b/282191686)
- Buat
androidx.test.uiautomator:uiautomator:2.2.0
menjadiapi
, bukan dependensiimplementation
. (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 dalam 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 namaframeDurationCpuMs
. (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
BaselineProfileRule.collectBaselineProfile()
API telah diganti namanya menjadiBaselineProfileRule.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
denganMode.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 yang sepenuhnya kustom 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.collectStableBaselineProfile
API telah dihapus dancollectBaselineProfile
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 didryRunMode
untuk meningkatkan performa secara signifikan, karena ini adalah sebagian besar runtime. (Ie4f7d) - Dukungan untuk sampling stack panggilan di Macrobenchmark menggunakan argumen uji instrumentasi
androidx.benchmark.profiling.mode=StackSampling
danandroidx.benchmark.profiling.sampleFrequency
. (I1d13b, b/282188489) - Memperbaiki error saat menempatkan 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 saatRenderThread
sedang dianimasikan (misalnya, selama ripple). (I747d2, b/279088460) - Memperbaiki penguraian prosesor 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 startup mendatang (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 error 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 mempermudah pembuatan profil dasar pengukuran dan menyederhanakan alur kerja developer.
Perubahan API
- Menghapus dukungan pelacakan Perfetto di API 21 dan 22, yang mencakup Microbenchmark dan
PerfettoTrace
API eksperimental. Sebelum versi ini, koneksiUiAutomation
tidak dapat diandalkan di beberapa perangkat. (I78e8c) - Menambahkan API eksperimental publik untuk
PerfettoTraceProcessor
guna mengaktifkan konten pelacakan penguraian. Ini adalah langkah menuju metrik kustom 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
danBaselineProfileRule
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 instrumentasiandroidx.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 {}
danPerfettoTraceRule
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 benchmarkStartupMode.COLD
, karena shader sekarang dihapus secara konsisten setiap iterasi. Sebelumnya, kompilasiPartial
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 menggunakanprofileinstaller:1.3.0-alpha02
pada aplikasi target. Untuk perubahan API libraryProfileInstaller
, 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 metrikinflateMs
untuk total waktu dalam macrobenchmark yang dihabiskan untuk meng-inflate. Juga menghapus persyaratan API 29 karenaTraceSectionMetric
berfungsi bersama denganandroidx.tracing.Trace
kembali ke API level yang lebih rendah, dengan penggunaanforceEnableAppTracing
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()
tempatStartupMode.COLD
tidak akan menghentikan proses target setelahsetupBlock
. SekarangsetupBlock
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
atauCompilationMode.Partial(warmupIterations)
di perangkat yang tidak di-root, Anda juga harus mengupdate aplikasi target agar dapat menggunakanandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Tindakan ini memungkinkan flush profil ke disk dengan benar, sehingga dapat dikompilasi/diekstrak.
Perbaikan Bug
- Memperbaiki error
SampledProfiling
di API 33+. (I40743, b/236109374)
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 bahwaFrameOverrun
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 melaluiMacrobenchmarkScope.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 dariBenchmarkRule
/JUnit4
. (Id478f, b/228489614)
Perbaikan Bug
- Menambahkan fallback Leanback untuk
startActivityAndWait
. (01ed77, b/242899915)
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
untukMacrobenchmarkScope.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 membuatBaselineProfiles
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
danTotalEnergyMetric
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 dari1.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
Dukungan untuk Jetpack Macrobenchmark, yang memungkinkan Anda mengukur interaksi seluruh aplikasi seperti startup dan scrolling, memberikan kemampuan untuk merekam aktivitas & mengukur bagian rekaman aktivitas.
Dukungan untuk Profil Baseline
CompilationMode.Partial
untuk mengukur keefektifan Profil Baseline.@BaselineProfileRule
untuk otomatis membuat profil Baseline untuk perjalanan penting pengguna tertentu.
Dukungan untuk metrik Alokasi & pembuatan profil selama Microbenchmark dijalankan.
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 Dasar Pengukuran 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.