Ślady są często najlepszym źródłem informacji, gdy po raz pierwszy analizujesz problem z wydajnością. Pozwalają one sformułować hipotezę dotyczącą problemu i określić, od czego zacząć poszukiwania.
Android obsługuje 2 poziomy śledzenia: śledzenie systemu i śledzenie metod.
Śledzenie systemu śledzi tylko obszary specjalnie oznaczone do śledzenia, dlatego ma niewielki narzut i nie wpływa znacząco na wydajność aplikacji. Śledzenie systemu to świetny sposób na sprawdzenie, ile czasu zajmuje wykonanie poszczególnych sekcji kodu.
Śledzenie metod rejestruje każde wywołanie funkcji w aplikacji. Jest to bardzo kosztowne i ma duży wpływ na wydajność aplikacji, ale daje pełny obraz tego, co się dzieje, jakie funkcje są wywoływane i jak często.
Domyślnie ślady systemowe nie obejmują poszczególnych funkcji kompozycyjnych. Są one dostępne w śladach metod.
Śledzenie kompozycji pokazuje funkcje typu „composable” w śladach systemowych. Ta funkcja zapewnia niski poziom ingerencji śledzenia systemu z poziomami śledzenia metody w szczegółach kompozycji.
Konfigurowanie śledzenia kompozycji
Aby wypróbować śledzenie ponownego komponowania w projekcie, musisz zaktualizować go do co najmniej tych wersji:
- Android Studio Flamingo
- Compose UI: 1.3.0
- Kompilator Compose: 1.3.0
Urządzenie lub emulator, na którym uruchamiasz śledzenie, musi mieć co najmniej poziom API 30.
Musisz też dodać nową zależność od śledzenia środowiska wykonawczego Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.9.3")
Jeśli używasz zestawu Compose, nie musisz określać wersji:
val composeBom = platform("androidx.compose:compose-bom:2025.10.01")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Dzięki tej zależności podczas tworzenia śladu systemowego, który obejmuje ponowne komponowanie, możesz automatycznie wyświetlać funkcje kompozycyjne.
Wykonaj śledzenie systemu
Aby wykonać śledzenie systemu i zobaczyć w działaniu nowe śledzenie ponownego komponowania, wykonaj te czynności:
- Otwórz profiler:   - Rysunek 2 Android Studio – rozpocznij profilowanie 
- Kliknij Oś czasu procesora.   - Rysunek 3. Profiler Android Studio – oś czasu procesora 
- Otwórz w aplikacji interfejs, który chcesz śledzić, a potem wybierz Ślad systemowy i Nagrywaj.   - Rysunek 4. Opcje śledzenia – śledzenie systemu 
- Użyj aplikacji, aby spowodować ponowne komponowanie i zatrzymać nagrywanie. Po przetworzeniu śladu i jego wyświetleniu w śladzie ponownego komponowania powinny być widoczne funkcje kompozycyjne. Aby powiększać i przesuwać ślad, możesz używać klawiatury i myszy. Jeśli nie wiesz, jak poruszać się po śladzie, zapoznaj się z dokumentacją nagrywania śladów.   - Rysunek 5. Śledzenie systemu - Dwukrotne kliknięcie elementu kompozycyjnego na wykresie powoduje przejście do jego kodu źródłowego. 
- Wykres płomieniowy zawiera też funkcje kompozycyjne oraz numer pliku i wiersza:   - Rysunek 6. Wykres płomieniowy 
Uwagi
Dodatkowy rozmiar pliku APK
Staraliśmy się jak najbardziej zminimalizować obciążenie związane z tą funkcją, ale w przypadku aplikacji napisanych w Compose rozmiar pliku APK wzrośnie z powodu ciągów śledzenia osadzonych w pliku APK przez kompilator Compose. Wzrost rozmiaru może być stosunkowo niewielki, jeśli aplikacja nie korzysta w dużym stopniu z Compose, lub większy w przypadku aplikacji w pełni opartych na Compose. Te ciągi śledzenia są dodatkowo niezaszyfrowane, dzięki czemu mogą pojawiać się w narzędziach do śledzenia, jak pokazano wcześniej. Kompilator Compose wstrzykuje je do wszystkich aplikacji, począwszy od wersji 1.3.0.
Ciągi śledzenia można usunąć w wersji produkcyjnej, dodając tę regułę Proguard:
-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();
}
Funkcje te mogą się zmienić w przyszłości, ale wszelkie zmiany będą wymienione w informacjach o wersji Compose.
Pamiętaj, że zachowanie funkcji, choć wiąże się z pewnym kosztem rozmiaru pliku APK, zapewnia, że profilowany plik APK jest taki sam jak ten, którego używają użytkownicy aplikacji.
Dokładne pomiary czasu
Aby uzyskać dokładne profilowanie, podobnie jak w przypadku wszystkich testów wydajności, musisz przygotować aplikację profileable i non-debuggable zgodnie z wytycznymi dotyczącymi aplikacji, które można profilować.
Uzyskiwanie śladu z terminala
Ślad kompozycji można uzyskać z terminala. Aby to zrobić, musisz wykonać czynności, które Android Studio zwykle wykonuje automatycznie.
Dodawanie zależności
Najpierw dodaj do aplikacji dodatkowe zależności.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Generowanie polecenia nagrywania
- Wygeneruj polecenie nagrywania za pomocą Perfetto.
- Ręcznie dodaj sekcję źródła danych - track_eventzgodnie z tym przykładem:- 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
Rejestrowanie logu czasu
- Uruchom aplikację i przygotuj sekcję, którą chcesz śledzić.
- Włącz śledzenie w aplikacji, wysyłając transmisję. - # 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
- Uruchom polecenie nagrywania utworzone wcześniej. 
Otwórz ślad
- adb pull <location>ślad z urządzenia (lokalizacja określona w poleceniu zapisu);
- Otwórz w Perfetto. 
Rejestrowanie śladu za pomocą biblioteki Jetpack Macrobenchmark
Skuteczność możesz mierzyć za pomocą Jetpack Macrobenchmark, która podaje wyniki w postaci śladów. Aby włączyć śledzenie kompozycji za pomocą testów porównawczych makro, musisz:
- Dodaj te dodatkowe zależności do modułu testowego Macrobenchmark: - implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
- Przed uruchomieniem testów porównawczych dodaj - androidx.benchmark.fullTracing.enable=trueargument instrumentacji. Więcej informacji o argumentach instrumentacji Macrobenchmark znajdziesz w artykule Argumenty instrumentacji Macrobenchmark.
Opinia
Chętnie poznamy Twoją opinię o tej funkcji, wszelkie znalezione w niej błędy i Twoje prośby. Możesz przesłać nam opinię, korzystając z narzędzia do rejestrowania błędów.
