Beste izleme

İzler, bir araştırmaya ilk kez bakıldığında çoğunlukla en iyi bilgi kaynağıdır. performans sorunu. Sorunun ne olduğuna dair bir hipotez oluşturmanızı sağlar nereden başlayacağınızı öğreteceğim.

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, uygulamanızın performansını çok fazla etkilemez. Sistem izleme, kodunuzun belirli bölümlerinin ne kadar süreceğini gerekir.

Yöntem izleme, uygulamanızdaki her işlev çağrısını izler. Bu çok pahalı uygulamanızın performansını büyük ölçüde etkiler. Yine de size toplamda hangi işlevlerin çağrıldığını ve bu işlevlerin çağrıldı.

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

Şu anda yeni sistem izleme işlevini test ediyoruz. işlevlerine göz atın. Sistemin fazla kesintiye uğramasını önler bir izleme teknolojisidir.

Kompozisyon izleme için ayarla

Projenizde yeniden düzenleme izlemeyi denemek için şu tarihte güncellemeniz gerekir: en az şu sürümler:

  • 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 minimum API düzeyinde olmalıdır 30.)

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şturmayı içeren bir sistem izlemesi aldığınızda, composable işlevlerini otomatik olarak görebilirsiniz.

Sistem izini alma

Sistem izini alıp yeni yeniden beste izlemeyi çalışırken görmek için şu adımları uygulayın:

  1. Profil düzenleyiciyi açın:

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

    Android Studio Profiler - CPU zaman çizelgesi
    Şekil 3. Android Studio Profiler - CPU zaman çizelgesi
    'nı inceleyin.
  3. Uygulamanızda, izlemek istediğiniz kullanıcı arayüzüne gidin ve ardından Sistem İzleme ve Kayıt

    İzleme seçenekleri - Sistem izleme
    Şekil 4. İzleme seçenekleri - Sistem izleme
    'nı inceleyin.
  4. Yeniden bestelemek ve kaydı durdurmak için uygulamanızı kullanın. İz işlendiğinden ve göründüğünü fark ederseniz artık composable'ları Google izin verdiğinden emin olun. Yakınlaştırmak ve kaydırmak için klavye ile fareyi kullanabilirsiniz izleyeceğim. Bir izde gezinme hakkında bilginiz yoksa Kayıt izleri belgeleri.

    Sistem izleme
    Şekil 5. Sistem izleme
    'nı inceleyin.

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

  5. Ayrıca Flame Chart'ta dosya ve satırla birlikte composable'ları da görebilirsiniz. numara:

    Flame grafiği
    Şekil 6. Flame grafiği
    'nı inceleyin.

Uyarılar

APK boyutu ek yükü

Özelliğin ek yükünü mümkün olduğunca en aza indirmeyi hedeflesek de izleme dizelerinden gelen Compose uygulamaları için APK boyutunda artış var Compose derleyici tarafından APK'ya yerleştirilmiş. Bu boyut artışı uygulamanız tam E-posta Yazma için çok fazla Oluştur veya daha büyük E-posta adresi kullanmıyorsa nispeten küçük Bu izleme dizeleri ayrıca kod karartmadığından izleme araçlarıyla ilgili temel bilgiler sağlar. Compose derleyicisi, bunları sürümlerinde en az 1.3.0 sürümünde geçerlidir.

İzleme dizeleri, üretim derlemenizden şu ProGuard kuralını uygulayın:

-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şebilecek olsa da tüm değişiklikler aşağıdaki bölümde belirtilecektir Sürüm notları oluştur.

APK boyutu maliyeti olur ancak bu dosyaları hesabınızda tutmanın, profili oluşturulan APK, uygulama kullanıcılarının çalıştırdığı APK ile aynıdır.

Doğru zamanlama

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

Terminalden iz yakala

Terminalden beste izi yakalanabilir. Bunu yapmak için Android Studio'nun normalde sizin için otomatik olarak yaptığı adımları uygulayın.

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 izin bilgisini adb pull <location> ( record (kaydet) komutundan oluşur).

  2. Perfetto'da açın.

Jetpack Macrobenchmark ile izleri yakalayın

Performansı Jetpack Macrobenchmark ile ölçebilirsiniz. Bu da izleri sonuç olarak gösterir. Kompozisyon izlemeyi etkinleştirmek için makro karşılaştırmaları için aşağıdakileri 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. androidx.benchmark.fullTracing.enable=true araç bağımsız değişkeni ekle en iyi uygulamaları görelim. Macrobenchmark enstrümantasyonunu kontrol edin bağımsız değişkenleri inceleyin. araç bağımsız değişkenlerine dahil değildir.

Geri bildirim

Bu özellikle ilgili bulduğunuz herhangi bir hata, geri bildirimlerinizi ve bahsetmek istiyorum. Bize sorun hakkında geri bildirim gönderebilirsiniz İzleyici.