Mengambil metrik Macrobenchmark

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
Gambar 1. Hasil 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 pertama Activity tujuan.
  • timeToFullDisplayMs: Jumlah waktu sejak sistem menerima intent peluncuran hingga saat laporan aplikasi sepenuhnya digambar menggunakan metode reportFullyDrawn(). Pengukuran berhenti saat rendering frame pertama selesai setelah, atau berisi, panggilan reportFullyDrawn(). 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
Gambar 2. Hasil 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 dan RenderThread.

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
Gambar 3. Hasil 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
Gambar 4. Hasil 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
Gambar 5. Hasil PowerMetric.