Beste izleme

İzler genellikle bir performans sorununu ilk kez incelerken en iyi bilgi kaynağıdır. Sorunun ne olduğuna ve nerede araştırmaya başlayacağınıza dair bir hipotez oluşturmanızı sağlar.

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ğinden, ek yükü düşüktür ve uygulamanızın performansını büyük ölçüde etkilemez. Sistem izleme, kodunuzun belirli bölümlerinin ne kadar süre çalıştığını görmek için idealdir.

Yöntem izleme, uygulamanızdaki her işlev çağrısını takip eder. Bu yöntem çok pahalı olduğundan uygulamanızın performansını önemli ölçüde etkiler. Ancak neler olduğu, hangi işlevlerin çağrıldığı ve ne sıklıkta çağrıldığı konusunda size genel bir fikir verir.

Varsayılan olarak sistem izleri bağımsız composable işlevleri içermez. Yöntem izlerinde mevcuttur.

Şu anda sistem izleri içindeki derlenebilir işlevleri göstermek için yeni sistem izleme işlevini test ediyoruz. Bu özellik, bileşimdeki ayrıntı seviyeleriyle yöntem izleme sayesinde sistem izlemeye daha az müdahale edebilmenizi sağlar.

Kompozisyon izleme için ayarla

Projenizde yeniden düzenleme izlemeyi denemek için en azından aşağıdaki sürümlere güncelleme yapmanız gerekir:

  • Android Studio Flamingo
  • Compose kullanıcı arayüzü: 1.3.0
  • Oluşturma 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ı İzlemesi'ne yeni bir bağımlılık eklemeniz gerekir:

implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")

Bu bağımlılıkla yeniden oluşturma içeren bir sistem izlemesi aldığınızda composable işlevleri otomatik olarak görebilirsiniz.

Sistem izini alma

Sistem izleme başlatmak ve yeni yeniden oluşturma izlemeyi çalışırken görmek için şu adımları izleyin:

  1. Profil düzenleyiciyi açın:

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

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

    İzleme seçenekleri - Sistem izleme
    Şekil 4. İzleme seçenekleri - Sistem izleme
  4. Yeniden bestelemek ve kaydı durdurmak için uygulamanızı kullanın. İz işlenip göründükten sonra, composable'ları yeniden oluşturma izlerinde görebilirsiniz. İzi yakınlaştırmak ve etrafta kaydırmak için klavyeyi ve fareyi kullanabilirsiniz. İzlerde gezinme hakkında bilginiz yoksa İzleme kaydı belgelerine bakın.

    Sistem izleme
    Şekil 5. Sistem izleme

    Grafikteki bir composable'ı çift tıkladığınızda ilgili composable'ın kaynak koduna yönlendirilirsiniz.

  5. Ayrıca, composable'ları Flame Chart'ta dosya ve satır numarasıyla birlikte görebilirsiniz:

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

Uyarılar

APK boyutu ek yükü

Özelliğin ek yükünü mümkün olduğunca en aza indirmeyi amaçlasak da, Compose derleyici tarafından APK'ya yerleştirilmiş izleme dizelerinden gelen Compose uygulamaları için bir APK boyutu artışı söz konusudur. Uygulamanız tam Compose uygulamaları için çok fazla Compose veya daha büyük resim kullanmıyorsa bu boyut artışı nispeten küçük olabilir. Bu izleme dizeleri ayrıca kod karartılmadığı için daha önce gösterildiği gibi izleme araçlarında görünebilir. Compose derleyicisi, bunları 1.3.0 sürümünden itibaren tüm uygulamalara ekler.

İzleme dizeleri, aşağıdaki ProGuard kuralı eklenerek üretim derlemenizden kaldırılabilir:

-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 belirtilecektir.

Bir miktar APK boyutu maliyeti olsa da bu parametreleri burada tutmanın, profili oluşturulan APK'nın uygulama kullanıcılarının çalıştırdığı APK ile aynı olmasını garanti edeceğini unutmayın.

Doğru zamanlama

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

Terminalden iz yakala

Terminalden beste izi yakalanabilir. Bunun için Android Studio'nun normalde sizin için otomatik olarak yaptığı adımları uygulamanız gerekir.

Bağımlılıkları ekleme

Öncelikle uygulamanıza ek bağımlılıkları 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 kullanarak bir 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 yakalayın

  1. Uygulamayı başlatın ve izlemek istediğiniz bölümü hazırlayın.
  2. Bir yayın yayınlayarak 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 komutunuzu başlatın.

İzi aç

  1. Cihazdaki izlemeyi adb pull <location> (kayıt komutunda belirtilen konum).

  2. Perfetto'da açın.

Jetpack Macrobenchmark ile izleri yakalayın

Performansı, sonuç olarak izler sağlayan Jetpack Macrobenchmark ile ölçebilirsiniz. Makrobenchmark'larla bileşim izlemeyi etkinleştirmek için şunları yapmanız gerekir:

  1. Şu ek bağımlılıkları Macrobenchmark test modülüne 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 araç bağımsız değişkeni ekleyin. Macrobenchmark enstrümantasyon bağımsız değişkenleri hakkında daha fazla bilgi için Macrobenchmark araç bağımsız değişkenlerine göz atın.

Geri bildirim

Bu özellikle ilgili geri bildiriminizi, ürünle ilgili bulduğunuz hataları ve varsa isteklerinizi duymak isteriz. Sorun izleyici aracılığıyla bize geri bildirim gönderebilirsiniz.