Śledź przejścia okien za pomocą Winscope

Winscope to narzędzie internetowe, które pozwala użytkownikom nagrywać, odtwarzać i analizować stany kilku usług systemowych podczas i po animacji i przejściach. Winscope rejestruje wszystkie istotne stany usług systemowych w pliku śledzenia. Używając interfejsu użytkownika Winscope z plikiem śledzenia, możesz sprawdzić stan tych usług dla każdej klatki animacji, z nagraniem ekranu lub bez, poprzez ponowne odtwarzanie, wykonywanie czynności krokowych i debugowanie przejść.

Usługi systemowe generujące ślady, które można załadować do Winscope, są następujące:

  • SurfaceFlinger
  • Menedżer okien
  • WMShell
  • JA JA
  • Wyrzutnia

Uruchom przeglądarkę śledzenia Winscope

Śledzenie Winscope jest częścią usług dostępnych na platformie. W tej sekcji opisano kroki wymagane do pobrania, zbudowania i uruchomienia przeglądarki śledzenia Winscope.

Wykonaj poniższe kroki, aby skonfigurować komputer do uruchamiania narzędzia śledzącego Winscope:

  1. Pobierz źródło Androida .
  2. Przejdź do folderu Winscope:

    cd development/tools/winscope
    
  3. Zainstaluj zależności za pomocą:

    npm install
    

    Aby zobaczyć listę dostępnych poleceń, uruchom: npm run

  4. Zbuduj wszystkie cele produkcyjne i testowe, korzystając z:

    npm run build:prod
    
  5. Uruchom Winscope za pomocą:

    npm run start
    

Uchwyć ślady

Możesz przechwytywać ślady na urządzeniu , za pomocą Winscope lub poleceń Android Debug Bridge (adb) .

Przechwytuj ślady na urządzeniu

Przechwytuj ślady na urządzeniu, aby zbierać dane podczas zgłaszania błędów związanych z animacjami. Za pomocą tej metody rejestrowane są wszystkie ślady interfejsu użytkownika, ponieważ konfiguracji nie można dostosować.

Na urządzeniu z Androidem:

  1. Włącz opcje programistyczne .
  2. Wybierz opcję Śledzenie systemu w Opcjach programisty .
  3. Włącz opcję Zbieraj ślady Winscope .
  4. W sekcji Różne :
    1. Włącz opcję Dołącz nagrania do raportów o błędach .
    2. Włącz opcję Pokaż kafelek Szybkich ustawień .
  5. Przejdź do miejsca, w którym chcesz odtworzyć błąd.
  6. Aby rozpocząć przechwytywanie, otwórz Szybkie ustawienia i wybierz Zapisz ślad :

    quick_setting_winscope

    Rysunek 1. Menu szybkich ustawień z funkcją Record Trace.

  7. Wykonaj tylko kroki niezbędne do odtworzenia błędu.

  8. Aby zatrzymać przechwytywanie, otwórz Szybkie ustawienia i wybierz Zatrzymaj śledzenie .

  9. Udostępnij przechwycony dziennik, korzystając z jednej z wymienionych opcji, takich jak Gmail, Dysk lub BetterBug.

Przechwytuj ślady za pomocą Winscope

Możesz przechwytywać ślady za pomocą Winscope do lokalnego programowania i debugowania. Winscope używa adb , który obsługuje połączenie urządzenia przez USB lub Wi-Fi.

W Winscopie:

  1. Na ekranie Zbierz ślady kliknij opcję ADB Proxy :

    capture_traces_winscope

    Rysunek 2. Przechwytywanie śladów w Winscope.

  2. Uruchom proxy Winscope ADB Connect, aby przechwycić ślady bezpośrednio z przeglądarki.

  3. Uruchom polecenie:

    python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
    
  4. Aby rozpocząć przechwytywanie, na ekranie Zbierz ślady wybierz cele i konfigurację, a następnie kliknij Rozpocznij śledzenie :

    collect_traces_winscope

    Rysunek 3. Zbierz ślady w Winscope.

  5. Aby zatrzymać przechwytywanie, kliknij Zakończ śledzenie :

    end_trace_winscope

    Rysunek 4. Śledzenie końcowe w Winscope.

Gdy narzędzie przesyła ślady do interfejsu użytkownika Winscope, na ekranie pojawiają się komunikaty Pobieranie i analizowanie plików Proto .

Wygeneruj zrzut stanu za pomocą Winscope

Aby wykonać zrzut stanu za pomocą Winscope, na ekranie Zbierz ślady wybierz zakładkę Zrzut , a następnie kliknij Stan zrzutu :

dump-winscope

Rysunek 5. Stan zrzutu w Winscope.

Przechwytuj ślady za pomocą poleceń adb

Uruchom adb root przed uruchomieniem poleceń adb shell dla każdego z następujących śladów. Po zakończeniu śledzenia pliki śledzenia są dostępne w /data/misc/wmtrace . Aby skopiować plik lub katalog i jego podkatalogi z urządzenia, zobacz Kopiowanie plików do i z urządzenia . Zobacz adb, aby uzyskać więcej informacji.

Ślady WindowManagera

Aby przechwycić ślady WindowManager:

  • Włącz śledzenie:

    adb shell wm tracing start
    
  • Wyłącz śledzenie:

    adb shell wm tracing stop
    
  • Zapisz dane logowania do pliku podczas wykonywania przechwytywania śledzenia:

    adb shell wm tracing save-for-bugreport
    
  • Rejestruj ślad raz na klatkę:

    adb shell wm tracing frame
    
  • Rejestruj każdą transakcję:

    adb shell wm tracing transaction
    
  • Ustaw maksymalny rozmiar dziennika (w KB):

    adb shell wm tracing size
    
  • Drukuj status śledzenia:

    adb shell wm tracing status
    
  • Ustaw poziom rejestrowania na critical (tylko widoczne okna ze zredukowanymi informacjami), trim (wszystkie okna ze zredukowanymi informacjami) lub all (wszystkie okna i informacje):

    adb shell wm tracing level
    

Protolog

W systemie ProtoLog używane są następujące polecenia.

W procesie system_server :

  • Uruchom ProtoLog:

    adb shell cmd window logging start
    
  • Zatrzymaj ProtoLog:

    adb shell cmd window logging stop
    
  • Włącz ProtoLog dla podanych grup logów:

    adb shell cmd window logging enable [group...]
    
  • Wyłącz ProtoLog dla podanych grup logów:

    adb shell cmd window logging disable [group...]
    
  • Włącz rejestrowanie Logcat dla podanych grup logów:

    adb shell cmd window logging enable-text [group...]
    
  • Wyłącz rejestrowanie Logcat dla podanych grup logów:

    adb shell cmd window logging disable-text [group...]
    

W WMShelu:

  • Uruchom ProtoLog:

    adb shell dumpsys activity service SystemUIService WMShell
    

Śledzenie przejścia

Do śledzenia przejścia używane są następujące polecenia:

W procesie system_server :

  • Rozpocznij śledzenie:

    adb shell cmd window shell tracing start
    
  • Zatrzymaj śledzenie:

    adb shell cmd window shell tracing stop
    
  • Rozpocznij śledzenie w WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
    
  • Zatrzymaj śledzenie w WMShell:

    adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
    

Edytor metod wprowadzania

Do śledzenia edytora IME służą następujące polecenia:

  • Rozpocznij śledzenie IME dla klientów metody wprowadzania (IM), usługi metody wprowadzania (IMS) i usługi zarządzania metodą wprowadzania (IMMS):

    adb shell ime tracing start
    
  • Rozpocznij śledzenie klientów IME, IMS i IMMS:

    adb shell ime tracing stop
    

Warstwy SurfaceFlingera

Śledzenie warstw SurfaceFlinger wykorzystuje do przechwytywania śledzenie Perfetto. Informacje o konfiguracji można znaleźć w sekcji Konfiguracja śledzenia .

Zobacz następujący przykład konfiguracji śledzenia warstw SurfaceFlinger:

unique_session_name: "surfaceflinger_layers_active"
buffers: {
    size_kb: 63488
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.layers"
        surfaceflinger_layers_config: {
            mode: MODE_ACTIVE
            trace_flags: TRACE_FLAG_INPUT
            trace_flags: TRACE_FLAG_COMPOSITION
            trace_flags: TRACE_FLAG_HWC
            trace_flags: TRACE_FLAG_BUFFERS
            trace_flags: TRACE_FLAG_VIRTUAL_DISPLAYS
        }
    }
}

Zobacz poniższe przykładowe polecenie, aby wygenerować śledzenie dla warstw SurfaceFlinger:

adb shell -t perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

Transakcje SurfaceFlinger

Śledzenie transakcji SurfaceFlinger wykorzystuje do przechwytywania śledzenie Perfetto. Informacje o konfiguracji można znaleźć w sekcji Konfiguracja śledzenia .

Zobacz następujący przykład konfiguracji Perfetto dla aktywnego śledzenia SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_active"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_ACTIVE
        }
    }
}
write_into_file: true
file_write_period_ms: 100

Zobacz następujący przykład konfiguracji Perfetto dla ciągłego śledzenia SurfaceFlinger:

unique_session_name: "surfaceflinger_transactions_continuous"
buffers: {
    size_kb: 1024
    fill_policy: RING_BUFFER
}
data_sources: {
    config {
        name: "android.surfaceflinger.transactions"
        surfaceflinger_transactions_config: {
            mode: MODE_CONTINUOUS
        }
    }
}

Zobacz poniższe przykładowe polecenie, aby wygenerować śledzenie transakcji SurfaceFlinger:

    adb shell perfetto \
    -c - --txt \
    -o /data/misc/perfetto-traces/trace \

Wygeneruj zrzut stanu za pomocą adb

Winscope odczytuje migawkę stanów WindowManager i SurfaceFlinger z raportów o błędach. Raporty o błędach przechowują stany jako osobne pliki proto w folderze proto . Aby wygenerować zrzuty stanu za pomocą adb, uruchom następujące polecenia.

Dla WindowManagera:

adb exec-out dumpsys window --proto > window_dump.winscope

Dla SurfaceFlingera:

adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope

Analizuj ślady

Aby debugować stany przejściowe i nieprawidłowe, które powodują problemy z animacją, Winscope agreguje różne pliki śledzenia, zapewnia wyszukiwanie i wizualizację w ramach klatek i osi czasu oraz prezentuje komunikaty protobuf w spójny sposób. Analiza śladów w Winscope pomaga zidentyfikować dokładną warstwę, klatkę i stan wystąpienia błędu.

Skorzystaj z Winscope’a

Po przechwyceniu śladów przeanalizuj je w Winscope:

  1. Prześlij zapisane ślady, korzystając z panelu po prawej stronie. Możesz usunąć przesłane ślady lub przesłać więcej śladów.

    upload_traces_winscope

    Rysunek 6. Przesyłanie śladów do Winscope.

  2. Kliknij opcję Wyświetl ślady , aby wizualizować przesłane ślady. Zakładki dla każdego śladu pojawiają się na górnym panelu okna. Jeśli przesłany plik zawiera odpowiednie ślady, na ekranie zostanie nałożony pływający widok śladu nagrania ekranu.

    view_traces_winscope

    Rysunek 7. Wyświetlanie śladów w Winscope.

    Aby zmienić nazwę, użyj interfejsu użytkownika na najwyższym panelu oknaEdytuj imię i pobierz przesłany plik śledzeniapobierz_trace lub przesłać nowy.

  3. Nawiguj po śladach w czasie, korzystając z narzędzia suwaka czasu w dolnym panelu okna. Aby uzyskać dodatkową nawigację czasową, użyj następujących funkcji, jak pokazano na rysunku 8:

    • Aby przejść do określonego czasu lub zdarzenia, użyj kursora (suwak czasu) lub w lewostrzałka_w lewo_czas i prawdastrzałka_właściwy_czas strzałki w polu wyświetlania czasu (w lewym dolnym rogu) lub strzałki w lewo i w prawo na klawiaturze.
    • Aby wyświetlić wybrane, oznaczone kolorami ślady na osi czasu, użyj menu rozwijanego (po lewej stronie suwaka czasu). Domyślnie na osi czasu wyświetlane są trzy ostatnie ślady przeglądane za pomocą zakładek śledzenia.
    • Aby uzyskać szczegółowy widok wszystkich przesłanych śladów, użyj powiększeniazoom_in_time lub pomniejszczas_powiększenia (pod suwakiem czasu) lub przewiń na klawiaturze. Użyj przycisku resetowania, aby zresetować poziom powiększenia.
    • Aby uzyskać rozszerzony widok rozkładu śledzenia w czasie, kliknij strzałkę w góręstrzałka_up_czas (Dolny prawy róg).

    time_nav_winscope

    Rysunek 8. Nawigacja czasowa w Winscope.

    W rozszerzonym widoku (Rysunek 9) wybierz i powiększ określone przedziały czasowe, aby uzyskać lepszą kontrolę:

    expand_time_winscope

    Rysunek 9. Rozszerzona oś czasu w Winscope.

  4. Aby sprawdzić ślady, możesz wyświetlić stan urządzenia za pomocą nagrania ekranu. Aby sprawdzić konkretny ślad, kliknij odpowiednią zakładkę śledzenia na górnym panelu narzędzia.

    • W przypadku śladu Surface Flinger trzy panele przedstawiają różne widoki śladu w danym okresie czasu, jak pokazano na rysunku 10:sf_trace

      Rysunek 10. Ślad Surface Flingera w Winscope.

      • Widok warstw : Widok 3D warstw w prostokątnych nakładkach. Następujące elementy interfejsu użytkownika dostosowują prostokąty w celu renderowania elementów graficznych pod względem ich położenia, rozmiaru, transformacji i kolejności w osi Z:

        • Suwak Obrót (w lewym górnym rogu widoku Warstwy) obraca nałożone na siebie prostokąty, aby oglądać je pod wybranymi kątami.
        • Suwak Odstępy (w prawym górnym rogu widoku Warstwy) dostosowuje odstępy między warstwami, aby utworzyć wybrany widok złożony.
        • Narzędzia powiększania (w prawym górnym rogu widoku Warstwy) powiększają obrazzoom_in_time i pomniejszczas_powiększenia w warstwy w celu lepszej kontroli.
        • Przycisk resetowaniareset_sf (w prawym górnym rogu widoku Warstwy) przywraca ustawienia kamery do oryginalnego widoku.
        • Przeciągnij prostokąty, aby ułatwić lepsze powiększanie.
      • Widok hierarchii : pełna hierarchia warstw.

        • Tylko widoczne (prawy górny róg widoku Hierarchia), jeśli ta opcja jest wybrana, ukrywa niewidoczne warstwy w hierarchii, aby ułatwić wizualizację elementów na ekranie.
        • Płaskie (prawy górny róg widoku Hierarchia), jeśli jest zaznaczone, hierarchia jest wyświetlana jako spłaszczona lista warstw.
        • Opcja Pokaż różnice (w lewym górnym rogu widoku Hierarchia) jest zaznaczona tylko w przypadku zmiany stanu. Po wybraniu narzędzie porównuje stan bieżący z poprzednim. Nowy element jest podświetlany na zielono, usunięty element jest podświetlany na czerwono, a zmodyfikowany element jest podświetlany na niebiesko.
      • Widok Właściwości : Właściwości wybranej warstwy. Górny panel widoku Właściwości zawiera informacje tylko o kluczowych właściwościach, takich jak Widoczność , Geometria i Bufor . Dolny panel widoku Właściwości zawiera Proto Zrzut wszystkich właściwości.

        • Pole wyboru Pokaż różnice (w lewym górnym rogu widoku Właściwości) zachowuje się jak w widoku Hierarchia .
        • Pokaż wartości domyślne (w lewym górnym rogu widoku Właściwości), jeśli ta opcja jest zaznaczona, wyświetla domyślne wartości proto w zrzucie proto. Domyślnie te wartości nie są wymienione w zrzucie Proto. Domyślne wartości proto są pobierane z definicji pola proto. Jeśli pole proto nie ma ustawionej wartości domyślnej innej niż null, wyświetlane domyślne wartości proto to:
          • Ciągi: Null
          • Liczby: 0
          • Wartości logiczne: Fałsz
          • Obiekty: Null

      Wybór pomiędzy trzema widokami i nagranie ekranu są zsynchronizowane, co oznacza, że ​​wszystkie ślady są synchronicznie aktualizowane po przejściu do innego punktu w czasie. Aby zobaczyć właściwości warstwy, wybierz warstwę, klikając ją w widoku Hierarchia lub klikając odpowiedni prostokąt w widoku Właściwości. Fioletowy prostokąt wskazuje, że do tej warstwy dołączony jest ślad widoku. Po dwukrotnym kliknięciu fioletowej warstwy interfejs użytkownika przechodzi do odpowiedniej karty śledzenia widoku.

    • W przypadku śledzenia Menedżera okien trzy panele wyświetlają różne widoki śledzenia w danym okresie czasu, jak pokazano na rysunku 11:

      • Widok systemu Windows : widok 3D warstw.
      • Widok hierarchii : pełna hierarchia warstw.
      • Widok Właściwości zawiera Proto Zrzut wszystkich właściwości.

      Wybór pomiędzy trzema widokami i nagranie ekranu są zsynchronizowane, co oznacza, że ​​wszystkie ślady są synchronicznie aktualizowane po przejściu do innego punktu w czasie.

      wm_trace

      Rysunek 11. Ślad Menedżera okien w Winscope.

    • W przypadku śladów transakcji transakcje między Surface Flingerem a Menedżerem okien są prezentowane w formacie tabeli, którą można przeszukiwać według wyświetlanych identyfikatorów, typu i tekstu, wraz z widokiem właściwości przedstawiającym zrzut proto. Wybór pomiędzy dwoma widokami i nagrywanie ekranu jest zsynchronizowane:

      transaction_trace

      Rysunek 12. Ślad transakcji w Winscope.

    • W przypadku śladów ProtoLog informacje są prezentowane w formie tabeli, którą można przeszukiwać według znaczników, plików źródłowych i tekstu:

      protolog_trace

      Rysunek 13. Ślad ProtoLog w Winscope.

    • W przypadku śladów przejść wyświetlana jest lista przejść z identyfikatorem, typem, czasem wysłania, czasem trwania i statusem wraz z właściwościami wybranego przejścia:

      transitions_trace

      Rysunek 14. Ślad przejść w Winscope.