Macrobenchmark metriklerini yakalama

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, FrameTimingMetric ve PowerMetric, 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ı.
1. şekil. TraceSectionMetric ve FrameTimingMetric sonuçları.

StartupTimingMetric

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

  • timeToInitialDisplayMs: Sistemin bir başlatma isteği aldığı andan hedefteki ilk kareyi oluşturduğu ana kadar geçen süre Activity.
  • timeToFullDisplayMs: Sistem bir başlatma amacı aldığında geçen süreden, uygulamanın reportFullyDrawn() yöntemi kullanılarak tamamen çizildiğini bildirdiği zamana kadar geçen süre. Ölçüm, reportFullyDrawn() ç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 süresindeki iyileşmeyi değerlendirmek için ortanca değerlere odaklanmanız gerekir. Çünkü ortanca değerler, tipik başlatma süresinin en iyi tahminini 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 Bir karşılaştırma testi tarafından üretilen karelerden (ör. kaydırma veya animasyon) zamanlama bilgilerini alır ve aşağıdaki değerleri verir:

  • frameOverrunMs: Belirli bir karenin son tarihi ne kadar süreyle kaçırdığı. Pozitif sayılar, kare düşmesi ve görünür titreme veya takılma olduğunu gösterir. 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: Karelerin hem kullanıcı arayüzü iş parçacığında hem de RenderThread üzerinde CPU'da oluşturulması için gereken 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ı
3.şekil FrameTimingMetric sonuçlar.

TraceSectionMetric

TraceSectionMetric Belirtilen sectionName ile eşleşen bir iz bölümünün kaç kez gerçekleştiğini ve ne kadar sürdüğünü gösterir. Süre için minimum, medyan ve maksimum süreleri milisaniye cinsinden verir. İzleme bölümü, işlev çağrısı trace(sectionName) veya Trace.beginSection(sectionName) ile Trace.endSection() arasındaki kod ya da bunların asenkron varyantları tarafından 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 etkinlikleri tanımlama başlıklı makaleleri inceleyin.

TraceSectionMetric
Şekil 4. TraceSectionMetric sonuçlar.

PowerMetric

PowerMetric, sağlanan güç kategorileri için testiniz süresince güç veya enerjideki değişimi yakalar. Seçilen her kategori, ölçülebilir alt bileşenlerine ayrılır. Seçilmeyen kategoriler ise "seçilmeyen" metriğine eklenir.

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

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

Kategoriler arasında şunlar yer alır:

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

CPU gibi bazı kategorilerde, diğer işlemlerin yaptığı işi kendi uygulamanızın yaptığı işten ayırmak zor olabilir. Girişimi en aza indirmek için gereksiz uygulamaları ve hesapları kaldırın veya kısıtlayın.

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