Metrik adalah jenis informasi utama yang diekstrak dari benchmark Anda. Metrik
diteruskan ke fungsi measureRepeated
sebagai List
, yang memungkinkan Anda menentukan
beberapa metrik terukur sekaligus. Setidaknya satu jenis metrik diperlukan
agar benchmark dapat dijalankan.
Cuplikan kode berikut menangkap waktu render frame dan metrik bagian rekaman aktivitas kustom.
Kotlin
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
Dalam contoh ini, RV CreateView
dan RV OnBindView
adalah ID blok yang dapat dilacak dan ditentukan dalam
RecyclerView
. Kode sumber untuk metode createViewHolder()
adalah contoh cara menentukan blok
yang dapat dilacak dalam kode
Anda sendiri.
StartupTimingMetric
,
TraceSectionMetric
,
FrameTimingMetric
, dan PowerMetric
akan dibahas
secara mendetail nanti dalam dokumen ini.
Hasil benchmark adalah output ke Android Studio, seperti ditunjukkan pada Gambar 1. Jika beberapa metrik ditentukan, semuanya digabungkan dalam output.
![Hasil TraceSectionMetric dan FrameTimingMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames_tracing.png?authuser=8&hl=id)
TraceSectionMetric
dan
FrameTimingMetric
.StartupTimingMetric
StartupTimingMetric
mengambil metrik pengaturan waktu startup aplikasi dengan nilai berikut:
timeToInitialDisplayMs
: Jumlah waktu sejak sistem menerima intent peluncuran hingga saat sistem merender frame pertamaActivity
tujuan.timeToFullDisplayMs
: Jumlah waktu sejak sistem menerima intent peluncuran hingga saat laporan aplikasi sepenuhnya digambar menggunakan metodereportFullyDrawn()
. Pengukuran berhenti saat rendering frame pertama selesai setelah, atau berisi, panggilanreportFullyDrawn()
. Pengukuran ini mungkin tidak tersedia di Android 10 (level API 29) dan yang lebih rendah.
StartupTimingMetric
menghasilkan nilai minimal, median, dan maksimum dari iterasi
startup. Untuk menilai peningkatan startup, Anda harus berfokus pada nilai median,
karena nilai median memberikan perkiraan terbaik dari waktu startup biasa. Untuk mengetahui
informasi selengkapnya tentang faktor yang memengaruhi waktu startup aplikasi, lihat
Waktu startup aplikasi.
![Hasil StartupTimingMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=8&hl=id)
StartupTimingMetric
.FrameTimingMetric
FrameTimingMetric
menangkap informasi pengaturan waktu dari frame yang dihasilkan oleh benchmark, seperti
scrolling atau animasi dan menghasilkan nilai berikut:
frameOverrunMs
: jumlah waktu ketika frame tertentu melewati batas waktu. Angka positif menunjukkan penurunan frame dan jank atau ketersendatan yang terlihat. Angka negatif menunjukkan seberapa cepat frame dibandingkan dengan batas waktu. Catatan: Ini hanya tersedia di Android 12 (level API 31) dan yang lebih baru.frameDurationCpuMs
: Jumlah waktu yang dibutuhkan frame untuk dihasilkan di CPU pada UI thread danRenderThread
.
Pengukuran ini dikumpulkan dalam distribusi persentil ke-50, ke-90, ke-95, dan ke-99.
Untuk informasi selengkapnya tentang cara mengidentifikasi dan meningkatkan frame lambat, lihat Rendering lambat.
![Hasil FrameTimingMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=8&hl=id)
FrameTimingMetric
.TraceSectionMetric
TraceSectionMetric
mencatat berapa kali kemunculan bagian rekaman aktivitas yang cocok dengan sectionName
yang diberikan dan jumlah waktu yang diperlukan. Untuk waktunya, class ini
menghasilkan waktu minimum, median, dan maksimum dalam milidetik. Bagian rekaman aktivitas ditentukan oleh
panggilan fungsi
trace(sectionName)
atau kode antara
Trace.beginSection(sectionName)
dan
Trace.endSection()
atau
varian asinkronnya. Class ini selalu memilih instance pertama dari bagian rekaman aktivitas
yang diambil selama pengukuran. Class ini hanya menghasilkan bagian rekaman aktivitas dari paket
secara default. Untuk menyertakan proses di luar paket Anda, setel
targetPackageOnly = false
.
Untuk mengetahui informasi selengkapnya tentang rekaman aktivitas, lihat Ringkasan pelacakan sistem dan Menentukan peristiwa kustom.
![TraceSectionMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=8&hl=id)
TraceSectionMetric
.PowerMetric
PowerMetric
merekam
perubahan daya atau energi selama durasi pengujian untuk
kategori daya yang disediakan.
Setiap kategori yang dipilih dibagi menjadi subkomponen terukur, dan
kategori yang tidak dipilih ditambahkan ke metrik "unselected".
Metrik ini mengukur konsumsi seluruh sistem, bukan konsumsi per aplikasi, dan terbatas untuk perangkat Pixel 6, Pixel 6 Pro, dan yang lebih baru:
power<category>Uw
: jumlah daya yang dikonsumsi selama durasi pengujian dalam kategori ini.energy<category>Uws
: jumlah energi yang ditransfer per unit waktu selama durasi pengujian dalam kategori ini.
Kategori mencakup:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
Dengan beberapa kategori, seperti CPU
, mungkin sulit untuk memisahkan pekerjaan yang dilakukan oleh
proses lain dari pekerjaan yang dilakukan oleh aplikasi Anda sendiri. Untuk meminimalkan gangguan,
hapus atau batasi aplikasi dan akun yang tidak diperlukan.
![Hasil PowerMetric](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=8&hl=id)
PowerMetric
.Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Membuat Profil Dasar Pengukuran {:#creating-profile-rules}
- Menulis Macrobenchmark
- Analisis dan pengoptimalan startup aplikasi {:#app-startup-analysis-optimization}