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ı.](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames_tracing.png?authuser=6&hl=tr)
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 hedefinActivity
ilk karesini oluşturmasına kadar geçen süredir.timeToFullDisplayMs
: Sistemin bir başlatma niyeti aldığı andanreportFullyDrawn()
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ı](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_fully_drawn_startup.png?authuser=6&hl=tr)
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 deRenderThread
ü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ı](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_frames.png?authuser=6&hl=tr)
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](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_tracing.png?authuser=6&hl=tr)
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ı](https://developer.android.com/static/topic/performance/images/benchmark_images/macrobenchmark_results_power.png?authuser=6&hl=tr)
PowerMetric
sonuç.Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Temel Profiller Oluşturma {:#create-profile-rules}
- Macrobenchmark yazma
- Uygulama başlatma analizi ve optimizasyonu {:#app-startup-analysis-OPT}