Compose Uygulamalarında Performans Artışı: Baseline Profile Rehberi

Kerim Bora
Appcent
Published in
5 min readAug 12, 2024

--

Jetpack Compose ile harika arayüzler tasarlamak mümkün olsa da, performansı optimize etmek her zaman kolay olmayabilir. Bu yazıda, Android uygulamalarınızın performansını nasıl en üst düzeye çıkarabileceğinizi göstereceğim. Baseline Profiler’ı kullanarak Compose uygulamalarınızı daha hızlı ve verimli hale getirmek için atmanız gereken adımları adım adım inceleyeceğiz.

Baseline Profile Nedir ?

Baseline Profile, Android uygulamalarında performans optimizasyonu için kullanılan bir mekanizmadır. Bu profil, uygulamanızın en sık kullanılan ve performans açısından kritik olan kod yollarını tanımlar ve bu yolların önceden derlenmesini sağlar. Bu sayede, uygulama ilk açıldığında veya belirli bir işlem gerçekleştirildiğinde daha hızlı çalışır.

Normalde, Android uygulamalarının kodları çalıştırılmadan önce, Just-In-Time (JIT) derleyici tarafından derlenir. Bu, uygulamanın çalıştığı cihazda derlemenin gerçekleşmesi anlamına gelir, bu da başlangıç süresi ve işlem performansı üzerinde olumsuz etki yapabilir.

Baseline Profile ise bu süreci hızlandırmak için kullanılır. Uygulamanızın en sık kullanılan kod yollarını, önceden derlenmiş bir profil olarak paketlersiniz. Bu profil, uygulama yüklendiğinde cihazın önbelleğinde depolanır ve uygulama çalıştırıldığında, bu önceden derlenmiş kod yolları kullanılarak uygulamanız daha hızlı başlar ve daha akıcı bir performans sunar.

Özetle, Baseline Profile:

  • Uygulamanızın başlangıç süresini kısaltır.
  • En sık kullanılan işlevlerin daha hızlı çalışmasını sağlar.
  • Genel kullanıcı deneyimini iyileştirir.

Neden Önemlidir?

  • Kullanıcı deneyimini artırır ve uygulamanın daha akıcı çalışmasını sağlar. Özellikle düşük performanslı cihazlarda bu optimizasyonlar büyük fark yaratır.

Bu mekanizma, özellikle büyük ve karmaşık uygulamalarda performans iyileştirmeleri sağlamak için oldukça etkilidir ve Jetpack Compose gibi modern Android geliştirme araçlarıyla uyumlu olarak çalışır.

Geliştirme sürecini hızlandırmak için, Baseline Profilleri debug derlemeleri için değil, yalnızca release derlemeleri için yüklenir. Bu nedenle, profilinizin performans kazanımlarını görmek için her zaman bir release derlemesine karşı doğrulayın.

Verify performance gains only in release mode!

Baseline Profile Oluşturmak

Bu adımları izleyerek Baseline Profile oluşturabilirsiniz:

1. Android Studio’da Test Profili Oluşturma

Profil ve Benchmark Module: Baseline Profile oluşturmak için önce bir profil ve benchmark modülü eklemeniz gerekir.

Android Studio’da File > New > New Module > Baseline Profile Generator

Android Studio Iguana ve Android Gradle Plugin (AGP) 8.2'den itibaren kullanılabilen “Baseline Profile Generator” şablonunu kullanmaktır. Eğer daha eski bir versiyon kullanıyorsanız buraya göz atın.

2. BaselineProfile Rule Yazmak

Bu, modül içinde uygulamanızın sık kullanılan kod yollarını tanımlayan bir test sınıfı yazmanız gerekir. Bu testler, uygulamanızın hangi bölümlerinin performans açısından kritik olduğunu belirlemenize yardımcı olur.

Aşağıdaki örnekte “my_grid” testTag’ a sahip composeable’ ı kaydırmasını istiyorum.

Not: testTag() metodunu kullanabilmek için uygulamanızın kök view’ nı aşağıdaki gibi sarmalayın.

Rule yazmak ile ilgili daha detaylı bilgi için Android Developers’ da bulunan “Interoperability with UiAutomator” başlıklı makaleyi inceleyebilirsiniz

Modifier.semantics {
testTagsAsResourceId = true
}

Testler çalıştırıldığında, uygulamanın kod yolları toplanır ve bir profil dosyası oluşturulur. Bu profil, uygulamanızın en çok kullanılan bölümlerini ve performans açısından kritik olan işlemleri içerir.

3. Baseline Profile Dosyasını Üretme

Öncelikle release moda geçin (Build Variants > :app > release) daha sonra “Generate Baseline Profile for app” modülünü çalıştırın.

Test başarılı bir şekilde tamamlandıktan sonra, app/src/release/generated/baselineProfiles/baseline-prof.txt adında bir dosya oluşturuluyor

Görüldüğü üzere bu dosya, uygulamanızın en sık kullanılan kod yollarını içerir.

Generator başarıyla tamamlandığında, Gradle eklentisi oluşturulan baseline-prof.txt dosyasını otomatik olarak src/release/generated/baselineProfile/ klasöründeki hedef uygulamanıza (:app modülü) yerleştirir.🎉

Tebrikler, projenize başarılı bir şekilde Baseline Profile entegre ettiniz. 🎉

Test ve Optimize Etme

  • Test Çalıştırma: Baseline Profile’ı oluşturduktan sonra, bu profilin performans üzerindeki etkilerini test etmelisiniz. Profilin doğru kod yollarını içerdiğinden ve uygulamanızın performansını iyileştirdiğinden emin olun.

Aşağıdaki bağlantılardan nasıl test edeceğinizi ve test örneklerine göz atabilirisiniz.

  • Profilin Güncellenmesi: Uygulamanız geliştikçe ve değiştikçe, profilin de güncellenmesi gerekebilir. Bu yüzden profil testlerinizi düzenli olarak çalıştırmalı ve gerektiğinde profili güncellemelisiniz.

Sonraki Adımlar

Profil dosyanız uygulamanızla birlikte APK/AAB içine dahil edilir. Play Store üzerinden indirilen uygulamanız, bu profil sayesinde daha hızlı açılır ve daha iyi performans gösterir.

APK ve AAB Dosyalarını Analiz Etme

Baseline Profile oluşturduktan sonra APK/AAB dosyalarını inceleyelim. Şimdi, Temel Profillerin APK/AAB dosyalarınıza doğru şekilde entegre edilip edilmediğini ve kullanıcılara teslim edilmeye hazır olup olmadığını doğrulayabilirsiniz.

Projenizin APK/AAB dosyasını oluşturduktan sonra, Android Studio’da Build -> Analyze APK menüsü aracılığıyla açabilirsiniz.

APK/AAB dosyanızı açarsanız, gizlenmiş Baseline Profile APK için assets/dexopt/baseline.prof dizini altında veya AAB için BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof dizini altında bulabilirsiniz.

Eğer APK/AAR dosyanız baseline.prof dosyasını içeriyorsa, Dexopt uygulama performansını artırmak için aşağıdaki üç ana işlemi izleyecektir.

  • Dex to OAT Compilation: Başlangıçta, .dex dosyaları OAT (Optimized Android Application Package) adı verilen daha verimli bir formata dönüştürülür.
  • Ahead-of-Time (AOT) Compilation: Bu adım sırasında, OAT dosyaları önceden derlenerek daha da optimize edilir. Bu işlem, uygulamayı yüklediğiniz cihazın belirli CPU mimarisi için kodun optimize edilmesini içerir. Bir uygulamanın başlatılması için gereken süreyi azaltır ve genel çalışma zamanı performansını artırabilir.
  • Caching: Optimize edilmiş OAT dosyaları önbelleğe alınır, böylece uygulamanın sonraki başlatmalarında hızlı bir şekilde erişilebilir ve tekrarlanan optimizasyon ihtiyacı azalır.

Baseline Profile oluşturmak, uygulamanızın performansını artırmanın yanı sıra, kullanıcı deneyimini de önemli ölçüde iyileştirir. Bu adımları izleyerek, uygulamanızın performansını en üst düzeye çıkarabilirsiniz.

Bu yazıda bahsedilen örnek projeyi Github üzerinden inceleyebilirsiniz.

--

--