Performans sorunlarını ilk kez incelerken genellikle en iyi bilgi kaynağı izlemelerdir. 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ği için düşük maliyetlidir 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.
Varsayılan olarak sistem izleri bağımsız composable 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.0.0-beta01")
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 izini alma
Sistem izleme başlatmak ve yeni yeniden oluşturma izlemeyi çalışırken görmek için şu adımları izleyin:
Profil düzenleyiciyi açın:
CPU zaman çizelgesi'ni tıklayın
Uygulamanızda, izlemek istediğiniz kullanıcı arayüzüne gidin ve ardından Sistem İzleme'yi ve Kaydet'i seçin.
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. İzi yakınlaştırmak ve etrafta kaydırmak için klavyeyi ve fareyi kullanabilirsiniz. İzlerde gezinme konusunda bilginiz yoksa İzleme kaydı belgelerine bakın.
Grafikteki bir bileşeni çift tıkladığınızda kaynak koduna yönlendirilirsiniz.
Kompozitleri, dosya ve satır numarasıyla birlikte Alev Grafiği'nde de görebilirsiniz:
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 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, daha önce gösterildiği gibi izleme araçlarında görünebilmeleri için ayrıca gizlenmez. Compose derleyicisi, bunları 1.3.0 sürümünden itibaren 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.
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 izleme yakalama
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
- Perfetto'da kayıt komutu oluşturun.
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
- Uygulamayı başlatın ve izlemek istediğiniz bölümü hazırlayın.
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
Daha önce oluşturduğunuz kayıt komutunu başlatın.
İzi aç
adb pull <location>
cihazdan gelen izleme (kaydet komutunda belirtilen konum).Perfetto'da açın.
Jetpack Macrobenchmark ile izleme kaydı oluşturma
Sonuç olarak izlemeler sağlayan Jetpack Macrobenchmark ile performansı ölçebilirsiniz. Makrobenchmark'larla bileşim izlemeyi etkinleştirmek için şunları yapmanız gerekir:
Ş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")
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 enstrümantasyon bağımsız değişkenleri başlıklı makaleyi inceleyin.
Geri bildirim
Bu özellikle ilgili geri bildirimlerinizi, bu özellikte bulduğunuz hataları ve isteklerinizi öğrenmekten memnuniyet duyarız. Sorun takipçisi üzerinden bize geri bildirim gönderebilirsiniz.