Macrobenchmark metriklerini yakalama

Kavramlar ve Jetpack Compose uygulaması

Metrikler, karşılaştırmalarınızdan elde edilen temel bilgi türüdür. Bunlar, measureRepeated işlevine List olarak iletilir. Bu sayede, birden fazla ölçülen metriği aynı anda belirtebilirsiniz. Karşılaştırmanın çalışması için en az bir metrik türü gereklidir.

Aşağıdaki kod snippet'i, kare süresi 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 ve FrameTimingMetric bu belgenin ilerleyen kısımlarında 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ı.
Şekil 1. TraceSectionMetric ve FrameTimingMetric sonuçları.

StartupTimingMetric

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

  • timeToInitialDisplayMs: Sistemin başlatma intent'ini almasından hedefin ilk karesini oluşturmasına kadar geçen süre Activity.
  • timeToFullDisplayMs: Sistemin bir başlatma intent'i almasından uygulamanın reportFullyDrawn() yöntemini kullanarak tamamen çizildiğini bildirmesine kadar geçen süre. Ölçüm, reportFullyDrawn() çağrısından sonraki veya bu çağrıyı içeren ilk kare oluşturulduktan sonra durur. Bu ölçüm, Android 10 (API düzeyi 29) ve önceki sürümlerde kullanılamayabilir.

StartupTimingMetric, başlangıç iterasyonlarından minimum, medyan ve maksimum değerleri verir. Başlatma süresindeki iyileşmeyi değerlendirirken her zaman ortanca değerlere odaklanın. Bu değerler, tipik kullanıcı başlatma sürelerinin en iyi tahminini 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 (ör. kaydırma veya animasyon) zamanlama bilgilerini yakalar ve aşağıdaki değerleri döndürür:

  • frameOverrunMs: Belirli bir karenin son tarihini kaçırdığı süre. Pozitif sayılar, görünür takılma veya titremenin eşlik ettiği kare düşüşünü gösterir. Negatif sayılar, bir karenin alt sistem donanım son tarihine göre ne kadar hızlı tamamlandığını gösterir. Not: Bu metrik 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ığında hem de RenderThread üzerinde CPU'da üretilmesi için geçen süre.

Bu ölçümler %50, %90, %95 ve %99'luk dilim dağılımında toplanır.

Yavaş kareleri nasıl tanımlayacağınız ve iyileştireceğiniz hakkında daha fazla bilgi için Yavaş oluşturma başlıklı makaleyi inceleyin.

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

TraceSectionMetric

TraceSectionMetric, belirli bir izleme bölümünün kaç kez gerçekleştiğini ve yürütülmesinin ne kadar sürdüğünü gösterir. Zaman takibi için minimum, medyan ve maksimum süreleri milisaniye cinsinden verir.

Hedef izleme bölümü, trace(sectionName) işlev çağrısı veya Trace.beginSection(sectionName) ile Trace.endSection() arasındaki alt düzey blok sınırları ya da bunların eş zamansız varyantları tarafından tanımlanır. Her zaman, ö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 çı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ç.