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

Ponieważ funkcja śledzenia systemu śledzi tylko obszary specjalnie oznaczone do monitorowania, ma i nie mają dużego wpływu na działanie aplikacji. Systemowy śledzenie jest świetnym sposobem na sprawdzenie, ile czasu zajmuje wykonanie określonych sekcji 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 logach metod.

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.

Skonfiguruj śledzenie 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ć 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 wykonujesz ślad systemu, który obejmuje zmianę kompozycji, funkcje kompozycyjne

Śledź system

Aby uruchomić ślad systemu i zobaczyć, jak działa nowe śledzenie zmiany kompozycji, wykonaj wykonaj te czynności:

  1. Otwórz program profilujący:

    Android Studio – Rozpocznij profilowanie
    Rysunek 2. Android Studio – rozpocznij profilowanie
    .
  2. Kliknij Oś czasu procesora.

    Program profilujący Android Studio – oś czasu procesora
    Rysunek 3. Android Studio Profiler – oś czasu procesora
    .
  3. Przejdź do interfejsu aplikacji, który chcesz śledzić, a następnie wybierz System Śledzenie i rejestrowania

    Opcje logu czasu – log czasu systemu
    Rysunek 4. Opcje logu czasu – log czasu systemu
    .
  4. Aby zmienić kompozycję i zatrzymać nagrywanie, użyj aplikacji. Gdy ślad będzie już i pliki kompozycyjne zostały przetworzone, powinny być już widoczne ślad rekompozycji. Możesz używać klawiatury i myszy, aby powiększać i przesuwać elementy wokół śladu, jeśli nie wiesz, jak poruszać się po logu czasu, zobacz Dokumentacja rejestrowania logów czasu.

    Śledzenie systemu
    Rysunek 5. Śledzenie systemu
    .

    Dwukrotne kliknięcie funkcji kompozycyjnej na wykresie spowoduje otwarcie 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

narzut związany z rozmiarem pliku APK

Naszym celem było zminimalizowanie kosztów związanych z obsługą funkcji, zwiększa się rozmiar plików APK aplikacji do tworzenia wiadomości pochodzących z ciągów śledzenia. umieszczone w pakiecie APK przez kompilator Compose. Zwiększenie rozmiaru może być jest stosunkowo mała, jeśli aplikacja nie używa zbyt wielu funkcji Utwórz lub większego. aplikacji. Ciągi tekstowe są dodatkowo niezaciemnione, więc mogą pojawiać się za pomocą narzędzi do śledzenia, jak pokazano wcześniej. Kompilator Compose wstrzykuje je do wszystkich od wersji 1.3.0.

Ciągi śledzące 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 ich przechowywanie i koszty związane z określonym rozmiarem plików APK gwarantuje, profilowany plik APK jest taki sam jak pakiet aplikacji uruchamiany przez użytkowników.

Dokładny czas

Aby uzyskać dokładny profilowanie, tak jak w przypadku każdego testu skuteczności, trzeba: profileable i non-debuggable zgodnie z aplikacjami profilowalnymi.

Zapisz log czasu z terminala

Zrzut kompozycji można przechwycić z terminala. Aby to zrobić, musisz: by 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 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
    
  3. Uruchom wcześniej utworzone polecenie nagrywania.

Otwórz log czasu

  1. adb pull <location> śledzenie z urządzenia (lokalizacja określona w parametrze ).

  2. Otwórz w Perfetto.

Rejestrowanie logów przy użyciu Jetpack Macrobenchmark

Skuteczność możesz mierzyć za pomocą narzędzia Jetpack Macrobenchmark, który udostępnia logi czasu jako wyniki. Aby włączyć śledzenie kompozycji za pomocą musisz:

  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 androidx.benchmark.fullTracing.enable=true argument instrumentacji przed przeprowadzeniem testów porównawczych. Sprawdź narzędzia analizy porównawczej Argumenty, aby dowiedzieć się więcej o analizie porównawczej argumentów instrumentacji.

Opinia

Chętnie dowiemy się, co myślisz o tej funkcji, o wszelkich błędach, i wszelkie inne prośby. Możesz przesłać nam opinię, na stronie zgłoszenia .