Ścieżki są często najlepszym źródłem informacji na początku analizowania problemu 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 metody śledzi każde wywołanie funkcji w aplikacji. Jest to bardzo kosztowne, co znacznie wpływa na wydajność aplikacji, ale daje pełny obraz tego, co się dzieje, jakie funkcje są wywoływane i jak często.
Domyślnie śledzenie systemu nie obejmuje poszczególnych funkcji składanych. Są one dostępne w śladach metody.
Obecnie testujemy nową funkcję śledzenia systemu, która umożliwia wyświetlanie funkcji złożonych w ramach śladów systemowych. Zapewnia ona niski poziom inwazyjności śledzenia systemowego, a także szczegółowe informacje o metodach śledzenia w kompozycji.
Konfigurowanie śledzenia kompozycji
Aby wypróbować śledzenie rekompozycji w projekcie, musisz zaktualizować program do co najmniej tych wersji:
- Android Studio Flamingo
- Interfejs tworzenia: 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ę, możesz automatycznie zobaczyć funkcje kompozytowe.
Wykonywanie śledzenia systemu
Aby przeprowadzić śledzenie systemu i zobaczyć nowe śledzenie rekompozycji w akcji:
Otwórz program profilujący:
Kliknij Oś czasu procesora.
Przejdź w aplikacji do interfejsu, który chcesz śledzić, a potem wybierz System, Śledź i Nagrywaj.
Użyj aplikacji, aby spowodować ponowne skompilowanie i zatrzymać nagrywanie. Gdy ślad zostanie przetworzony i wyświetlony, powinieneś zobaczyć elementy składowe w śladzie ponownego składania. 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:
Ograniczenia
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 są umieszczane w pliku APK przez kompilator Compose. 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.
W wersji produkcyjnej można usunąć ciągi znaków służące do śledzenia, 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 o wszelkich zmianach będziemy informować w informacjach o wersji.
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ł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.
Przechwytywanie informacji o wykonywaniu w terminalu
Można przechwycić ślad kompozytorski 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 rejestrowania za pomocą 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
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.
Rejestrowanie logów przy użyciu Jetpack Macrobenchmark
Wydajność możesz mierzyć za pomocą testu makrobenchmarku Jetpacka, który w wyniku zwraca ścieżki. 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, znalezione przez Ciebie błędy oraz prośby. Możesz przesłać nam opinię, korzystając z narzędzia do śledzenia problemów.