Ślady są często najlepszym źródłem informacji, gdy po raz pierwszy analizujesz problem z wydajnością. Pozwalają one wysnuć hipotezę na temat problemu i miejsca, w którym należy zacząć poszukiwania.
Na urządzeniach z Androidem dostępne są 2 poziomy śledzenia: śledzenie systemu i metoda.
Śledzenie systemowe śledzi tylko obszary specjalnie oznaczone do śledzenia, więc ma niewielkie obciążenie i nie wpływa znacząco na wydajność aplikacji. Śledzenie systemu to świetny sposób na sprawdzenie, ile czasu zajmuje wykonanie poszczególnych części 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 śledzenie systemu nie obejmuje poszczególnych funkcji składanych. Są one dostępne w logach metod.
Obecnie testujemy nową funkcję śledzenia systemu, która umożliwia wyświetlanie funkcji złożonych w ramach śladów systemowych. Zapewnia to bezproblemową uciążliwość śledzenia systemu, a z poziomem szczegółowości kompozycji śledzenia metod.
Konfigurowanie śledzenia 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ć co najmniej poziom 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 wykonasz śledzenie systemu, które obejmuje rekompozycję, możesz automatycznie zobaczyć funkcje kompozytowe.
Ś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 śledzić, a potem wybierz System, Śledź i Nagrywaj.
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. 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.
Składowe możesz też zobaczyć na wykresie płomienia wraz z numerem pliku i numerem linii:
Uwagi
Nadmiar rozmiaru pliku APK
Naszym celem było jak największe zmniejszenie kosztów związanych z korzystaniem z 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ększył się rozmiar pliku 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 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 pozostawienie tych danych, choć wiąże się z pewnym kosztem w postaci zwiększonego rozmiaru pliku APK, gwarantuje, że profilowany plik APK jest taki sam jak ten, który użytkownicy uruchamiają.
dokładne ustalanie czasu;
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. 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")
Wygeneruj polecenie rejestracji
- Wygeneruj polecenie rekordu w Perfetto.
Ręcznie dodaj sekcję
track_event
źródła danych, jak w tym przykładzie: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
Tworzenie 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 wcześniej utworzone polecenie nagrywania.
Otwórz log czasu
adb pull <location>
ślad z urządzenia (lokalizacja określona w komendzie record).Otwórz w Perfetto.
Tworzenie śladu za pomocą 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")
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 z nią błędów i Twoich próśb. Opinię możesz przesłać za pomocą problemu w systemie śledzenia.