Benchmark

Mengukur performa kode Anda secara akurat dalam Android Studio.
Update Terbaru Rilis Stabil Kandidat Rilis Rilis Beta Rilis Alfa
9 November 2022 1.1.1 - - 1.2.0-alpha07

Mendeklarasikan dependensi

Untuk menambahkan dependensi pada Benchmark, Anda harus menambahkan repositori Maven Google ke project Anda. Baca repositori Maven Google untuk mengetahui informasi selengkapnya.

Tambahkan dependensi untuk artefak yang diperlukan dalam file build.gradle bagi aplikasi atau modul Anda:

Macrobenchmark

Untuk menggunakan Macrobenchmark dalam project Anda, tambahkan dependensi berikut ke file build.gradle untuk aplikasi atau modul Anda:

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.1.1"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.1.1")
}

Microbenchmark

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.1.1"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.1.1")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Library Microbenchmark juga menyediakan plugin Gradle untuk digunakan dengan modul microbenchmark. Plugin ini menyetel default konfigurasi build untuk modul, menyiapkan salinan output benchmark ke host, dan memberikan tugas ./gradlew lockClocks.

Untuk menggunakan plugin ini, sertakan baris berikut dalam blok `plugins` di file build.gradle level teratas:

Groovy

plugins {
  id 'androidx.benchmark' version '1.1.1' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.1.1" apply false
}

Lalu, terapkan plugin ke file build.gradle modul benchmark Anda

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

Masukan

Masukan Anda membantu meningkatkan kualitas Jetpack. Beri tahu kami jika Anda menemukan masalah baru atau mempunyai masukan untuk meningkatkan kualitas library ini. Harap periksa masalah yang sudah diketahui dalam library ini sebelum membuat laporan baru. Anda dapat memberikan suara untuk masalah yang sudah diketahui dengan mengklik tombol bintang.

Laporkan masalah baru

Lihat dokumentasi Issue Tracker untuk informasi selengkapnya.

Versi 1.2

Versi 1.2.0-alpha07

9 November 2022

androidx.benchmark:benchmark-*:1.2.0-alpha07 dirilis. Versi 1.2.0-alpha07 berisi commit ini.

Perubahan API

  • Menambahkan PowerMetric API untuk mengukur energi dan daya di Macrobenchmark. (Ife601, b/220183779)
  • Memperbaiki MacrobenchmarkScope.dropShaderCache() untuk benar-benar menghapus cache shader. Tindakan ini akan menghilangkan sekitar 20 md derau dari benchmark StartupMode.COLD, karena shader sekarang dihapus secara konsisten setiap iterasi. Sebelumnya, kompilasi Partial yang menggunakan iterasi pemanasan akan melaporkan angka cepat dengan salah karena cache shader lebih cenderung terjadi selama pemanasan. Perbaikan ini memerlukan perangkat yang telah di-root, atau menggunakan profileinstaller:1.3.0-alpha02 pada aplikasi target. Untuk perubahan API library ProfileInstaller, lihat halaman ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • Menambahkan TraceSectionMode("label", Mode.Sum), yang memungkinkan pengukuran total waktu yang dihabiskan di beberapa bagian rekaman aktivitas dengan label yang sama. Misalnya, TraceSectionMetric("inflate", Mode.Sum) akan melaporkan metrik inflateMs untuk total waktu dalam macrobenchmark yang dihabiskan pada inflasi. Juga menghapus persyaratan API 29 karena TraceSectionMetric berfungsi bersama dengan androidx.tracing.Trace kembali ke API level yang lebih rendah, dengan penggunaan forceEnableAppTracing dalam aplikasi target. (Id7b68, b/231455742)

Perbaikan Bug

  • Meningkatkan keamanan semua perintah shell internal dengan memvalidasi semua output/error. (I5984d, b/255402908, b/253094958)
  • Menentukan perangkat dalam perintah adb pull profil dasar pengukuran sehingga perintah pull dapat disalin dengan mudah jika beberapa perangkat terhubung (hingga satu emulator) (I6ac6c, b/223359380 )
  • Menambahkan error jika apk pengujian macrobenchmark tidak disiapkan sebagai instrumentasi mandiri. Error ini mencegah macrobenchmark dalam proses aplikasi target. Dalam prosesnya, macrobench tidak akan dapat mengompilasi/menghentikan/cold start aplikasi, atau mengontrol izinnya sendiri (I4279b)
  • Memperbaiki masalah di measureRepeated() tempat StartupMode.COLD tidak akan menghentikan proses target setelah setupBlock. Sekarang setupBlock yang berinteraksi dengan aplikasi tidak akan membiarkan proses aplikasi berjalan, dan pengukuran cold start tidak valid. (I8ebb7)

Versi 1.2.0-alpha06

24 Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha06 dirilis. Versi 1.2.0-alpha06 berisi commit ini.

Perubahan API

  • BaselineProfileRule tidak lagi memerlukan root di Android 13 (API 33), dan tidak lagi bersifat eksperimental. (Ie0a7d, b/250083467, b/253094958)
    • Perubahan ini juga memperbaiki cara flush profil dari aplikasi ke disk pada perangkat yang tidak di-root, tetapi memerlukan update dependensi profilinstaller aplikasi target.
    • Untuk menggunakan BaselineProfileRule atau CompilationMode.Partial(warmupIterations) di perangkat yang tidak di-root, Anda juga harus mengupdate aplikasi target agar dapat menggunakan androidx.profileinstaller.profileinstaller:1.3.0-alpha01. Tindakan ini memungkinkan flush profil ke disk dengan benar, sehingga dapat dikompilasi/diekstrak.

Perbaikan Bug

Versi 1.2.0-alpha05

5 Oktober 2022

androidx.benchmark:benchmark-*:1.2.0-alpha05 dirilis. Versi 1.2.0-alpha05 berisi commit ini.

Perbaikan Bug

  • Memperbaiki perincian frame di penampil rekaman aktivitas sistem Studio untuk rekaman aktivitas yang direkam benchmark (I3f3ae, b/239677443)
  • Memperbaiki FrameTimingMetric untuk mencantumkan bahwa FrameOverrun memerlukan API 31, bukan 29 (I716dd, b/220702554)
  • Menyetel iterasi dalam BaselineProfileRule, dan menampilkan dengan jelas jika paket target tidak diinstal (sudah dilakukan untuk MacrobenchmarkRule). (Ic09a3, b/227991471)

Versi 1.2.0-alpha04

21 September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha04 dirilis. Versi 1.2.0-alpha04 berisi commit ini.

Fitur Baru

  • Menambahkan dukungan untuk argumen instrumentasi dryRunMode.enable ke macrobenchmark (sudah tersedia dalam micro) untuk pengembangan lokal yang lebih cepat, dan memvalidasi otomatisasi aplikasi (misalnya dalam pra-pengiriman). Ini akan mengganti iterasi ke 1, melewati kompilasi, menyembunyikan semua error konfigurasi, dan menonaktifkan output file .json pengukuran. (Ib51b4, b/175149857)

    Di command line Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
    

    Di build.gradle:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true'
        }
    }
    

Perbaikan Bug

  • Memperbaiki StartupTimingMetric agar Aktivitas yang diukur tidak perlu lagi diluncurkan melalui MacrobenchmarkScope.startActivityAndWait(). Artinya, metrik dapat mengambil peluncuran dari notifikasi, Context.startActivity(), navigasi berbasis Aktivitas dalam aplikasi, atau perintah shell. (Ia2de6, b/245414235)
  • Memperbaiki bug saat startActivityAndWait mengalami waktu tunggu habis ketika mencoba menyelesaikan peluncuran pada emulator dengan mengurangi pengetatan deteksi frame. (Ibe2c6, b/244594339, b/228946895)

Versi 1.2.0-alpha03

7 September 2022

androidx.benchmark:benchmark-*:1.2.0-alpha03 dirilis. Versi 1.2.0-alpha03 berisi commit ini.

Fitur Baru

  • Menambahkan API eksperimental untuk menggunakan BenchmarkState secara independen, terpisah dari BenchmarkRule/JUnit4. (Id478f, b/228489614)

Perbaikan Bug

Versi 1.2.0-alpha02

24 Agustus 2022

androidx.benchmark:benchmark-*:1.2.0-alpha02 dirilis. Versi 1.2.0-alpha02 berisi commit ini.

Perubahan API

  • Menjadikan default ke am force stop untuk MacrobenchmarkScope.killProcess(), meskipun saat di-root, kecuali selama pembuatan Profil Baseline. Anda dapat menggantinya dengan argumen boolean opsional. (02cce9, b/241214097)

Perbaikan Bug

  • Mendukung pembuatan profil baseline untuk aplikasi Sistem. (I900b8, b/241214097)
  • Mendukung pemeriksaan metrik daya ODPM di perangkat yang tidak di-root. (a38c78, b/229623230)

Versi 1.2.0-alpha01

27 Juli 2022

androidx.benchmark:benchmark-*:1.2.0-alpha01 dirilis. Versi 1.2.0-alpha01 berisi commit ini.

Fitur Baru

  • Komponen tracing-perfetto-common baru yang memungkinkan alat untuk mengaktifkan pelacakan SDK Perfetto di aplikasi yang mengeksposnya (I2cc7f)
  • Menambahkan argumen instrumentasi androidx.benchmark.enabledRules untuk mengaktifkan pemfilteran macrobenchmark yang berjalan hanya ke benchmark, atau hanya pembuatan profil dasar pengukuran. Teruskan 'Macrobenchmark', atau 'BaselineProfile' untuk menjalankan satu jenis pengujian saja, misalnya saat membuat BaselineProfiles pada emulator saja. Daftar yang dipisahkan koma juga Didukung. (I756b7, b/230371561)

    Misalnya dalam build.gradle macrobenchmark Anda:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    Atau dari command line Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Perubahan API

  • Menambahkan PowerMetric baru untuk mengukur tugas energi dan daya dalam benchmark. (I9f39b, b/220183779)
  • Menambahkan mode kompilasi baru CompilationMode.Ignore untuk melewati proses reset dan kompilasi profil. (Ibbcf8, b/230453509)
  • Menambahkan parameter baru ke BaselineProfileRule#collectBaselineProfile untuk memfilter file output berdasarkan nama paket (If7338, b/220146561)
  • Memungkinkan developer mengeluarkan perangkat untuk mengukur konsumsi daya. (I6a6cb)
  • Menambahkan kemampuan untuk menghapus cache shader di MacrobenchmarkScope. (I32122)
  • Memungkinkan developer mengonfigurasi tampilan jenis metrik dan menjelaskan perincian kategori subsistem yang diinginkan. (I810c9)
  • Sebelumnya, UnsupportedOperationException ditampilkan dalam benchmark jika dijalankan di perangkat yang tidak didukung. Sekarang UOE hanya terjadi jika metrik digunakan di perangkat yang tidak didukung (yaitu: PowerMetric.configure). (I5cf20, b/227229375)
  • Menambahkan TotalPowerMetric dan TotalEnergyMetric untuk mengukur total daya dan energi dalam setiap kategori sistem di macrobenchmark. (I3b26b, b/224557371)

Perbaikan Bug

  • Memperbaiki masalah saat metode yang dikompilasi tidak direset dengan benar di antara setiap macrobenchmark pada build yang tidak di-root. Sayangnya, tindakan ini memerlukan penginstalan ulang apk pada setiap iterasi, yang akan menghapus data aplikasi untuk setiap macrobenchmark. (I31c74, b/230665435)
  • Memperbaiki error rekaman aktivitas di API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
  • Merombak deteksi penyelesaian peluncuran aktivitas untuk memperbaiki pengecualian 'Tidak dapat membaca metrik' dalam macrobenchmark startup. (Ia517c)

Versi 1.1.1

Versi 1.1.1

9 November 2022

androidx.benchmark:benchmark-*:1.1.1 dirilis. Versi 1.1.1 berisi commit ini.

Perbaikan Bug

  • Memperbaiki android.system.ErrnoException: open failed: EACCES yang akan terjadi di beberapa perangkat Android11 (API 30)+. Ini adalah pengambilan perbaikan dari 1.2.0-alpha01. (aosp/2072249)

Versi 1.1.0

Versi 1.1.0

15 Juni 2022

androidx.benchmark:benchmark-*:1.1.0 dirilis. Versi 1.1.0 berisi commit ini.

  • Versi ini sama persis dengan androidx.benchmark:benchmark-*:1.1.0-rc03.

Perubahan penting sejak versi 1.0.0

Versi 1.1.0-rc03

1 Juni 2022

androidx.benchmark:benchmark-*:1.1.0-rc03 dirilis. Versi 1.1.0-rc03 berisi commit ini.

Perbaikan Bug

Versi 1.1.0-rc02

11 Mei 2022

androidx.benchmark:benchmark-*:1.1.0-rc02 dirilis. Versi 1.1.0-rc02 berisi commit ini.

  • Perhatikan bahwa rilis ini menyertakan perubahan perilaku, karena aplikasi kini diinstal ulang sepenuhnya di antara setiap benchmark untuk memastikan pengukuran yang akurat.

Perbaikan Bug/Perubahan Perilaku

  • Memperbaiki masalah kompilasi aplikasi yang tidak direset dengan benar di antara macrobenchmark, dan tidak direset sama sekali pada build yang tidak di-root. Tindakan ini memperbaiki banyak kasus saat menjalankan beberapa pengujian akan menyebabkan CompilationMode memiliki sedikit pengaruh atau tidak berpengaruh pada pengukuran. Untuk mengatasi masalah ini, aplikasi target kini sepenuhnya menginstal ulang setiap metode pengujian, yang akan menghapus data aplikasi di antara setiap macrobenchmark. (I31c74, b/230665435)

  • Karena hal ini mencegah aplikasi menyiapkan status sebelum pengujian, sekarang Anda dapat melewati kompilasi/penginstalan ulang untuk memungkinkan penyelesaian masalah ini. Misalnya, Anda dapat mengompilasi target sepenuhnya dengan perintah shell cmd package compile -f -m speed <package>, lalu mengabaikan langkah kompilasi macrobenchmark.

    Misalnya dalam build.gradle macrobenchmark Anda:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    Atau dari command line Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Memungkinkan untuk berbagi modul antara macrobenchmark dan profil baseline yang menghasilkan pengujian dengan menambahkan argumen instrumentasi androidx.benchmark.enabledRules. Teruskan 'Macrobenchmark', atau 'BaselineProfile' untuk menjalankan satu jenis pengujian saja, misalnya saat membuat BaselineProfiles pada emulator. (I756b7, b/230371561)

    Misalnya dalam build.gradle macrobenchmark Anda:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    Atau dari command line Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Versi 1.1.0-rc01

20 April 2022

androidx.benchmark:benchmark-*:1.1.0-rc01 dirilis. Versi 1.1.0-rc01 berisi commit ini.

Perbaikan Bug

  • Link output profil dasar pengukuran di Android Studio kini menggunakan nama file yang unik. Dengan cara ini, output selalu mencerminkan hasil terbaru penggunaan BaselineProfileRule. ( aosp/2057008, b/228203086 )

Versi 1.1.0-beta06

6 April 2022

androidx.benchmark:benchmark-*:1.1.0-beta06 dirilis. Versi 1.1.0-beta06 berisi commit ini.

Perbaikan Bug

  • Memperbaiki error rekaman aktivitas di API 21/22 (If7fd6, b/227509388)
  • Merombak deteksi penyelesaian peluncuran aktivitas untuk memperbaiki pengecualian 'Tidak dapat membaca metrik' dalam macrobenchmark startup. (Ia517c)
  • Memperbaiki metrik startup untuk Macrobenchmark saat CompilationMode.None() digunakan. Sebelum perubahan ini, CompilationMode.Partial() akan tampak lebih lambat dari Compilation.None(). (611ac9).

Versi 1.1.0-beta05

23 Maret 2022

androidx.benchmark:benchmark-*:1.1.0-beta05 dirilis. Versi 1.1.0-beta05 berisi commit ini.

Perbaikan Bug

Versi 1.1.0-beta04

23 Februari 2022

androidx.benchmark:benchmark-*:1.1.0-beta04 dirilis. Versi 1.1.0-beta04 berisi commit ini.

Perbaikan Bug

  • Memperbaiki metrik yang hilang di Android 10, dan NoSuchElementException yang disebabkan oleh nama proses yang tidak terekam dengan benar di rekaman aktivitas. (Ib4c17, b/218668335)

  • Menggunakan PowerManager untuk deteksi throttling termal pada Q (API 29) dan yang lebih tinggi. Hal ini secara signifikan mengurangi frekuensi positif palsu (PP) dalam deteksi throttling termal (percobaan ulang benchmark setelah periode tunggu 90 detik), dan mempercepat benchmark secara signifikan pada build pengguna. Hal ini juga memberikan deteksi throttle meskipun jam dikunci (jika dikunci terlalu tinggi untuk lingkungan fisik perangkat). (I9c027, b/217497678, b/131755853)

  • Memfilter profiling sampel simpleperf ke thread measureRepeated hanya untuk menyederhanakan pemeriksaan (Ic3e12, b/217501939)

  • Mendukung metrik dari subproses UI bernama dalam aplikasi multiproses (Ice6c0, b/215988434)

  • Memfilter aturan Profil Baseline untuk menargetkan Android 9 (SDK 28). aosp/1980331 b/216508418

  • Melewati Penginstalan Profil saat menggunakan Compilation.None(). Selain itu, melaporkan peringatan saat aplikasi menggunakan androidx.profileinstaller dan Plugin Android Gradle versi lama. aosp/1977029

Versi 1.1.0-beta03

9 Februari 2022

androidx.benchmark:benchmark-*:1.1.0-beta03 dirilis. Versi 1.1.0-beta03 berisi commit ini.

Perubahan API

  • Menambahkan AudioUnderrunMetric ke library macrobenchmark di bagian flag eksperimental untuk memungkinkan deteksi underrun audio (Ib5972)
  • BaselineProfileRule tidak lagi menerima blok setup karena fungsi ini sama dengan profileBlock. (Ic7dfe, b/215536447)

    Misalnya,

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

Perbaikan Bug

  • Memperbaiki masalah ketika rekaman aktivitas profiler microbench akan gagal diupdate pada run berikutnya saat ditautkan di output Studio (I5ae4d, b/214917025)
  • Mencegah perintah shell kompilasi di API 23 (Ice380)
  • Mengganti nama FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi guna memperjelas ini adalah durasi, bukan stempel waktu, dan untuk mencocokkan awalan. (I0eba3, b/216337830)

Versi 1.1.0-beta02

26 Januari 2022

androidx.benchmark:benchmark-*:1.1.0-beta02 dirilis. Versi 1.1.0-beta02 berisi commit ini.

Perbaikan Bug

  • Hasil Pengambilan Sampel/Pelacakan Stack Profil Microbenchmark kini ditautkan dalam output Studio, mirip dengan output profiling lainnya, dan tidak menyembunyikan metrik alokasi. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule sekarang mencetak perintah adb pull di logcat dan output Studio untuk menarik file teks BaselineProfile yang dihasilkan. (f08811)

Versi 1.1.0-beta01

12 Januari 2022

androidx.benchmark:benchmark-*:1.1.0-beta01 dirilis. Versi 1.1.0-beta01 berisi commit ini.

Perbaikan Bug

  • Memperbaiki argumen profiler agar diabaikan. (I37373, b/210619998)
  • Menghapus CompliationModes yang tidak digunakan lagi (I98186, b/213467659)
  • Mengalihkan argumen profil dasar pengukuran CompilationMode.Partial ke enum untuk kejelasan. (Id67ea)

Versi 1.1.0-alpha13

15 Desember 2021

androidx.benchmark:benchmark-*:1.1.0-alpha13 dirilis. Versi 1.1.0-alpha13 berisi commit ini.

Perubahan API

  • Menambahkan Pelacakan Sistem dengan overhead rendah ke output microbench di Android Q (API 29+). Perlu diperhatikan bahwa saat ini tindakan ini tidak menangkap pelacakan kustom (melalui android.os.Trace atau androidx.tracing API Jetpack) untuk menghindari dampak hasil. Pelacakan ini seharusnya berguna untuk mendiagnosis ketidakstabilan, terutama dari sumber di luar benchmark. (I298be, b/205636583, b/145598917)
  • Mengklarifikasi CompilationModes ke dalam tiga class - Penuh, Tidak ada, Parsial. Sebelumnya namanya dinamai secara tidak konsisten berdasarkan argumen kompilasi (yang sekarang kita perlakukan sebagai detail implementasi) dan fitur. Hal ini membuat tradeoff, potensi kombinasi, dan perilaku di seluruh versi platform lebih jelas. (I3d7bf, b/207132597)
  • Penyiapan dan pengukuran kini selalu berpasangan, secara berurutan. Anda kini dapat mengkueri nama paket dan iterasi (meskipun iterasinya mungkin null dalam skenario pemanasan tertentu). (Id3b68, b/208357448, b/208369635)

Perbaikan Bug

  • Memperbaiki CompilationMode.Speed yang salah diperlakukan sebagai None (I01137)

Versi 1.1.0-alpha12

17 November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha12 dirilis. Versi 1.1.0-alpha12 berisi commit ini.

Fitur Baru

  • Menambahkan TraceSectionMetric eksperimental ke pengukuran waktu berbasis pelacakan kustom. (I99db1, b/204572664)

Perbaikan Bug

  • Mengaktifkan perangkat di setiap iterasi, untuk memastikan UI dapat diuji - layar kunci perlu dinonaktifkan. (Ibfa28, b/180963442)
  • Memperbaiki beberapa error dalam mode pembuatan profil StackSampling di emulator dan perangkat yang tidak di-root (Icdbda, b/202719335)
  • Menghapus tidur 0,5 detik di akhir setiap iterasi - jika Anda melihat metrik yang hilang dengan perubahan ini, laporkan bug. (Iff6aa)
  • Mengurangi peluang penurunan data, dan menurunkan overhead memori dari pelacakan (Id2544, b/199324831, b/204448861)
  • Mengurangi ukuran pelacakan hingga ~40% dengan beralih ke format penyimpanan sched yang ringkas. (Id5fb6, b/199324831)
  • Memperbarui implementasi metrik startup agar selalu berakhir di akhir renderthread. Ini akan lebih konsisten di seluruh versi platform, dan lebih memetakan ke pengukuran dalam aplikasi. (Ic6b55)

Versi 1.1.0-alpha11

3 November 2021

androidx.benchmark:benchmark-*:1.1.0-alpha11 dirilis. Versi 1.1.0-alpha11 berisi commit ini.

Perubahan API

  • Macrobenchmark kini memiliki minSdkVersion 23. (If2655)
  • Menambahkan BaselineProfileRule eksperimental baru yang mampu menghasilkan profil dasar pengukuran untuk perjalanan penting pengguna aplikasi. Dokumentasi mendetail untuk diikuti. (Ibbefa, b/203692160)
  • Menghapus varian antarmuka measureRepeated, yang ditambahkan untuk pemanggil java, karena menyebabkan ambiguitas dalam menyelesaikan/me-resolve metode. Pemanggil Java sekali lagi harus menampilkan Unit.Instance dari measureRepeated. Jika hal ini menimbulkan ketidaknyamanan, laporkan bug, kami dapat memeriksanya kembali pada versi mendatang. (Ifb23e, b/204331495)

Versi 1.1.0-alpha10

27 Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha10 dirilis. Versi 1.1.0-alpha10 berisi commit ini.

Perubahan API

  • Backport StartupTimingMetric agar berfungsi kembali ke API 23. Implementasi baru ini juga dapat menangani reportFullyDrawn() dengan lebih baik untuk menunggu hingga konten yang terkait telah dirender. (If3ac9, b/183129298)
  • Menambahkan JvmOverloads ke beberapa metode MacrobenchmarkScope untuk pemanggil Java. (I644fe, b/184546459)
  • Menyediakan fungsi MacrobenchmarkRule.measureRepeated alternatif yang menggunakan Consumer<MacrobenchmarkScope> untuk penggunaan idiomatis dalam bahasa Java. (If74ab, b/184546459)

Perbaikan Bug

  • Perbaikan untuk rekaman aktivitas tidak dimulai cukup awal, dan tidak ada data metrik. Perbaikan ini diharapkan dapat memperbaiki pengecualian "Tidak dapat membaca metrik selama benchmark" yang disebabkan oleh library itu sendiri. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack telah diganti namanya menjadi FrameOverrun untuk memperjelas artinya - berapa banyak frame yang melebihi alokasi waktunya. (I6c2aa, b/203008701)

Versi 1.1.0-alpha09

13 Oktober 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 dirilis. Versi 1.1.0-alpha09 berisi commit ini.

Perbaikan Bug

Versi 1.1.0-alpha08

29 September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha08 dirilis. Versi 1.1.0-alpha08 berisi commit ini.

Perubahan API

  • Mengaktifkan macrobenchmark scroll untuk dijalankan kembali ke API 23 (If39c2, b/183129298)
  • Menambahkan jenis metrik sampel baru ke output UI dan JSON, yang berfokus pada persentil beberapa sampel per iterasi. (I56247, b/199940612)
  • Beralih ke metrik floating point di seluruh library benchmark (dipotong di UI Studio). (I69249, b/197008210)

Versi 1.1.0-alpha07

1 September 2021

androidx.benchmark:benchmark-*:1.1.0-alpha07 dirilis. Versi 1.1.0-alpha07 berisi commit ini.

Perubahan API

  • Menaikkan API min ke 21 untuk mencerminkan API level terendah yang diinginkan agar didukung di masa mendatang. API min yang saat ini didukung akan terus disampaikan melalui RequiredApi(), dan saat ini adalah 29 (I440d6, b/183129298)

Perbaikan Bug

  • Memperbaiki ProfileInstaller agar mempermudah aplikasi yang menggunakan profil dasar pengukuran untuk menjalankan MacroBenchmarks menggunakan CompilationMode.BaselineProfile. (I42657, b/196074999) CATATAN: perlu update ke androidx.profileinstaller:profileinstaller:1.1.0-alpha04 atau yang lebih tinggi.
  • Benchmark StartupMode.COLD + CompilationMode.None sekarang lebih stabil. (I770cd, b/196074999)

Versi 1.1.0-alpha06

18 Agustus 2021

androidx.benchmark:benchmark-*:1.1.0-alpha06 dirilis. Versi 1.1.0-alpha06 berisi commit ini.

Perubahan API

  • Menambahkan argumen instrumentasi androidx.benchmark.iterations agar memungkinkan penggantian jumlah iterasi secara manual saat menguji/membuat profil secara lokal. (6188be, b/194137879)

Perbaikan Bug

  • Beralih ke Simpleperf sebagai profiler sampel default di API 29+. (Ic4b34, b/158303822)

Masalah Umum

  • CompilationMode.BaselineProfile sedang dalam proses. Sebaiknya Anda tidak menggunakannya untuk menentukan seberapa baik profil untuk saat ini.

Versi 1.1.0-alpha05

4 Agustus 2021

androidx.benchmark:benchmark-*:1.1.0-alpha05 dirilis. Versi 1.1.0-alpha05 berisi commit ini.

1.1.0-alpha04 dibatalkan sebelum dirilis karena error sporatik. b/193827052

Perubahan API

  • startActivityAndWait dialihkan untuk memanggil peluncuran melalui am start, yang mengurangi waktu setiap iterasi pengukuran sekitar 5 detik, dengan mengorbankan penghentian dukungan pada parcelable intent. (I5a6f5, b/192009149

Perbaikan Bug

  • Mengurangi agresivitas deteksi throttle termal, dan mengomputasi ulang dasar pengukuran jika throttle sering terdeteksi. (I7327b)
  • Memperbaiki FrameTimingMetric agar berfungsi di Android S beta (Ib60cc, b/193260119)
  • Menggunakan EmptyActivity untuk mengeluarkan aplikasi target dari status paksa berhenti untuk mendukung CompilationMode.BaselineProfile dengan lebih baik. (Id7cac, b/192084204)
  • Ekstensi file detail migrasi telah diubah ke .perfetto-trace agar sesuai dengan standar platform. (I4c236, b/174663039)
  • StartupTimingMetric sekarang menampilkan metrik "FullDrawnMs" untuk mengukur waktu hingga aplikasi Anda selesai dirender. Untuk menentukan metrik ini bagi aplikasi Anda, panggil Activity.reportFullyDrawn ketika konten awal sudah siap, seperti saat item daftar awal dimuat dari DB atau jaringan. (Metode reportFullyDrawn tersedia tanpa pemeriksaan versi build pada ComponentActivity). Perhatikan bahwa pengujian harus berjalan cukup lama untuk menangkap metrik (startActivityAndWait tidak menunggu reportFullyDrawn). (If1141, b/179176560)
  • Mengurangi biaya penambahan metadata UI ke pelacakan hingga 50+ mdtk (Ic8390, b/193923003)
  • Frekuensi polling meningkat secara drastis saat berhenti melakukan pelacakan, yang dapat mengurangi hal-hal seperti runtime benchmark startup sebesar 30+% (Idfbc1, b/193723768)

Versi 1.1.0-alpha03

16 Juni 2021

androidx.benchmark:benchmark-*:1.1.0-alpha03 dirilis. Versi 1.1.0-alpha03 berisi commit ini.

Fitur Baru

Perbaikan Bug

  • Contoh kode Gradle untuk menekan error benchmark telah diperbarui untuk menggunakan API yang tidak dihentikan dengan sintaksis yang juga mendukung pengguna .gradle.kts.

    Misalnya,

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

Versi 1.1.0-alpha02

18 Mei 2021

Benchmark versi 1.1.0-alpha02 menghadirkan komponen penting untuk benchmarking - Macrobenchmark. Selain benchmark yang memungkinkan Anda mengukur loop CPU, macrobenchmark juga memungkinkan Anda mengukur interaksi seluruh aplikasi seperti startup dan scrolling, serta menangkap rekaman aktivitas. Untuk informasi lebih lanjut, lihat dokumentasi library.

androidx.benchmark:benchmark-*:1.1.0-alpha02 dirilis. Versi 1.1.0-alpha02 berisi commit ini.

Fitur Baru

Artefak macrobenchmark ditambahkan (androidx.benchmark:benchmark-macro-junit4 dan androidx.benchmark:benchmark-macro)

  • Merekam metrik performa startup, scrolling, atau animasi dari aplikasi, baik secara lokal maupun dalam CI
  • Merekam dan memeriksa rekaman aktivitas dari dalam Android Studio

Perbaikan Bug

  • Mengatasi masalah izin shell dengan direktori output di Android 12 (Catatan - mungkin memerlukan update Plugin Android Gradle ke 7.0.0 canary dan Android Studio ke Arctic Fox (2020.3.1) untuk terus mengambil file output di perangkat yang terpengaruh). (Icb039)
  • Mendukung penyimpanan konfigurasi dalam cache di BenchmarkPlugin (6be1c1, b/159804788)
  • Menyederhanakan output file - diaktifkan secara default, dalam direktori yang tidak memerlukan requestLegacyExternalStorage=true (8b5a4d, b/172376362)
  • Memperbaiki peringatan logcat pencetakan library tentang tidak menemukan thread JIT pada versi platform yang tidak memilikinya. (I9cc63, b/161847393)
  • Perbaikan untuk frekuensi maksimum perangkat membaca. (I55c7a)

Versi 1.1.0-alpha01

10 Juni 2020

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01, dan androidx.benchmark:benchmark-junit4:1.1.0-alpha01 dirilis. Versi 1.1.0-alpha01 berisi commit ini.

Fitur Baru Versi 1.1

  • Metrik Alokasi - Benchmark kini menjalankan fase tambahan setelah pemanasan dan pengaturan waktu, yang merekam penghitungan alokasi. Alokasi dapat menyebabkan masalah performa pada versi platform lama (140 nd di O menjadi 8 nd di M - diukur di Nexus5X, dengan frekuensi cpu terkunci). Metrik ini ditampilkan di output konsol Android Studio, serta di
  • Dukungan pembuatan profil - Anda kini dapat mengambil data pembuatan profil untuk menjalankan benchmark, guna memeriksa alasan kode Anda berjalan dengan lambat. Benchmark mendukung pengambilan data, baik dengan pelacakan metode, atau pengambilan sampel metode dari ART. File ini dapat diperiksa dengan Profiler di dalam Android Studio menggunakan File > Open.
  • Plugin Benchmark Gradle kini menyediakan setelan default untuk penyiapan yang lebih sederhana:
    • testBuildType ditetapkan untuk dirilis secara default, guna menghindari penggunaan dependensi dengan cakupan kode bawaan. BuildType rilis juga dikonfigurasi sebagai buildType default, yang memungkinkan Android Studio otomatis memilih varian build yang tepat saat membuka project untuk pertama kalinya. (b/138808399)
    • signingConfig.debug digunakan sebagai konfigurasi penandatanganan default (b/153583269)

** Perbaikan Bug **

  • Mengurangi overhead transisi pemanasan secara signifikan, ketika pengukuran pertama untuk setiap benchmark lebih tinggi dari pengukuran lainnya secara buatan. Masalah ini lebih jelas dalam benchmark yang sangat kecil (1 mikrodetik atau kurang). (b/142058671)
  • Memperbaiki error InstrumentationResultParser yang ditampilkan untuk setiap benchmark saat dijalankan dari command line. (I64988, b/154248456)

Masalah Umum

  • Command line, pemanggilan Gradle pada Benchmark tidak menampilkan hasil secara langsung. Anda dapat mengatasi masalah ini dengan menjalankan Studio, atau mengurai file output JSON untuk hasil.
  • Pelaporan Benchmark gagal mengambil laporan dari perangkat yang menginstal aplikasi dengan applicationId yang diakhiri dengan "android" atau "download" (tidak peka huruf besar/kecil). Pengguna yang memiliki masalah ini harus mengupgrade Plugin Android Gradle ke 4.2-alpha01 atau yang lebih baru.

Versi 1.0.0

Benchmark Versi 1.0.0

20 November 2019

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0, dan androidx.benchmark:benchmark-junit4:1.0.0 dirilis tanpa perubahan dari versi 1.0.0-rc01. Versi 1.0.0 berisi commit ini.

Fitur utama 1.0.0

Library Benchmark memungkinkan Anda menulis benchmark performa kode aplikasi dan mendapatkan hasilnya dengan cepat.

Hal ini mencegah masalah konfigurasi build dan runtime serta menstabilkan performa perangkat untuk memastikan bahwa pengukuran dilakukan secara akurat dan konsisten. Jalankan benchmark secara langsung di Android Studio, atau dalam Continuous Integration untuk mengamati performa kode dari waktu ke waktu, dan untuk mencegah regresi.

Fitur utama mencakup:

  • Stabilisasi jam
  • Penetapan prioritas thread otomatis
  • Dukungan untuk pengujian performa UI, seperti dalam Contoh RecyclerView
  • Perulangan dan pemanasan yang sensitif terhadap JIT
  • Output benchmark JSON untuk pascapemrosesan

Versi 1.0.0-rc01

23 Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01, dan androidx.benchmark:benchmark-junit4:1.0.0-rc01 dirilis. Versi 1.0.0-rc01 berisi commit ini.

Fitur baru

  • Menambahkan perekaman aktivitas systrace ke benchmark

Perbaikan bug

  • Memperbaiki masalah ketidakstabilan metrik dengan JIT yang tidak dapat diselesaikan sebelum pemanasan karena pembatalan prioritas (b/140773023)
  • Direktori output JSON terpadu di Plugin Android Gradle 3.5 dan 3.6

Versi 1.0.0-beta01

9 Oktober 2019

androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01, dan androidx.benchmark:benchmark-junit4:1.0.0-beta01 dirilis. Versi 1.0.0-beta01 berisi commit ini.

Fitur baru

  • Menjalankan pembersihan sampah memori sebelum pemanasan untuk mengurangi tekanan memori dari satu benchmark agar disebarkan ke benchmark berikutnya (b/140895105)

Perbaikan bug

  • Menambahkan dependensi androidx.annotation:android-experimental-lint sehingga kode Java akan menghasilkan error lint dengan benar ketika API eksperimental tidak digunakan, mirip dengan yang diberikan oleh anotasi eksperimental Kotlin untuk pemanggil Kotlin.
  • Penggunaan argumen instrumentasi additionalTestOutputDir kini dideteksi dengan benar untuk output di Plugin Android Gradle 3.6, untuk mengetahui kapan AGP akan menangani penyalinan data.
  • Memperbaiki frekuensi jam yang tidak terdeteksi di JSON agar mencetak -1 dengan benar (b/141945670).

Versi 1.0.0-alpha06

18 September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha06 dirilis. Versi 1.0.0-alpha06 berisi commit ini.

Fitur baru

  • Menambahkan pemeriksaan untuk kesalahan penggunaan paket lama bagi runner pengujian, yang kini memberikan pesan error yang lebih bermanfaat

Perubahan API

  • ExperimentalAnnotationReport anotasi eksperimental kini sudah beralih ke publik dengan benar. Penggunaan API BenchmarkState#report eksperimental kini mewajibkan anotasi ini

Versi 1.0.0-alpha05

5 September 2019

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha05 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perubahan API

  • API BenchmarkState.reportData kini ditandai sebagai eksperimental

Perbaikan bug

  • Perbaikan untuk skrip penguncian jam, yang sebelumnya gagal di perangkat yang tidak memiliki utilitas shell cut atau expr.
  • Memperbaiki masalah tugas ./gradlew lockClocks yang berhenti bekerja di perangkat yang telah di-root dengan versi lama utilitas su, yang tidak mendukung tanda -c.

Versi 1.0.0-alpha04

7 Agustus 2019

androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04, dan androidx.benchmark:benchmark-junit4:1.0.0-alpha04 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Dokumentasi baru juga telah ditambahkan untuk mengetahui cara menggunakan library Benchmark tanpa Gradle, baik untuk penggunaan dengan sistem build yang berbeda (seperti Bazel atau Buck) maupun saat menjalankan library ini di CI. Untuk informasi selengkapnya, lihat Mem-build benchmark tanpa Gradle dan Menjalankan benchmark dalam Continuous Integration.

Fitur baru

  • Plugin Gradle
    • Cakupan pengujian kini dinonaktifkan secara otomatis, dan AndroidBenchmarkRunner ditetapkan secara default (b/138374050)
    • Menambahkan dukungan untuk salinan data berbasis AGP baru, saat menentukan benchmark dan saat menggunakan AGP 3.6+
  • Penambahan format JSON
    • Menghasilkan output total waktu pengujian benchmark (b/133147694)
    • Benchmark @Parameterized yang menggunakan string nama (misalnya @Parameters(name = "size={0},depth={1}")) kini menghasilkan output nama parameter dan nilai per benchmark dalam output JSON (b/132578772)
  • Mode Dry Run (b/138785848)
    • Menambahkan mode "dry run" untuk menjalankan setiap loop benchmark sekali saja, guna memeriksa apakah ada error/fungsi yang terhenti tanpa merekam pengukuran. Hal ini bisa bermanfaat untuk, misalnya, menjalankan benchmark dengan cepat saat presubmit untuk memeriksa apakah ada kerusakan.

Perubahan API

  • Struktur modul telah diubah, dengan memisahkan library (b/138451391)
    • benchmark:benchmark-junit4 berisi class dengan dependensi JUnit: AndroidBenchmarkRunner, dan BenchmarkRule, yang keduanya telah dialihkan ke paket androidx.benchmark.junit4
    • benchmark:benchmark-common berisi logika lainnya, termasuk BenchmarkState API
    • Pemisahan ini memungkinkan library mendukung benchmark tanpa JUnit4 API di masa mendatang
  • Peringatan konfigurasi sekarang diperlakukan sebagai error, dan akan menyebabkan error pada pengujian (b/137653596)
    • Hal ini dilakukan untuk meningkatkan akurasi pengukuran, terutama di CI
    • Error ini dapat dikembalikan menjadi peringatan dengan argumen instrumentasi. Contoh: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

Perbaikan bug

  • Error saat menulis ke penyimpanan eksternal pada perangkat Android Q memberikan pesan yang lebih deskriptif, disertai saran cara menyelesaikan masalah tersebut
  • Layar otomatis menyala selama proses benchmark berlangsung, bukannya menggagalkan proses saat layar mati

Kontribusi eksternal

  • Terima kasih kepada Sergey Zakharov atas kontribusi peningkatan output JSON dan perbaikan untuk masalah layar mati!

Versi 1.0.0-alpha03

2 Juli 2019

androidx.benchmark:benchmark:1.0.0-alpha03 dan androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Fitur baru

  • Menunjukkan durasi tidur karena throttling termal per benchmark dalam laporan JSON lengkap

Perbaikan bug

  • Plugin Gradle tidak perlu lagi diterapkan setelah plugin Android dan blok Android
  • Menambahkan dukungan untuk laporan benchmark pada perangkat Android 10 yang menggunakan penyimpanan terbatas

Versi 1.0.0-alpha02

6 Juni 2019

androidx.benchmark:1.0.0-alpha02 dan androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.

Perlu diperhatikan bahwa kami memperlakukan skema JSON sebagai API. Kami akan mengikuti batasan stabilitas yang sama dengan API lainnya: stabil (dengan pengecualian yang sangat jarang) setelah dalam versi beta, dan ditetapkan dalam rilis final, dengan hanya beberapa penambahan pada rilis kecil dan perubahan/penghapusan dalam rilis besar.

Perubahan API

  • Merombak skema JSON. Perubahan lebih lanjut pada skema JSON kemungkinan dibatasi pada penambahan:

    • Mengatur ulang struktur objek hasil untuk mendukung grup metrik tambahan di masa mendatang (b/132713021)
    • Menambahkan informasi konteks pengujian, seperti informasi perangkat dan build serta apakah jam dikunci, ke objek tingkat teratas (b/132711920)
    • Metrik waktu sekarang memiliki 'ns' dalam namanya (b/132714527)
    • Menambahkan statistik tambahan per metrik yang dilaporkan (maksimum, median, minimum), dan menghapus statistik ringkasan 'nanos' yang disederhanakan (b/132713851)
  • Menghapus output XML (b/132714414)

  • Deteksi throttle termal dihapus dari BenchmarkState.reportData API (b/132887006)

Perbaikan bug

  • Memperbaiki ./gradlew lockClocks yang tidak menempel pada beberapa perangkat OS terbaru (b/133424037)
  • Deteksi throttle dinonaktifkan untuk emulator (b/132880807)

Versi 1.0.0-alpha01

7 Mei 2019

androidx.benchmark:benchmark:1.0.0-alpha01 dirilis. Commit yang disertakan dalam versi ini dapat dilihat di sini.