Macrobenchmark metriklerini yakalama

Metrikler, karşılaştırmalarınızdan elde edilen ana bilgi türüdür. Bunlar, measureRepeated işlevine List olarak aktarılır ve tek seferde birden fazla ölçülen metrik belirtmenize olanak tanır. Karşılaştırmanın çalışması için en az bir metrik türü gereklidir.

Aşağıdaki kod snippet'i, kare zamanlamasını ve özel iz 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ğinizi gösteren bir örnektir.

StartupTimingMetric, TraceSectionMetric, FrameTimingMetric ve PowerMetric bu belgenin ilerleyen kısımlarında ayrıntılı olarak ele alınmıştır.

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ı.

BaşlangıçZamanlamasıMetriği

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

  • timeToInitialDisplayMs: Sistemin başlatma amacı alması ile hedefin ilk karesini oluşturması arasında geçen süre Activity.
  • timeToFullDisplayMs: Sistemin başlatma amacı alması ile uygulama raporlarının reportFullyDrawn() yöntemi kullanılarak tamamen çizilmesine kadar geçen süre. Ölçüm, reportFullyDrawn() çağrısından sonraki veya onu 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ıç yinelemelerinden minimum, medyan ve maksimum değerleri verir. Ortalama değerler tipik başlangıç süresi için en iyi tahmini sağladıklarından, başlangıçtaki iyileştirmeyi değerlendirirken ortanca değerlere odaklanmalısınız. Uygulamaların başlatma süresine nelerin katkıda bulunduğu hakkında daha fazla bilgi için Uygulama başlatma süresi bölümüne bakın.

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

KareZamanlama Metriği

FrameTimingMetric, bir karşılaştırma tarafından oluşturulan karelerden (kaydırma veya animasyon gibi) zamanlama bilgilerini yakalar ve şu değerleri verir:

  • frameOverrunMs: Belirli bir karenin son teslim tarihini kaçırdığı süre. Pozitif sayılar bir karenin düştüğünü ve görünür duraklama veya takılmayı belirtir. Negatif sayılar, bir karenin son tarihten ne kadar hızlı olduğunu gösterir. Not: Bu özellik yalnızca Android 12 (API düzeyi 31) ve sonraki sürümlerde kullanılabilir.
  • frameDurationCpuMs: Karenin hem kullanıcı arayüzü iş parçacığı hem de RenderThread üzerindeki CPU'da oluşturulma süresi.

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

Yavaş kareleri belirleme ve iyileştirme hakkında daha fazla bilgi edinmek için Yavaş oluşturma bölümüne bakın.

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

İzBölümMetriği

TraceSectionMetric, sağlanan sectionName ile eşleşen bir iz bölümünün kaç kez gerçekleştiğini ve ne kadar sürdüğünü yakalar. Zaman için minimum, ortanca ve maksimum süre değerlerini milisaniye cinsinden verir. İz bölümü, trace(sectionName) işlev çağrısı veya Trace.beginSection(sectionName) ile Trace.endSection() arasındaki kod ya da bunların eşzamansız varyantları tarafından tanımlanır. Her zaman bir ölçüm sırasında yakalanan iz bölümünün ilk örneğini seçer. Varsayılan olarak paketinizden yalnızca iz 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 etkinlikleri tanımlama bölümlerine göz atın.

İzBölümMetriği
Şekil 4. TraceSectionMetric sonuç.

Güç Metriği

PowerMetric, sağlanan güç kategorileri için testiniz boyunca güç veya enerji değişimini gösterir. Seçilen her kategori, ölçülebilir alt bileşenlerine ayrılır ve seçilmeyen kategoriler "seçilmemiş" metriğine eklenir.

Bu metrikler, tüketimi uygulama bazında değil, sistem genelindeki tüketimi ölçer. Bu metrikler Pixel 6, Pixel 6 Pro ve sonraki model cihazlarla sınırlıdır:

  • power<category>Uw: Bu kategorideki testiniz boyunca tüketilen güç miktarı.
  • energy<category>Uws: Bu kategorideki testiniz boyunca zaman birimi başına aktarılan enerji miktarı.

Kategoriler aşağıdakileri içerir:

  • CPU
  • DISPLAY
  • GPU
  • GPS
  • MEMORY
  • MACHINE_LEARNING
  • NETWORK
  • UNCATEGORIZED

CPU gibi bazı kategorilerde, başka işlemler tarafından yapılan işleri kendi uygulamanızın yaptığı işlerden ayırmak zor olabilir. Paraziti en aza indirmek için gereksiz uygulamaları ve hesapları kaldırın veya kısıtlayın.

PowerMetric sonuçları
Şekil 5. PowerMetric sonuç.