Macrobenchmark metriklerini yakalama

Metrikler, karşılaştırmalarınızdan elde edilen temel bilgi türüdür. Bunlar, ölçülen birden fazla metriği aynı anda belirtmenize olanak tanıyan List olarak measureRepeated işlevine iletilir. 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 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ğinize dair bir örnektir.

StartupTimingMetric, TraceSectionMetric, FrameTimingMetric ve PowerMetric bu belgenin ilerleyen bölümlerinde 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ı.

StartupTimingMetric

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

  • timeToInitialDisplayMs: Sistemin bir başlatma niyetini alması ile hedefin Activity ilk karesini oluşturmasına kadar geçen süredir.
  • timeToFullDisplayMs: Sistemin bir başlatma niyeti aldığı andan reportFullyDrawn() yöntemi kullanılarak uygulamanın tamamen raporlandığı ana kadar geçen süredir. Ölçüm, reportFullyDrawn() çağrısından sonraki (veya bunu 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şlatma yinelemelerinden minimum, ortanca ve maksimum değerlerini çıkarır. Başlangıç iyileştirmesini değerlendirmek için ortanca değerlere odaklanmalısınız. Çünkü bunlar tipik başlatma süresine ilişkin en iyi tahmini sağlar. Uygulamanın başlatılma süresine katkıda bulunan öğeler 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ç.

FrameTimingMetric

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

  • frameOverrunMs: Belirli bir karenin teslim tarihini kaçırdığı süre. Pozitif sayılar, atlanmış bir kare ve görünür olumsuzluk 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şturulması için gereken süredir.

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

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

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

TraceSectionMetric

TraceSectionMetric, sağlanan sectionName ile eşleşen bir iz bölümünün kaç kez gerçekleştiğini ve geçen süreyi yakalar. Süre için minimum, ortanca ve maksimum süreleri milisaniye cinsinden bildirir. İ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 eşzamansız varyantlarıyla tanımlanır. Her zaman, ö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ümlerinin çıktısını verir. 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 bölümlerine bakın.

TraceSectionMetric
Şekil 4. TraceSectionMetric sonuç.

GüçMetriği

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 ve seçilmeyen kategoriler "seçilmemiş" metriğe eklenir.

Bu metrikler uygulama başına tüketimi değil, sistem genelindeki tüketimi ölçer ve 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 birim 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, diğer işlemlerin yaptığı işleri kendi uygulamanız tarafından yapılan işlerden ayırmak zor olabilir. Müdahaleyi en aza indirmek için gereksiz uygulama ve hesapları kaldırın veya kısıtlayın.

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