Macrobenchmark metriklerini yakalama

Metrikler, karşılaştırmalarınızdan elde edilen temel bilgi türüdür. Bunlar, measureRepeated işlevine List olarak iletilir. Bu sayede, aynı anda birden fazla ölçülen metrik belirtebilirsiniz. Şu metrik için en az bir metrik türü gereklidir: pek çok yolu vardır.

Aşağıdaki kod snippet'inde kare zamanlaması ve özel izleme bölümü metrikleri yakalanır:

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ü çıktıda 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, 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 oluşturulan karelerden (ör. kaydırma veya animasyon) zamanlama bilgilerini yakalar ve aşağıdaki değerleri döndürü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. 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. Süre için milisaniye cinsinden minimum, medyan ve maksimum süreleri döndürür. İ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. 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, 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ç.