Ś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 miejsca, w którym należy rozpocząć poszukiwania.
W Androidzie obsługiwane są 2 poziomy śledzenia: śledzenie systemu i śledzenie metod.
Śledzenie systemu śledzi tylko obszary oznaczone do śledzenia, dlatego ma niewielki narzut i nie wpływa znacząco na wydajność aplikacji. Śledzenie systemu jest przydatne do sprawdzania, jak długo działają poszczególne sekcje kodu.
Śledzenie metod śledzi każde wywołanie funkcji w aplikacji. Jest to bardzo kosztowne i dlatego 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 systemu nie obejmują poszczególnych funkcji typu „composable”. Są one dostępne w śladach metod.
Śledzenie kompozycji pokazuje funkcje typu „composable” w śladach systemu. Ta funkcja zapewnia niski poziom ingerencji śledzenia systemu oraz poziom szczegółowości śledzenia metod w kompozycji.
Konfiguracja śledzenia kompozycji
Aby wypróbować śledzenie rekompozycji w projekcie, musisz zaktualizować go co najmniej do tych wersji:
- Android Studio Flamingo
- Compose UI: 1.3.0
- Compose Compiler: 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 Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.11.0")
Jeśli używasz Compose BOM, nie musisz określać wersji:
val composeBom = platform("androidx.compose:compose-bom:2026.04.01")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Dzięki tej zależności, gdy wykonasz śledzenie systemu obejmujące rekompozycję, możesz automatycznie zobaczyć funkcje typu „composable”.
Wykonaj śledzenie systemu
Aby wykonać śledzenie systemu i zobaczyć, jak działa nowe śledzenie rekompozycji, 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 następnie wybierz Śledzenie systemu i Nagraj.
Rysunek 4. Opcje śledzenia – śledzenie systemu Użyj aplikacji, aby spowodować rekompozycję, i zatrzymaj nagrywanie. Gdy ślad zostanie przetworzony i się pojawi, powinny być widoczne funkcje typu „composable” w śladzie rekompozycji. Do powiększania i przesuwania śladu możesz używać klawiatury i myszy . Jeśli nie wiesz, jak poruszać się po śladzie, zapoznaj się z dokumentacją dotyczącą rejestrowania śladów.
Rysunek 5. Śledzenie systemu Dwukrotne kliknięcie funkcji typu „composable” na wykresie powoduje przejście do jej kodu źródłowego.
Funkcje typu „composable” możesz też zobaczyć na wykresie płomieniowym wraz z numerem pliku i wiersza:
Rysunek 6. Wykres płomieniowy
Ograniczenia
Narzut rozmiaru pliku APK
Staraliśmy się jak najbardziej zminimalizować narzut tej funkcji, ale w przypadku aplikacji Compose występuje wzrost rozmiaru pliku APK spowodowany ciągami śledzenia osadzonymi w pliku APK przez kompilator Compose. Ten wzrost rozmiaru może być stosunkowo niewielki, jeśli aplikacja nie używa zbyt wielu funkcji Compose, lub większy w przypadku aplikacji w pełni opartych na Compose. Te ciągi śledzenia są dodatkowo niezaszyfrowane, dzięki czemu mogą się pojawiać w narzędziach do śledzenia, jak pokazano wcześniej. Kompilator Compose wstawia je do wszystkich aplikacji, począwszy od wersji 1.3.0.
Ciągi śledzenia można usunąć w kompilacji 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();
}
Te funkcje mogą się w przyszłości zmienić, ale wszelkie zmiany zostaną opisane w informacjach o wersji Compose.
Pamiętaj, że pozostawienie tych funkcji w aplikacji, choć zwiększa rozmiar pliku APK, zapewnia, że profilowany plik APK jest taki sam jak ten, który uruchamiają użytkownicy aplikacji.
Dokładny pomiar czasu
Aby uzyskać dokładne profilowanie, podobnie jak w przypadku testów wydajności, musisz ustawić
aplikację profileable i non-debuggable zgodnie z opisem w sekcji Aplikacje profilowane.
Rejestrowanie śladu z terminala
Możesz zarejestrować ślad kompozycji z terminala. Aby to zrobić, musisz wykonać czynności, które Android Studio zwykle wykonuje automatycznie.
Dodawanie zależności
Najpierw dodaj dodatkowe zależności do aplikacji.
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ą w 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 śladu
- 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.TracingReceiverUruchom polecenie nagrywania utworzone wcześniej.
Otwieranie śladu
adb pull <location>ślad z urządzenia (lokalizacja określona w poleceniu nagrywania).Otwórz w Perfetto.
Rejestrowanie śladu za pomocą Jetpack Macrobenchmark
Wydajność możesz mierzyć za pomocą Jetpack Macrobenchmark, która udostępnia ślady jako wyniki. Aby włączyć śledzenie kompozycji za pomocą testów porównawczych, 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 argument instrumentacji
androidx.benchmark.fullTracing.enable=true. Więcej informacji o argumentach instrumentacji Macrobenchmark znajdziesz w artykule Argumenty instrumentacji Macrobenchmark.
Prześlij opinię
Chętnie poznamy Twoją opinię na temat tej funkcji, wszelkie znalezione przez Ciebie błędy i Twoje prośby. Możesz przesłać nam opinię za pomocą narzędzia do śledzenia problemów.