Macrobenchmark metriklerini yakalama

Metrikler, karşılaştırmalarınızdan elde edilen ana 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, bu dokümanın ilerleyen bölümlerinde ayrıntılı olarak ele alınmaktadı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 amacı almasından hedefin ilk karesini oluşturmasına kadar geçen süre Activity.
  • timeToFullDisplayMs: Sistemin bir başlatma amacı almasından uygulamanın reportFullyDrawn() yöntemi kullanılarak tamamen çizildiğini bildirmesine kadar geçen süredir. Ölçüm, reportFullyDrawn() çağrısından sonra veya reportFullyDrawn() çağrısını içeren ilk karenin oluşturulmasının tamamlanmasıyla durur. Bu ölçüm, Android 10 (API düzeyi 29) ve önceki sürümlerde kullanılamayabilir.

StartupTimingMetric, başlangıç iterasyonlarındaki minimum, ortanca ve maksimum değerleri döndürür. Startup'ların gelişimini değerlendirmek için ortanca değerlere, çünkü bunlar tipik başlatma süresine ilişkin en iyi tahmini sağlar. Uygulama başlatma süresini etkileyen 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ç.

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 son tarihini kaçırdığı süre. Pozitif sayılar, atlanan kare ve görünür sarsıntı 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: 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. yüzdelik dilim dağılımında toplanır.

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. İzleme bölümü, trace(sectionName) işlev çağrısı veya Trace.beginSection(sectionName) ile Trace.endSection() arasındaki kod ya da bunların ayarsız varyantları tarafından tanımlanır. Her zaman bir ölçüm sırasında yakalanan izleme bölümünün ilk örneğini seçer. Varsayılan olarak yalnızca paketinizdeki izleme bölümlerini gösterir. 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ç.

PowerMetric

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çilmeyen kategoriler "seçilmedi" metriğine eklenir.

Bu metrikler, uygulama başına değil, sistem genelinde tüketim 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: Bu kategorideki testinizin süresi boyunca birim zaman 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ş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ı
Şekil 5. PowerMetric sonuç.
ziyaret edin.