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. Untuk mengetahui daftar lengkap metrik, lihat subclass Metric.
Hasil benchmark adalah output ke Android Studio, seperti ditunjukkan pada Gambar 1. Jika beberapa metrik ditentukan, semuanya digabungkan dalam output.
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 pertamaActivitytujuan.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.
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.
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.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:
CPUDISPLAYGPUGPSMEMORYMACHINE_LEARNINGNETWORKUNCATEGORIZED
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.
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}