Śledzenie kompozycji

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

  1. Otwórz program profilujący:

    Android Studio – rozpoczęcie profilowania
    Rysunek 2. Android Studio – rozpoczęcie profilowania
  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 śledzić, a potem wybierz System, ŚledźNagrywaj.

    Opcje śledzenia – śledzenie systemu
    Rysunek 4. Opcje śledzenia – śledzenie systemu
  4. 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.

    Śledzenie systemu
    Rysunek 5. Ślad systemu

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

  5. Składowe możesz też zobaczyć na wykresie płomienia wraz z numerem pliku i numerem linii:

    Wykres płomieniowy
    Rysunek 6. Wykres płomieniowy

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

  1. Wygeneruj polecenie rejestrowania za pomocą Perfetto.
  2. 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

  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.

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:

  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, znalezione przez Ciebie błędy oraz prośby. Możesz przesłać nam opinię, korzystając z narzędzia do śledzenia problemów.