Profil Dasar Pengukuran Benchmark dengan library Macrobenchmark

Sebaiknya gunakan Macrobenchmark Jetpack untuk menguji performa aplikasi saat Profil Dasar Pengukuran diaktifkan, lalu bandingkan hasilnya dengan benchmark saat Profil Dasar Pengukuran dinonaktifkan. Dengan pendekatan ini, Anda dapat mengukur waktu startup aplikasi, baik waktu tampilan awal maupun penuh, atau performa rendering runtime untuk mengetahui apakah frame yang dihasilkan dapat menyebabkan jank.

Macrobenchmark memungkinkan Anda mengontrol kompilasi pra-pengukuran menggunakan CompilationMode API. Gunakan nilai CompilationMode yang berbeda untuk membandingkan performa dengan berbagai status kompilasi. Cuplikan kode berikut menunjukkan cara menggunakan parameter CompilationMode untuk mengukur manfaat Profil Dasar Pengukuran:

@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    // No ahead-of-time (AOT) compilation at all. Represents performance of a
    // fresh install on a user's device if you don't enable Baseline Profiles—
    // generally the worst case performance.
    @Test
    fun startupNoCompilation() = startup(CompilationMode.None())

    // Partial pre-compilation with Baseline Profiles. Represents performance of
    // a fresh install on a user's device.
    @Test
    fun startupPartialWithBaselineProfiles() =
        startup(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require))

    // Partial pre-compilation with some just-in-time (JIT) compilation.
    // Represents performance after some app usage.
    @Test
    fun startupPartialCompilation() = startup(
        CompilationMode.Partial(
            baselineProfileMode = BaselineProfileMode.Disable,
            warmupIteration = 3
        )
    )

    // Full pre-compilation. Generally not representative of real user
    // experience, but can yield more stable performance metrics by removing
    // noise from JIT compilation within benchmark runs.
    @Test
    fun startupFullCompilation() = startup(CompilationMode.Full())

    private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(
        packageName = "com.example.macrobenchmark.target",
        metrics = listOf(StartupTimingMetric()),
        compilationMode = compilationMode,
        iterations = 10,
        startupMode = StartupMode.COLD,
        setupBlock = {
            pressHome()
        }
    ) {
        // Waits for the first rendered frame, which represents time to initial display.
        startActivityAndWait()

        // Waits for content to be visible, which represents time to fully drawn.
        device.wait(Until.hasObject(By.res("my-content")), 5_000)
    }
}

Dalam screenshot berikut, Anda dapat melihat hasilnya langsung di Android Studio untuk aplikasi contoh Now in Android yang berjalan di Google Pixel 7. Hasilnya menunjukkan bahwa startup aplikasi berjalan paling cepat saat menggunakan Profil Dasar Pengukuran (229,0 ms), dibandingkan dengan tanpa kompilasi (324,8 ms).

hasil ColdstartupBenchmark
Gambar 1. Hasil ColdStartupBenchmark menunjukkan waktu hingga tampilan awal tanpa kompilasi (324 ms), dengan kompilasi lengkap (315 ms), dengan kompilasi sebagian (312 ms), dan Profil Dasar Pengukuran (229 ms).

Meskipun contoh sebelumnya menunjukkan hasil startup aplikasi yang diambil dengan StartupTimingMetric, ada metrik penting lainnya yang patut dipertimbangkan, seperti FrameTimingMetric. Untuk informasi lebih lanjut tentang semua jenis metrik, lihat Merekam metrik Macrobenchmark.

Waktu hingga tampilan penuh

Contoh sebelumnya mengukur waktu hingga tampilan awal (TTID), yang merupakan waktu yang dibutuhkan aplikasi untuk menghasilkan frame pertamanya. Namun, hal ini tidak selalu mencerminkan waktu hingga pengguna dapat mulai berinteraksi dengan aplikasi Anda. Metrik waktu hingga tampilan penuh (TTFD) lebih berguna dalam mengukur dan mengoptimalkan jalur kode yang diperlukan agar memiliki status aplikasi yang sepenuhnya dapat digunakan.

Sebaiknya optimalkan untuk TTID dan TTFD karena keduanya penting. TTID yang rendah membantu pengguna melihat bahwa aplikasi benar-benar diluncurkan. Menjaga TTFD tetap singkat penting untuk membantu memastikan bahwa pengguna dapat berinteraksi dengan aplikasi dengan cepat.

Untuk mengetahui strategi pelaporan ketika UI aplikasi telah digambar sepenuhnya, lihat Meningkatkan akurasi waktu startup.

  • Catatan: teks link ditampilkan saat JavaScript nonaktif
  • [Menulis Macrobenchmark][11]
  • [Mengambil Metrik Macrobenchmark][12]
  • [Analisis dan pengoptimalan startup aplikasi {:#app-startup-analysis-optimization}][13]