Ślady są często najlepszym źródłem informacji, gdy po raz pierwszy analizujesz problem z wydajnością. Pozwalają sformułować hipotezę, na czym polega problem i od czego szukać.
Na Androidzie obsługiwane są 2 poziomy śledzenia: śledzenie systemu i metoda.
Śledzenie systemu śledzi tylko obszary specjalnie oznaczone do śledzenia, więc wiąże się z niskim narzutem i nie wpływa znacząco na wydajność aplikacji. Śledzenie systemu to świetny sposób na sprawdzenie, ile czasu zajmuje wykonywanie poszczególnych sekcji kodu.
Śledzenie metod śledzi wszystkie wywołania 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 są wywoływane.
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ć funkcje kompozycyjne w śladach systemu. Zapewnia to bezproblemową uciążliwość śledzenia systemu, a z poziomem szczegółowości kompozycji śledzenia metod.
Skonfiguruj śledzenie kompozycji
Aby wypróbować śledzenie zmiany kompozycji w projekcie, musisz zaktualizować ją do co najmniej tych wersji:
- 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 uruchomisz zrzut systemu obejmujący zmianę kompozycji, funkcje kompozycyjne pojawią się automatycznie.
Śledź system
Aby uruchomić ślad systemu i zobaczyć, jak działa nowe śledzenie zmiany kompozycji, 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 Śledzenie systemu i Rejestr
Aby zmienić kompozycję i zatrzymać nagrywanie, użyj aplikacji. Gdy log czasu zostanie przetworzony i pojawi się, elementy kompozycyjne powinny być widoczne w logu czasu zmiany kompozycji. Możesz używać klawiatury i myszy do powiększania i przesuwania logu czasu. Jeśli nie wiesz, jak poruszać się po logu, zapoznaj się z dokumentacją 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 numerem pliku i wiersza:
Uwagi
narzut związany z rozmiarem pliku APK
Chcieliśmy jak najbardziej ograniczyć koszty związane z korzystaniem z tej funkcji, ale w przypadku aplikacji do tworzenia wiadomości, które pochodzą z ciągów śledzenia umieszczonych w pliku APK przez kompilator Compose, zwiększyliśmy rozmiar plików APK. Ten wzrost może być stosunkowo niewielki, jeśli Twoja aplikacja nie używa zbyt wielu funkcji tworzenia wiadomości lub większych. Te ciągi śledzenia są dodatkowo nie zaciemnione, więc 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 śledzące można usunąć z 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();
}
W przyszłości mogą one ulec zmianie, ale o wszelkich zmianach będzie można poinformować w informacjach o wersji Utwórz.
Pamiętaj, że uwzględnienie plików i jednocześnie wiążą się z kosztem związanych z ich rozmiarem, gwarantuje, że profilowany plik APK będzie taki sam, jaki uruchamiają użytkownicy aplikacji.
Dokładny czas
Aby profilowanie było dokładne, tak jak w przypadku każdego testu wydajności, musisz skonfigurować aplikację profileable
i non-debuggable
zgodnie z aplikacjami z możliwością profilowania.
Zapisz log czasu z terminala
Zrzut kompozycji można przechwycić z terminala. Musisz to zrobić 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>
loguje log na urządzeniu (lokalizację określoną w poleceniu rejestru).Otwórz w Perfetto.
Rejestrowanie logów przy użyciu Jetpack Macrobenchmark
Wydajność możesz mierzyć za pomocą narzędzia Jetpack Macrobenchmark, które udostępnia logi czasu jako wyniki. Aby włączyć śledzenie kompozycji za pomocą macrobenchmarków, musisz wykonać 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")
Zanim uruchomisz testy porównawcze, dodaj argument instrumentacji
androidx.benchmark.fullTracing.enable=true
. Więcej informacji o argumentach instrumentacji w analizie porównawczej znajdziesz w artykule Argumenty instrumentacji w analizie porównawczej.
Opinia
Chętnie poznamy Twoją opinię na temat tej funkcji, znalezionych z nią błędów i Twoich próśb. Możesz przesłać nam opinię, korzystając z narzędzia do śledzenia problemów.