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:
- Pobierz źródło Androida .
Przejdź do folderu Winscope:
cd development/tools/winscope
Zainstaluj zależności za pomocą:
npm install
Aby zobaczyć listę dostępnych poleceń, uruchom:
npm run
Zbuduj wszystkie cele produkcyjne i testowe, korzystając z:
npm run build:prod
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:
- Włącz opcje programistyczne .
- Wybierz opcję Śledzenie systemu w Opcjach programisty .
- Włącz opcję Zbieraj ślady Winscope .
- W sekcji Różne :
- Włącz opcję Dołącz nagrania do raportów o błędach .
- Włącz opcję Pokaż kafelek Szybkich ustawień .
- Przejdź do miejsca, w którym chcesz odtworzyć błąd.
Aby rozpocząć przechwytywanie, otwórz Szybkie ustawienia i wybierz Zapisz ślad :
Rysunek 1. Menu szybkich ustawień z funkcją Record Trace.
Wykonaj tylko kroki niezbędne do odtworzenia błędu.
Aby zatrzymać przechwytywanie, otwórz Szybkie ustawienia i wybierz Zatrzymaj śledzenie .
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:
Na ekranie Zbierz ślady kliknij opcję ADB Proxy :
Rysunek 2. Przechwytywanie śladów w Winscope.
Uruchom proxy Winscope ADB Connect, aby przechwycić ślady bezpośrednio z przeglądarki.
Uruchom polecenie:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Aby rozpocząć przechwytywanie, na ekranie Zbierz ślady wybierz cele i konfigurację, a następnie kliknij Rozpocznij śledzenie :
Rysunek 3. Zbierz ślady w Winscope.
Aby zatrzymać przechwytywanie, kliknij Zakończ śledzenie :
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 :
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) luball
(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:
Prześlij zapisane ślady, korzystając z panelu po prawej stronie. Możesz usunąć przesłane ślady lub przesłać więcej śladów.
Rysunek 6. Przesyłanie śladów do Winscope.
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.
Rysunek 7. Wyświetlanie śladów w Winscope.
Aby zmienić nazwę, użyj interfejsu użytkownika na najwyższym panelu okna i pobierz przesłany plik śledzenia lub przesłać nowy.
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 lewo i prawda 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ększenia lub pomniejsz (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ę (Dolny prawy róg).
Rysunek 8. Nawigacja czasowa w Winscope.
W rozszerzonym widoku (Rysunek 9) wybierz i powiększ określone przedziały czasowe, aby uzyskać lepszą kontrolę:
Rysunek 9. Rozszerzona oś czasu w Winscope.
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:
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ą obraz i pomniejsz w warstwy w celu lepszej kontroli.
- Przycisk resetowania (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.
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:
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:
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:
Rysunek 14. Ślad przejść w Winscope.