Proje iyileştirmenin başarısı, performans süreçlerini başarılı yapabilmekten geçmektedir.
Bu makale, Jetpack Macrobenchmark kütüphanesi ile Android uygulamanızın performansını ölçmeyi ve performans iyileştirmelerini nasıl yapacağınızı açıklayacaktır.
Jetpack Macrobenchmark Nedir?
Jetpack Macrobenchmark, Android uygulamanızın performansını ölçmek için kullanılan kitaplıktır. Jetpack Macrobenchmark ile şunları yapabilirsiniz:
- Uygulamayı başlatma sürecinin performans ölçümleri
- Uygulamanızın derleme durumunu kontrol edebilme
- Activity’ler arası gezinme, scroll listeleri veya diğer tüm UI çalışmaları ile ilgili performans ölçümleri
Jetpack Macrobenchmark, Android Studio’da doğrudan performans sonuçlarını sağlar ve sonuçları bir JSON dosyasına yazar. Bu sayede sürekli entegrasyonda (CI) performans testi için uygun hale getirir.
Projeye Benchmark Nasıl Eklenir?
Macrobenchmark kullanabilmek için projenize yeni bir Gradle modülü eklemeniz gerekir. Arctic Fox 2020.3.1 sürümünde yapılacak işlemler sırasıyla şunlardır. (Diğer üst sürümler için adımları developer Google dokümantasyonundan erişebilirsiniz.)
- Proje isminizin üstüne sağ click yapın.
- New -> Module alanını seçiniz.
- Template alanındaki Benchmark menüsünü seçiniz.
- Benchmark module type alanını Macrobenchmark olarak seçiniz ve Finish butonuna tıklayınız.
- AndroidManifest dosyasınızda <application> tag arasına aşağıdaki kodu eklemelisiniz.
123<profileableandroid:shell="true"tools:targetApi="q" />
Üsteki işlemleri yaptığınızda Android Studio otomatik oluşturduğu durumlar:
- Makrobenchmark’lar için bir com.android.test modülünü oluşturur.
- Benchmark gradle dosyasında buildTypes kod blokları arasına aşağıdaki bölümü ekler.
1234benchmark {debuggable = truesigningConfig = debug.signingConfig}
Uygulamayı Kullanıma Başlama Süresinin Ölçümü
Kullanıcılar, uygulamaların duyarlı ve hızlı yüklenmesini bekler. Başlangıç zamanı yavaş olan bir uygulama bu beklentiyi karşılamaz ve kullanıcılar için hayal kırıklığı yaratabilir. Bu türden kötü bir deneyim, bir kullanıcının Play Store’da uygulamanızı düşük derecelendirmesine veya hatta uygulamanızı tamamen terk etmesine neden olabilir.
Bu bölüm, uygulamanızın başlatma süresini optimize etmenize yardımcı olacaktır. Uygulama başlatma süresini macrobenchmarks ile ölçmek için aşağıdaki gibi bir @Test yazabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@RunWith(AndroidJUnit4::class) class StartupBenchmark { @get:Rule val benchmarkRule = MacrobenchmarkRule() @Test fun startup() = benchmarkRule.measureRepeated( packageName = "com.google.samples.apps.sunflower", metrics = listOf(StartupTimingMetric()), iterations = 5, startupMode = StartupMode.COLD, ){ pressHome() startActivityAndWait() } } |
Makrobenchmark’lar JUnit sözdizimini kullanırlar. Örneğin, @RunWith, @Rule, @Test, vb. Bir benchmark yazarken, MacrobenchmarkRule’un MeasureRepeated işlevini kullanırız. Burada kullanılan parametrelerin açıklamaları:
packageName: Benchmark ayrı bir modülde çalıştığından, hangi uygulamanın performansının ölçüleceğini belirtmemiz gerekir.
metrics: Uygulamanızın başlamasının ne kadar sürdüğünü gösteren parametre
measureBlock: Macrobenchmark, bu blok sırasında tanımlanan metrikleri izleyecek ve kaydedecektir. Burada ölçmek istediğiniz işlemleri gerçekleştiriyorsunuz.
İsteğe bağlı olarak, ayrıca CompilationMode ve StartupMode’u da belirtebilirsiniz.
CompilationMode, uygulamanın makine kodunda nasıl önceden derlendiğini tanımlar ve aşağıdaki seçeneklere sahiptir.
None() – Uygulamayı önceden derlemez. Ancak JIT uygulamanın yürütülmesi sırasında hala etkindir.
Partial() – Uygulamayı Baseline Profiles ile önceden derler.
Full() – Tüm uygulamayı önceden derler. Android 6 (API 23) ve önceki sürümlerdeki tek seçenek budur.
StartupMode, karşılaştırmanızın başlangıcında uygulamanızın nasıl başlatılması gerektiğini tanımlamanıza olanak tanır. Mevcut seçenekler SCOLD,WARM, ve HOT. Uygulamanızın yapması gereken en büyük işi temsil eden StartupMode.COLD ile başlayabilirsiniz.
Benchmark’ı Çalıştırma
Uygulamanızın cihazınızdaki performansını ölçmek için testi Android Studio içinden çalıştırın. Aşağıdaki resimde gösterildiği gibi, test sınıfınızın veya metodunuzun yanında simgeyi seçerek çalıştırabilirsiniz.
Benchmark Sonuçları
Benchmark çalıştırdıktan sonra metrikler doğrudan Android Studio’da görüntülenir ve bir JSON dosyasında CI kullanımı için çıktılar oluşur. Ölçülen her yineleme, ayrı bir sistem izini yakalar. Aşağıdaki resimde gösterildiği gibi Test Results bölmesindeki bağlantılardan birine tıklayarak bu sonuç izlerini açabilirsiniz.
Sonuçlar, uygulamanızın başlamasının ne kadar sürdüğü (timeToInitialDisplayMs) hakkında milisaniye cinsinden zamanlama sağlar. Sonuçların her biri, başlangıcın nasıl göründüğünü daha fazla araştırmak ve onu optimize etmek için harekete geçmek için Android Studio’da açabileceğiniz bir sistem izine sahip bir bağlantıdır.
Trace dosyası yüklendikten sonra Studio, sonuçları CPU profil oluşturucu aracında gösterir.
Kaynaklar
1-https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview
2-https://medium.com/androiddevelopers/measure-and-improve-performance-with-macrobenchmark-560abd0aa5bb