Ślady są często najlepszym źródłem informacji, gdy pierwszy raz analizujesz z wydajnością. Pozwalają też stworzyć hipotezę dotyczącą problemu od czego zacząć.
Na Androidzie obsługiwane są 2 poziomy śledzenia: śledzenie systemu i metoda tych danych.
Ponieważ funkcja śledzenia systemu śledzi tylko obszary specjalnie oznaczone do monitorowania, ma i nie mają dużego wpływu na działanie aplikacji. Systemowy śledzenie jest świetnym sposobem na sprawdzenie, ile czasu zajmuje wykonanie określonych sekcji kodu. do uruchomienia.
Śledzenie metod śledzi wszystkie wywołania funkcji w aplikacji. To bardzo drogie rozwiązanie co w dużym stopniu wpływa na wydajność aplikacji, ale daje też obraz tego, co się dzieje, jakie funkcje są wywoływane i jak często są wzywani.
Domyślnie logi systemowe nie obejmują poszczególnych funkcji kompozycyjnych. Są one dostępne w logach metod.
Obecnie testujemy nową funkcję śledzenia systemu, aby pokazać funkcję kompozycyjnej funkcji w śladach systemowych. Zmniejsza to uciążliwość systemu z różnymi poziomami szczegółowości kompozycji.
Skonfiguruj śledzenie kompozycji
Aby wypróbować śledzenie zmiany kompozycji w projekcie, musisz przejść na co najmniej w tych wersjach:
- Android Studio – flaming
- Interfejs tworzenia wiadomości: 1.3.0
- Kompilator Compose: 1.3.0
Urządzenie lub emulator, na którym uruchamiasz śledzenie, musi też mieć minimalny poziom interfejsu API 30)
Dodatkowo musisz dodać nową zależność od śledzenia środowiska wykonawczego Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
Dzięki tej zależności, gdy wykonujesz ślad systemu, który obejmuje zmianę kompozycji, funkcje kompozycyjne
Śledź system
Aby uruchomić ślad systemu i zobaczyć, jak działa nowe śledzenie zmiany kompozycji, wykonaj wykonaj te czynności:
Otwórz program profilujący:
.Kliknij Oś czasu procesora.
.Przejdź do interfejsu aplikacji, który chcesz śledzić, a następnie wybierz System Śledzenie i rejestrowania
.Aby zmienić kompozycję i zatrzymać nagrywanie, użyj aplikacji. Gdy ślad będzie już i pliki kompozycyjne zostały przetworzone, powinny być już widoczne ślad rekompozycji. Możesz używać klawiatury i myszy, aby powiększać i przesuwać elementy wokół śladu, jeśli nie wiesz, jak poruszać się po logu czasu, zobacz Dokumentacja rejestrowania logów czasu.
.Dwukrotne kliknięcie funkcji kompozycyjnej na wykresie spowoduje otwarcie jej kodu źródłowego.
Elementy kompozycyjne możesz też zobaczyć na wykresie płomieniowym wraz z plikiem i wierszem numer:
.
Uwagi
narzut związany z rozmiarem pliku APK
Naszym celem było zminimalizowanie kosztów związanych z obsługą funkcji, zwiększa się rozmiar plików APK aplikacji do tworzenia wiadomości pochodzących z ciągów śledzenia. umieszczone w pakiecie APK przez kompilator Compose. Zwiększenie rozmiaru może być jest stosunkowo mała, jeśli aplikacja nie używa zbyt wielu funkcji Utwórz lub większego. aplikacji. Ciągi tekstowe są dodatkowo niezaciemnione, więc mogą pojawiać się za pomocą narzędzi do śledzenia, jak pokazano wcześniej. Kompilator Compose wstrzykuje je do wszystkich od wersji 1.3.0.
Ciągi śledzące można usunąć z kompilacji produkcyjnej przez dodanie parametru 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();
}
W przyszłości te funkcje mogą ulec zmianie, ale wszelkie zmiany będą opisane w Informacje o wersji Utwórz.
Pamiętaj, że ich przechowywanie i koszty związane z określonym rozmiarem plików APK gwarantuje, profilowany plik APK jest taki sam jak pakiet aplikacji uruchamiany przez użytkowników.
Dokładny czas
Aby uzyskać dokładny profilowanie, tak jak w przypadku każdego testu skuteczności, trzeba:
profileable
i non-debuggable
zgodnie z aplikacjami profilowalnymi.
Zapisz log czasu z terminala
Zrzut kompozycji można przechwycić z terminala. Aby to zrobić, musisz: by wykonać czynności, które Android Studio zwykle wykonuje automatycznie.
Dodaj 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")
Wygeneruj polecenie rekordu
- Wygeneruj polecenie rekordu w Perfetto.
Dodaj ręcznie sekcję źródła danych
track_event
zgodnie 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
Zapisz ślad
- Uruchom aplikację i przygotuj sekcję, którą chcesz śledzić.
Włącz śledzenie w aplikacji, wysyłając komunikat.
# 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 wcześniej utworzone polecenie nagrywania.
Otwórz log czasu
adb pull <location>
śledzenie z urządzenia (lokalizacja określona w parametrze ).Otwórz w Perfetto.
Rejestrowanie logów przy użyciu Jetpack Macrobenchmark
Skuteczność możesz mierzyć za pomocą narzędzia Jetpack Macrobenchmark, który udostępnia logi czasu jako wyniki. Aby włączyć śledzenie kompozycji za pomocą musisz:
Dodaj do modułu testu Macrobenchmark te dodatkowe zależności:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Dodaj
androidx.benchmark.fullTracing.enable=true
argument instrumentacji przed przeprowadzeniem testów porównawczych. Sprawdź narzędzia analizy porównawczej Argumenty, aby dowiedzieć się więcej o analizie porównawczej argumentów instrumentacji.
Opinia
Chętnie dowiemy się, co myślisz o tej funkcji, o wszelkich błędach, i wszelkie inne prośby. Możesz przesłać nam opinię, na stronie zgłoszenia .