Macrobenchmark metriklerini yakalama

Metrikler, karşılaştırmalarınızdan elde edilen temel bilgi türüdür. Onlar measureRepeated bir List işlevi görür; bu anahtar, birçok metriği kullanabilirsiniz. Şu metrik için en az bir metrik türü gereklidir: pek çok yolu vardır.

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

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 aşağıdaki tabloda tanımlanan izlenebilir blokların kimlikleridir: RecyclerView. İlgili içeriği oluşturmak için kullanılan createViewHolder() için kaynak kodu yöntemi, kendi özgeçmişinizdeki izlenebilir blokları nasıl tanımlayabileceğinize girin.

StartupTimingMetric TraceSectionMetric, FrameTimingMetric ve PowerMetric daha ayrıntılı değineceğiz.

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 sonuçlar FrameTimingMetric.

StartupTimingMetric

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

  • timeToInitialDisplayMs: Sistemin verileri aldığı andan itibaren geçen süredir. hedefin ilk karesini oluşturulduğunda başlatma amacı Activity
  • timeToFullDisplayMs: Sistemin bir istek almaya başlamasından itibaren uygulamanın rapor oluşturma amacı kullanılarak tamamen çizilmesi reportFullyDrawn() yöntemidir. İlk kare oluşturulduktan sonra ölçüm durur reportFullyDrawn() görüşmesinden sonra veya sonrasında Bu Ölçüm özelliği, Android 10 (API düzeyi 29) ve önceki sürümlerde kullanılamayabilir.

StartupTimingMetric, başlangıçtaki minimum, ortanca ve maks. değerleri bildirir iterasyonlar ile yürütüldüğü anlamına gelir. Startup'lardaki iyileşmeyi değerlendirmek için ortanca değerlere, çünkü tipik başlatma süresine ilişkin en iyi tahmini sağlarlar. Daha fazla uygulama başlatma süresine neyin katkıda bulunduğu hakkında daha fazla bilgi için bkz. Uygulama başlatma zaman ekleyin.

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

FrameTimingMetric

FrameTimingMetric Bir karşılaştırma tarafından üretilen karelerden zamanlama bilgilerini yakalar (örneğin, kaydırmayı veya animasyonu gösterir ve aşağıdaki değerleri çıkarır:

  • 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 üretilmesi için gereken süre hem kullanıcı arayüzü iş parçacığı hem de RenderThread üzerindeki CPU.

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

Yavaş kareleri belirleme ve iyileştirme hakkında daha fazla bilgi için şuraya bakın: Yavaş oluşturma.

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

TraceSectionMetric

TraceSectionMetric sağlanan sectionName ile eşleşen iz bölümünün sayısını yakalar. gereken zaman dilimini ölçtüğünden emin olun. Öğrendikleri için minimum değeri verir, ortanca değeri ve milisaniye cinsinden maksimum süre. İz bölümü, (fonksiyon çağrısıyla) trace(sectionName) veya Trace.beginSection(sectionName) ve Trace.endSection() veya eşzamansız varyantları. Her zaman iz bölümünün ilk örneğini seçer otomatik olarak yakalar. Yalnızca paketinizdeki iz bölümlerinin çıktısını verir Varsayılan olarak dahil etmek için bazı targetPackageOnly = false

İzleme hakkında daha fazla bilgi için, bkz. Sisteme genel bakış izleme ve Özel tanımla etkinlikler ile ilgili daha fazla bilgi edinin.

TraceSectionMetric
Şekil 4. TraceSectionMetric sonuç.

GüçMetriği

PowerMetric yakalama sağlanan alan için testiniz süresince güç veya enerji değişimi güç kategorileri. Seçilen her kategori, ölçülebilir alt bileşenlerine ayrılır ve seçilmemiş kategoriler, "seçilmeyenler" bölümüne eklenir metriğine karşılık gelir.

Bu metrikler, uygulama başına değil, sistem genelinde tüketimdir ve sınırlıdır Pixel 6, Pixel 6 Pro ve sonraki model cihazlara yükseltme:

  • power<category>Uw: oluşturma işleminiz boyunca tüketilen güç miktarı test edebilirler.
  • energy<category>Uws: için zaman birimi başına aktarılan enerji miktarı testinizin süresini gösterir.

Kategoriler aşağıdakileri içerir:

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

CPU gibi bazı kategorilerde, yapılan işleri ekip üyelerine göre ayırmak zor olabilir. diğer işlemler de dahil edilir. Paraziti en aza indirmek için Gereksiz uygulamaları ve hesapları kaldırabilir ya da kısıtlayabilir.

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