Beste izleme

İzler, genellikle bir performans sorununu ilk kez incelerken en iyi bilgi kaynağıdır. Sorunun ne olduğu ve nereden aramaya başlanacağı konusunda bir hipotez oluşturmanıza imkan tanırlar.

Android'de sistem izleme ve yöntem izleme olmak üzere iki izleme düzeyi desteklenir.

Sistem izleme yalnızca izlenmek üzere özel olarak işaretlenmiş alanları izlediğinden, düşük ek yüke sahiptir ve uygulamanızın performansını çok fazla etkilemez. Sistem izleme, kodunuzun belirli bölümlerinin ne kadar sürdüğünü görmek için idealdir.

Yöntem izleme, uygulamanızdaki her işlev çağrısını izler. Bu çok pahalıdır ve uygulamanızın performansını büyük ölçüde etkiler, ancak neler olup bittiğine, hangi işlevlerin çağrıldığına ve ne sıklıkta çağrıldıklarına dair genel bir resim sunar.

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

Şu anda sistem izlemelerinin içindeki composable işlevleri göstermek için yeni sistem izleme işlevini test ediyoruz. Kompozisyondaki ayrıntı seviyelerini takip etme yöntemiyle sistem izlemede müdahalenin düşük düzeyde olmasını sağlar.

Bileşim izleme için kurulum

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

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

İzinizi ç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ı İzleme'ye 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 izleme al

Bir sistem izlemesi alıp yeni yeniden oluşturma izlemeyi çalışırken görmek için şu adımları uygulayın:

  1. Profil oluşturucuyu açın:

    Android Studio - Profil oluşturmaya başlama
    Ş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ıza, izlemek istediğiniz kullanıcı arayüzüne gidin ve ardından Sistem İzleme ve Kaydet'i seçin

    İzleme seçenekleri - Sistem izleme
    Şekil 4. İzleme seçenekleri: Sistem izleme
  4. Yeniden düzenlemeyi sağlamak ve kaydı durdurmak için uygulamanızı kullanın. İz işlendikten ve göründükten sonra, artık yeniden oluşturma izlemesinde composable'ları görebilirsiniz. İzi yakınlaştırmak ve kaydırmak için klavye ve fareyi kullanabilirsiniz. Bir izde gezinmeye aşina değilseniz İzlemeleri kaydetme dokümanlarına bakın.

    Sistem izleme
    Şekil 5. Sistem izleme

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

  5. Ayrıca composable'ları Flame Grafiği'nde 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 hedeflemiş olsak da, Compose derleyicisi tarafından APK'ya yerleştirilmiş izleme dizelerinden gelen Compose uygulamalarında APK boyutunda bir artış var. Uygulamanız tam Compose uygulamaları için çok fazla Compose veya daha geniş bir yelpaze kullanmıyorsa bu boyut artışı nispeten küçük olabilir. Bu izleme dizeleri, daha önce gösterildiği gibi izleme araçlarında görünebilmeleri için ayrıca kod karartma sürecinden geçmez. 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.

Bunları hariç tutmanın, belirli bir APK boyutu maliyetine neden olsa da, profili oluşturulan APK'nın, uygulama kullanıcılarının çalıştırdığı APK ile aynı olacağını garanti ettiğini unutmayın.

Doğru zamanlama

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

Terminalden iz yakalayın

Terminalden bir bileşim izi yakalamak mümkündür. Bunu yapmak için, Android Studio'nun normalde sizin için otomatik olarak uyguladığı adımları uygulamanız gerekir.

Bağımlılık 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
    

İzi yakalayın

  1. Uygulamayı başlatın ve izlemek istediğiniz bölümü hazırlayın.
  2. Yayın göndererek 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. adb pull <location> cihazdan gelen iz (kayıt komutunda belirtilen konum).

  2. Perfetto'da açın.

Jetpack Makrobenchmark ile iz yakalayın

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

  1. Aşağıdaki ek bağımlılıkları Makrobenchmark 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 enstrümantasyon bağımsız değişkenini ekleyin. Makrobenchmark araçları bağımsız değişkenleri hakkında daha fazla bilgi için Makrobenchmark araçları bağımsız değişkenleri bölümünü kontrol edin.

Geri bildirim

Bu özellikle ilgili geri bildirimlerinizi, bu özellikle ilgili hataları ve görüşlerinizi öğrenmek isteriz. Sorun izleyici aracılığıyla bize geri bildirim gönderebilirsiniz.