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ı.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üreActivity.timeToFullDisplayMs: Sistemin bir başlatma intent'i almasından uygulamanınreportFullyDrawn()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ç.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 deRenderThreadü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ç.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 sonuç.Sizin için önerilenler
- Not: JavaScript devre dışı bırakıldığında 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}