Tự động đo lường với thư viện Macrobenchmark

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Bạn nên sử dụng Jetpack Macrobenchmark để kiểm thử hiệu suất của một ứng dụng khi bật Hồ sơ cơ sở, sau đó so sánh những kết quả đó với điểm chuẩn khi đã tắt Hồ sơ cơ sở. Bằng cách này, bạn có thể đo lường thời gian khởi động ứng dụng (thời gian hiển thị khung hình đầu tiên và thời gian hiển thị đầy đủ) hoặc hiệu suất hiển thị trong thời gian chạy (để xem liệu các khung hình đã tạo có thể bị giật hay không).

Macrobenchmark cho phép bạn kiểm soát hoạt động biên dịch trước khi đo lường qua API CompilationMode. Để đo lường kết quả, bạn cần đặt tham số compilationMode thành giá trị đúng như trong đoạn mã sau đây:

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

    @Test
    fun startupNoCompilation() = startup(CompilationMode.None())

    @Test
    fun startupBaselineProfile() = startup(CompilationMode.Partial())

    @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)
    }
}

Bạn có thể xem kết quả ngay trong Android Studio như minh hoạ trong ảnh chụp màn hình sau đây cho ứng dụng mẫu Now in Android trên Google Pixel 7. Kết quả cho thấy quá trình khởi động ứng dụng sẽ diễn ra nhanh nhất khi sử dụng Hồ sơ cơ sở (275,1 mili giây), trái ngược với khi không biên dịch (378,6 mili giây). Lưu ý rằng quá trình biên dịch AOT (trước khi thực thi) đầy đủ có thể mất nhiều thời gian hơn (393 mili giây), vì hệ thống cần tải tệp có dung lượng lớn hơn từ ổ đĩa.

Kết quả của ColdStartupBenchmark cho thấy thời gian để hiển thị khung hình đầu tiên khi không biên dịch = 393 mili giây, biên dịch đầy đủ = 393 mili giây, Hồ sơ cơ sở = 275 mili giây

Xin lưu ý rằng mặc dù ở ví dụ trước, kết quả khởi động ứng dụng được thu thập bằng StartupTimingMetric, nhưng bạn nên cân nhắc những chỉ số quan trọng khác, chẳng hạn như FrameTimingMetric. Bạn có thể xem thêm thông tin về tất cả các loại chỉ số trên bài viết Ghi lại các chỉ số.