Beste izleme

Performans sorunlarını ilk kez incelerken genellikle en iyi bilgi kaynağı izlemelerdir. Bu bilgiler, sorunun ne olduğuna ve nereden başlayacağınıza dair bir hipotez oluşturmanıza olanak tanır.

Android'de desteklenen iki izleme düzeyi vardır: sistem izleme ve yöntem izleme.

Sistem izleme yalnızca izleme için özel olarak işaretlenmiş alanları izlediği için ek maliyeti düşüktür ve uygulamanızın performansını önemli ölçüde etkilemez. Sistem izleme, kodunuzun belirli bölümlerinin ne kadar sürede çalıştığını görmek için mükemmel bir yöntemdir.

Yöntem izleme, uygulamanızdaki her işlev çağrısını izler. Bu işlem çok pahalı olduğundan uygulamanızın performansını büyük ölçüde etkiler ancak neler olduğunun, hangi işlevlerin çağrıldığının ve ne sıklıkta çağrıldıklarının tam bir resmini sunar.

Sistem izlemeleri varsayılan olarak tek tek birleştirilebilir işlevleri içermez. Bunlar yöntem izlemelerinde kullanılabilir.

Şu anda sistem izlemeleri içinde birleştirilebilir işlevleri göstermek için yeni sistem izleme işlevini test ediyoruz. Sistem izlemenin düşük müdahalesini sağlar ve kompozisyonda yöntem izleme düzeyinde ayrıntılar sunar.

Kompozisyon izleme için ayarlama

Projenizde yeniden oluşturma izlemeyi denemek için en az aşağıdaki sürümlere güncellemeniz gerekir:

  • Android Studio Flamingo
  • Oluşturma kullanıcı arayüzü: 1.3.0
  • Compose Derleyici: 1.3.0

İzlemenizi çalıştırdığınız cihaz veya emülatör de en az API düzeyi 30 olmalıdır.

Ayrıca, Compose çalışma zamanı izlemeye yeni bir bağımlılık eklemeniz gerekir:

implementation("androidx.compose.runtime:runtime-tracing:1.7.5")

BOM oluşturma özelliğini kullanıyorsanız sürümü belirtmeniz gerekmez:

val composeBom = platform("androidx.compose:compose-bom:2024.10.01")
implementation(composeBom)
// ...

// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")

Bu bağımlılık sayesinde, yeniden derlemeyi içeren bir sistem izlemesi yaptığınızda birleştirilebilir işlevleri otomatik olarak görebilirsiniz.

Sistem izleme

Sistem izleme yapmak ve yeni yeniden oluşturma izlemenin işleyişini görmek için aşağıdaki adımları uygulayın:

  1. Profil oluşturucuyu açın:

    Android Studio - Profil Oluşturmayı Başlatma
    Şekil 2. Android Studio - Profil Oluşturmayı Başlat
  2. CPU zaman çizelgesi'ni tıklayın.

    Android Studio Profil Aracı - CPU zaman çizelgesi
    Şekil 3. Android Studio Profil Aracı - CPU zaman çizelgesi
  3. Uygulamanızda, izlemek istediğiniz kullanıcı arayüzüne gidin ve ardından Sistem İzleme'yi ve Kaydet'i seçin.

    İzleme seçenekleri - Sistem izleme
    Şekil 4. İzleme seçenekleri - Sistem izleme
  4. Yeniden derlemeye neden olmak ve kaydı durdurmak için uygulamanızı kullanın. İzleme işlendikten ve göründükten sonra, yeniden derleme izlemesinde bileşenleri görebilirsiniz. İzlemeyi yakınlaştırmak ve kaydırmak için klavye ve fareyi kullanabilirsiniz. İzlemede gezinme hakkında bilgi edinmek için İzleme kaydı dokümanlarını inceleyin.

    Sistem izleme
    Şekil 5. Sistem izleme

    Grafikteki bir bileşeni çift tıkladığınızda kaynak koduna yönlendirilirsiniz.

  5. Kompozitleri, dosya ve satır numarasıyla birlikte Alev Grafiği'nde de görebilirsiniz:

    Flame grafiği
    Şekil 6. Alev grafiği

Uyarılar

APK boyutu yükü

Özelliğin ek yükünü mümkün olduğunca en aza indirmeyi amaçlasak da Compose derleyicisi tarafından APK'ya yerleştirilen izleme dizelerinden gelen Compose uygulamaları için APK boyutunda bir artış söz konusudur. Uygulamanız çok fazla Oluştur işlevi kullanmıyorsa bu boyut artışı nispeten küçük olabilir. Tam Oluştur uygulamaları içinse daha büyük olabilir. Bu izleme dizeleri, daha önce gösterildiği gibi izleme araçlarında görünebilmeleri için ayrıca gizlenmez. Compose derleyicisi, 1.3.0 sürümünden itibaren bunları tüm uygulamalara ekler.

Aşağıdaki proguard kuralı ekleyerek üretim derlemenizdeki izleme dizelerini kaldırabilirsiniz:

-assumenosideeffects public class androidx.compose.runtime.ComposerKt {

   boolean isTraceInProgress();

   void traceEventStart(int,int,int,java.lang.String);

   void traceEventStart(int,java.lang.String);

   void traceEventEnd();

}

Bu işlevler gelecekte değişebilir ancak tüm değişiklikler, Oluştur sürüm notlarında belirtilir.

Bu dosyaları dahil tutmanın, APK boyutunda bazı maliyetlere neden olsa da profil oluşturulan APK'nın uygulama kullanıcılarının çalıştırdığı APK ile aynı olmasını sağladığını unutmayın.

Doğru zamanlama

Tüm performans testlerinde olduğu gibi, doğru profil oluşturmak için uygulamayı Profillenebilir uygulamalar'a göre profileable ve non-debuggable yapmanız gerekir.

Terminalden izleme yakalama

Terminalden bir kompozisyon izlemesi yakalamak mümkündür. Bunun için Android Studio'nun normalde sizin için otomatik olarak yaptığı adımları uygulamanız gerekir.

Bağımlılık ekleme

Öncelikle, ek bağımlılıkları uygulamanıza ekleyin.

implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")

Kayıt komutu oluşturma

  1. Perfetto'da kayıt komutu oluşturun.
  2. track_event veri kaynağı bölümünü aşağıdaki örneğe göre manuel olarak ekleyin:

    adb shell perfetto \
      -c - --txt \
      -o /data/misc/perfetto-traces/trace \
    <<EOF
    buffers: {
        size_kb: 63488
        fill_policy: RING_BUFFER
    }
    buffers: {
        size_kb: 2048
        fill_policy: RING_BUFFER
    }
    data_sources: {
        config {
            name: "track_event"
        }
    }
    duration_ms: 10000
    flush_period_ms: 30000
    incremental_state_config {
        clear_period_ms: 5000
    }
    EOF
    

İz yakalama

  1. Uygulamayı başlatın ve izlemek istediğiniz bölümü hazırlayın.
  2. Yayın yaparak uygulamada izlemeyi etkinleştirin.

    # set app package variable, e.g. com.google.samples.apps.nowinandroid.debug
    # can be found through `adb shell ps -ef` or `adb shell cmd package list packages`
    package=<your app process>
    
    # issue a broadcast to enable tracing
    adb shell am broadcast \
    -a androidx.tracing.perfetto.action.ENABLE_TRACING \
    $package/androidx.tracing.perfetto.TracingReceiver
    
  3. Daha önce oluşturduğunuz kayıt komutunu başlatın.

İzlemeyi açma

  1. adb pull <location> cihazdan gelen izleme (kaydet komutunda belirtilen konum).

  2. Perfetto'da açın.

Jetpack Macrobenchmark ile izleme kaydı oluşturma

Sonuç olarak izlemeler sağlayan Jetpack Macrobenchmark ile performansı ölçebilirsiniz. Makro referans değerleriyle kompozisyon izlemeyi etkinleştirmek için:

  1. Macrobenchmark test modülüne aşağıdaki ek bağımlılıkları ekleyin:

    implementation("androidx.tracing:tracing-perfetto:1.0.0")
    implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
    
  2. Karşılaştırmaları çalıştırmadan önce androidx.benchmark.fullTracing.enable=true enstrümantasyon bağımsız değişkenini ekleyin. Makro karşılaştırma enstrümantasyon bağımsız değişkenleri hakkında daha fazla bilgi için Makro karşılaştırma enstrümantasyon bağımsız değişkenleri başlıklı makaleyi inceleyin.

Geri bildirim

Bu özellikle ilgili geri bildirimlerinizi, bulduğunuz hataları ve isteklerinizi öğrenmekten memnuniyet duyarız. Sorun takipçisi üzerinden bize geri bildirim gönderebilirsiniz.