Śledzenie kompozycji

Ś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:

  1. Otwórz profilator:

    Android Studio – rozpoczęcie profilowania
    Rysunek 2. Android Studio – rozpocznij profilowanie
  2. Kliknij Oś czasu procesora.

    Profilowanie w Android Studio – linia czasu procesora
    Rysunek 3. Profilowanie w Android Studio – linia czasu CPU
  3. Przejdź w aplikacji do interfejsu, który chcesz prześledzić, a potem wybierz System, ŚledźNagrywaj.

    Opcje logu czasu – log czasu systemu
    Rysunek 4. Opcje logu czasu – log czasu systemu
  4. 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.

    Śledzenie systemu
    Rysunek 5. Śledzenie systemu

    Kliknięcie dwukrotnie kompozytowalności na wykresie powoduje przejście do jej kodu źródłowego.

  5. Elementy kompozycyjne możesz też zobaczyć na wykresie płomieniowym wraz z plikiem i wierszem numer:

    Wykres płomieniowy
    Rysunek 6. Wykres płomieniowy

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ę profileablenon-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

  1. Wygeneruj polecenie rekordu w Perfetto.
  2. 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

  1. Uruchom aplikację i przygotuj sekcję, którą chcesz śledzić.
  2. 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
    
  3. Uruchom wcześniej utworzone polecenie nagrywania.

Otwórz ślad

  1. adb pull <location> ślad z urządzenia (lokalizacja określona w komendzie record).

  2. 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:

  1. 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")
    
  2. 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 .