Metrikler, karşılaştırmalarınızdan elde edilen ana bilgi türüdür. Bunlar, measureRepeated
işlevine List
olarak iletilir. Bu sayede, aynı anda birden fazla ölçülen metrik belirtebilirsiniz. Karşılaştırmanın çalıştırılması için en az bir metrik türü gereklidir.
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
, RecyclerView
içinde tanımlanan izlenebilir blokların kimlikleridir. createViewHolder()
yönteminin kaynak kodu, kendi kodunuzda nasıl izlenebilir bloklar tanımlayabileceğinize dair bir örnektir.
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 gönderilir. Birden fazla metrik tanımlanırsa bunların tümü çıktıda birleştirilir.
StartupTimingMetric
StartupTimingMetric
aşağıdaki değerlerle uygulama başlatma zamanlaması metriklerini yakalar:
timeToInitialDisplayMs
: Sistemin bir başlatma amacı almasından hedefin ilk karesini oluşturmasına kadar geçen süreActivity
.timeToFullDisplayMs
: Sistemin bir başlatma amacı almasından uygulamanınreportFullyDrawn()
yöntemi kullanılarak tamamen çizildiğini bildirmesine kadar geçen süredir. Ölçüm,reportFullyDrawn()
çağrısından sonra veyareportFullyDrawn()
ç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, medyan ve maksimum değerleri döndürür. Tipik başlatma süresiyle ilgili en iyi tahmini sağladıkları için, başlatma süresindeki iyileşmeyi değerlendirmek üzere ortanca değerlere odaklanmanız gerekir. 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.
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 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 daha 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ığında hem deRenderThread
'da CPU'da üretilmesi için geçen süre.
Bu ölçümler 50., 90., 95. ve 99. yüzdelik dilim dağılımında toplanır.
Yavaş kareleri tespit etme ve iyileştirme hakkında daha fazla bilgi için Yavaş oluşturma başlıklı makaleyi inceleyin.
TraceSectionMetric
TraceSectionMetric
sağlanan sectionName
ile eşleşen bir izleme bölümünün kaç kez gerçekleştiğini ve bu işlemin ne kadar sürdüğünü yakalar. Süre için milisaniye cinsinden minimum, medyan ve maksimum süreleri gösterir. İ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.
PowerMetric
PowerMetric
, sağlanan güç kategorileri için testiniz süresince güç veya enerjideki değişikliği yakalar.
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 tüketimi değil sistem genelindeki tüketimi ölçer ve Pixel 6, Pixel 6 Pro ve sonraki modellerle sınırlıdır:
power<category>Uw
: Bu kategorideki testiniz sırasında tüketilen güç miktarı.energy<category>Uws
: Bu kategorideki testinizin süresi boyunca birim zaman başına aktarılan enerji miktarı.
Kategoriler arasında şunlar yer alır:
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.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Temel profiller oluşturma {:#creating-profile-rules}
- Makro karşılaştırma yazma
- Uygulama başlatma analizi ve optimizasyonu {:#app-startup-analysis-optimization}