Mengambil Metrik Macrobenchmark

Metrik adalah jenis informasi utama yang diekstrak dari benchmark Anda. Metrik ini diteruskan ke fungsi measureRepeated sebagai List, yang memungkinkan Anda menentukan beberapa metrik yang diukur sekaligus. Setidaknya satu jenis metrik diperlukan agar benchmark dapat dijalankan.

Cuplikan 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"),
    ),
    // ...
)

Java

benchmarkRule.measureRepeated(
    /* packageName */ TARGET_PACKAGE,
    /* metrics */ Arrays.asList(
        new StartupTimingMetric(),
        new TraceSectionMetric("RV CreateView"),
        new TraceSectionMetric("RV OnBindView"),
    ),
    /* iterations */ 5,
    // ...
);

Hasil benchmark adalah output ke Android Studio, seperti yang ditampilkan dalam gambar berikut. Jika beberapa metrik ditentukan, semuanya digabungkan dalam output.

Hasil TraceSectionMetric dan FrameTimingMetric

StartupTimingMetric

StartupTimingMetric menangkap metrik pengaturan waktu startup aplikasi dengan nilai berikut:

  • timeToInitialDisplayMs – Waktu dari saat sistem menerima intent peluncuran hingga rendering frame pertama Aktivitas tujuan.
  • timeToFullDisplayMs – Waktu dari saat sistem menerima intent peluncuran sampai laporan aplikasi sepenuhnya digambar melalui metode reportFullyDrawn. Pengukuran berhenti saat rendering frame pertama selesai setelah (atau berisi) panggilan reportFullyDrawn(). Pengukuran ini mungkin tidak tersedia di Android 10 (API level 29) dan yang lebih rendah.

Untuk informasi selengkapnya tentang faktor yang memengaruhi waktu startup aplikasi, lihat halaman waktu startup aplikasi.

Hasil StartupTimingMetric

FrameTimingMetric

FrameTimingMetric menangkap informasi pengaturan waktu dari frame yang dihasilkan oleh benchmark, seperti scrolling atau animasi dan menghasilkan nilai berikut:

  • frameOverrunMs – Berapa lama waktu frame tertentu melewati batas waktu. Angka positif menunjukkan penurunan frame dan jank/kondisi tersendat yang terlihat, angka negatif menunjukkan seberapa cepat frame dibandingkan dengan batas waktunya. Hanya tersedia di Android 12 (API level 31) dan yang lebih tinggi.
  • frameDurationCpuMs – Berapa lama waktu yang dibutuhkan frame untuk dihasilkan di CPU – di 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

TraceSectionMetric (eksperimental)

TraceSectionMetric menangkap waktu yang diambil oleh bagian rekaman aktivitas yang cocok dengan sectionName dan output yang disediakan min, median, dan maksimum waktu dalam milidetik. Bagian rekaman aktivitas ditentukan oleh panggilan fungsi trace(sectionName){} atau kode antara Trace.beginSection(sectionName) dan Trace.endSection() (atau varian asinkronnya). Hal ini selalu memilih instance pertama dari bagian rekaman aktivitas yang diambil selama pengukuran.

Untuk informasi selengkapnya tentang rekaman aktivitas, lihat Ringkasan pelacakan sistem dan Menentukan peristiwa kustom.

Hasil TraceSectionMetric