İ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:
Profil oluşturucuyu açın:
CPU zaman çizelgesi'ni tıklayın
Uygulamanıza, izlemek istediğiniz kullanıcı arayüzüne gidin ve ardından Sistem İzleme ve Kaydet'i seçin
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.
Grafikte bir composable'ı çift tıkladığınızda ilgili composable'ın kaynak koduna yönlendirilirsiniz.
Ayrıca composable'ları Flame Grafiği'nde dosya ve satır numarasıyla birlikte görebilirsiniz:
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
- Perfetto'da kullanarak bir 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
İzi yakalayın
- Uygulamayı başlatın ve izlemek istediğiniz bölümü hazırlayın.
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
Daha önce oluşturduğunuz kayıt komutunuzu başlatın.
İzi aç
adb pull <location>
cihazdan gelen iz (kayıt komutunda belirtilen konum).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:
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")
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.