Macrobenchmark metriklerini yakalama

Kavramlar ve Jetpack Compose uygulaması

Metrikler, karşılaştırmalarınızdan çıkarılan temel bilgi türüdür. Bu metrikler, measureRepeated işlevine List olarak iletilir. Bu sayede, aynı anda birden fazla ölçülen metrik belirtebilirsiniz. Karşılaştırmanın çalışması için en az bir metrik türü gereklidir.

Aşağıdaki kod snippet'i, kare zamanlaması ve özel izleme bölümü metriklerini yakalar:

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
    // ...
);

Bu örnekte, RV CreateView ve RV OnBindView, RecyclerView içinde tanımlanan izlenebilir blokların kimlikleridir. createViewHolder() yönteminin kaynak kodu , kendi kodunuzda izlenebilir blokları nasıl tanımlayabileceğinize dair bir örnektir.

StartupTimingMetric, TraceSectionMetric ve FrameTimingMetric bu belgenin ilerleyen bölümlerinde ayrıntılı olarak ele alınmaktadır. Metriklerin tam listesi için Metric alt sınıflarına göz atın.

Karşılaştırma sonuçları, Şekil 1'de gösterildiği gibi Android Studio'ya aktarılır. Birden fazla metrik tanımlanırsa bunların tümü çıkışta birleştirilir.

TraceSectionMetric ve FrameTimingMetric sonuçları.
Şekil 1. TraceSectionMetric ve FrameTimingMetric sonuçları.

StartupTimingMetric

StartupTimingMetric, uygulama başlatma zamanlaması metriklerini aşağıdaki değerlerle yakalar:

  • timeToInitialDisplayMs: Sistem bir başlatma amaçlı isteği aldığında hedef Activity ilk karesini oluşturana kadar geçen süre.
  • timeToFullDisplayMs: Sistem bir başlatma amacı aldığında geçen süreden, uygulama reportFullyDrawn() yöntemini kullanarak tamamen çizildiğini bildirene kadar geçen süre. Ölçüm, çağrısından sonraki veya reportFullyDrawn() çağrısını içeren ilk karenin oluşturulması tamamlandığında durur. Bu ölçüm, Android 10 (API düzeyi 29) ve önceki sürümlerde kullanılamayabilir.

StartupTimingMetric, başlangıç yinelemelerindeki minimum, medyan ve maksimum değerleri verir. Başlatma iyileştirmesini değerlendirmek için her zaman ortanca değerlere odaklanın. Çünkü bu değerler, tipik kullanıcı başlatma süreleriyle ilgili en iyi tahmini sağlar. Uygulama başlatma süresine katkıda bulunan faktörler hakkında daha fazla bilgi için Uygulama başlatma süresi başlıklı makaleyi inceleyin.

StartupTimingMetric sonuçları
Şekil 2. StartupTimingMetric sonuçlar.

FrameTimingMetric

FrameTimingMetric, kaydırma veya animasyon gibi bir karşılaştırma ölçütü tarafından üretilen karelerden zamanlama bilgilerini alır ve aşağıdaki değerleri verir:

  • frameOverrunMs: Belirli bir karenin son tarihi kaçırdığı süre. Pozitif sayılar, görünür duraklama veya takılma ile birlikte kare düşmesini gösterir. Negatif sayılar, bir karenin alt sistem donanım son tarihine kıyasla ne kadar daha hızlı tamamlandığını gösterir. Not: Bu metrik yalnızca Android 12 (API düzeyi 31) ve sonraki sürümlerde kullanılabilir.
  • frameDurationCpuMs: Karelerin hem kullanıcı arayüzü iş parçacığında hem de RenderThread'de CPU üzerinde oluşturulması için geçen süre.

Bu ölçümler 50., 90., 95. ve 99. yüzdelik dilim dağılımı şeklinde toplanır.

Yavaş kareleri belirleme ve iyileştirme hakkında daha fazla bilgi için Yavaş oluşturma başlıklı makaleyi inceleyin.

FrameTimingMetric sonuçları
Şekil 3. FrameTimingMetric sonuçlar.

TraceSectionMetric

TraceSectionMetric, belirli bir izleme bölümünün kaç kez gerçekleştiğini ve yürütülmesinin ne kadar sürdüğünü gösterir. Süre takibi için minimum, ortalama ve maksimum süreleri milisaniye cinsinden verir.

Hedef izleme bölümü, trace(sectionName) işlev çağrısıyla veya Trace.beginSection(sectionName) ile Trace.endSection() arasındaki alt düzey blok sınırlarıyla ya da bunların eşzamansız varyantlarıyla tanımlanır. Ölçüm sırasında yakalanan bir izleme bölümünün ilk örneğini her zaman seçer. Varsayılan olarak yalnızca paketinizdeki izleme bölümlerini çıkarır. Paketinizin dışındaki işlemleri dahil etmek için targetPackageOnly = false değerini ayarlayın.

İzleme hakkında daha fazla bilgi için Sistem izlemeye genel bakış ve Özel etkinlikler tanımlama başlıklı makaleleri inceleyin.

TraceSectionMetric
Şekil 4. TraceSectionMetric sonuçlar.