Ś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.
Śledzenie systemowe śledzi tylko obszary specjalnie oznaczone do śledzenia, więc ma niewielkie obciążenie i nie wpływa znacząco na wydajność aplikacji. Systemowy śledzenie jest świetnym sposobem na sprawdzenie, ile czasu zajęły konkretne sekcje 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 śladach metody.
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.
Konfigurowanie śledzenia 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ć co najmniej poziom API 30.
Dodatkowo musisz dodać nowe zależności od funkcji śledzenia w komponencie Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
Dzięki tej zależności, gdy wykonasz śledzenie systemu, które obejmuje rekompozycję, funkcje kompozytowe będą automatycznie widoczne.
Śledź system
Aby przeprowadzić śledzenie systemu i zobaczyć nowe śledzenie rekompozycji w akcji:
Otwórz profilator:
Kliknij Oś czasu procesora.
Przejdź w aplikacji do interfejsu, który chcesz prześledzić, a potem wybierz System, Śledź i Nagrywaj.
Użyj aplikacji, aby spowodować ponowne skompilowanie i zatrzymać nagrywanie. Gdy ślad będzie już i pliki kompozycyjne zostały przetworzone, powinny być już widoczne ślad rekompozycji. Za pomocą klawiatury i myszy możesz powiększać i przesuwać widok ścieżki. Jeśli nie wiesz, jak się po niej poruszać, zapoznaj się z dokumentacją dotyczącą nagrywania ścieżek.
Kliknięcie dwukrotnie kompozytowalności na wykresie powoduje przejście do jej kodu źródłowego.
Elementy kompozycyjne możesz też zobaczyć na wykresie płomieniowym wraz z plikiem i wierszem numer:
Uwagi
Nadmiar rozmiaru pliku APK
Chociaż staraliśmy się zminimalizować obciążenie tej funkcji, rozmiar plików APK aplikacji Compose zwiększa się z powodu ciągów znaków do śledzenia, które kompilator Compose umieszcza w plikach APK. Wzrost rozmiaru może być stosunkowo niewielki, jeśli aplikacja nie korzysta zbyt często z Compose, lub większy w przypadku pełnej aplikacji Compose. Te ciągi znaków są dodatkowo odszyfrowane, aby mogły być widoczne w narzędziach do śledzenia, jak pokazano wcześniej. Kompilator Compose wstrzykuje je do wszystkich od wersji 1.3.0.
Ciągi znaków śledzenia 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 pozostawienie tych danych (choć wiąże się to z pewnym kosztem w zakresie rozmiaru pliku APK) gwarantuje, że profilowany plik APK jest taki sam jak ten, który użytkownicy uruchamiają.
Dokładny czas
Aby uzyskać dokładne wyniki profilowania, podobnie jak w przypadku testów wydajności, musisz utworzyć aplikację profileable
i non-debuggable
zgodnie z profilowanymi aplikacjami.
Zapisz log czasu z terminala
Zrzut kompozycji można przechwycić z terminala. Aby to zrobić, musisz 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 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 wcześniej utworzone polecenie nagrywania.
Otwórz ślad
adb pull <location>
ślad z urządzenia (lokalizacja określona w komendzie record).Otwórz w Perfetto.
Tworzenie śladu za pomocą Jetpack Macrobenchmark
Skuteczność możesz mierzyć za pomocą Jetpack Macrobenchmark, który udostępnia logi czasu jako wyniki. Aby włączyć śledzenie kompozycji za pomocą makrobenchmarków, wykonaj te czynności:
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 argument
androidx.benchmark.fullTracing.enable=true
przed uruchomieniem testów porównawczych. Więcej informacji o argumentach instrumentacji Macrobenchmark znajdziesz w artykule Argumenty instrumentacji Macrobenchmark.
Opinia
Chętnie poznamy Twoją opinię na temat tej funkcji, znalezionych w niej błędów oraz Twoje sugestie. Możesz przesłać nam opinię, na stronie zgłoszenia .