Winscope to narzędzie internetowe, które pozwala użytkownikom rejestrować, odtwarzać i analizować stany kilku usług systemowych podczas odtwarzania animacji i przejść oraz po ich zakończeniu. Winscope rejestruje wszystkie odpowiednie stany usługi systemowej w pliku śledzenia. Za pomocą interfejsu Winscope i pliku śladu możesz sprawdzić stan tych usług w przypadku każdego klatki animacji (z opcją nagrywania ekranu lub bez niej) przez odtwarzanie, przechodzenie do kolejnych kroków i debugowanie podczas przejść.
Usługi systemowe, które generują ślady, które można wczytać do Winscope:
- SurfaceFlinger
- Menedżer okien
- WMShell
- IME
- Wyrzutnia
Uruchamianie narzędzia do wyświetlania śladów Winscope
Śledzenie Winscope jest częścią usług na platformie. W tej sekcji opisujemy czynności, które należy wykonać, aby pobrać, skompilować i uruchomić przeglądarkę logów czasu Winscope.
Aby skonfigurować komputer do uruchamiania narzędzia do śledzenia Winscope:
- Pobierz kod źródłowy Androida.
Otwórz folder Winscope:
cd development/tools/winscope
Zainstaluj zależności za pomocą:
npm install
Aby wyświetlić listę dostępnych poleceń, uruchom:
npm run
Utwórz wszystkie produkcyjne i testowe środowiska docelowe za pomocą:
npm run build:prod
Uruchom Winscope za pomocą:
npm run start
Rejestrowanie zrzutów
Logi możesz przechwytywać na urządzeniu, za pomocą Winscope lub Android Debug Bridge (adb).
Rejestrowanie dzienników na urządzeniu
Rejestruj ślady na urządzeniu, aby zbierać dane podczas zgłaszania błędów w przypadku problemów z animacją. Wszystkie ścieżki UI są rejestrowane za pomocą tej metody, ponieważ konfiguracji nie można dostosować.
Na urządzeniu z Androidem:
- Włącz opcje programisty.
- W sekcji Opcje programisty kliknij Śledzenie systemu.
- Włącz opcję Zbieraj ślady Winscope.
- W sekcji Inne:
- Włącz opcję Dołącz nagrania do raportów o błędach.
- Włącz Pokaż kafelek Szybkich ustawień.
- Przejdź do miejsca, w którym chcesz odtworzyć błąd.
Aby rozpocząć nagrywanie, otwórz Szybkie ustawienia i wybierz Nagrywanie ścieżki:
Rysunek 1. Menu szybkich ustawień w narzędziu Record Trace (Rejestruj śledzenie).
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 jednego z wymienionych niżej sposobów, np. Gmaila, Dysku lub BetterBuga.
Rejestruj ślady za pomocą Winscope
Możesz tworzyć ścieżki za pomocą Winscope do programowania lokalnego i debugowania. Winscope używa adb, który obsługuje połączenie z urządzeniem przez USB lub Wi-Fi.
W Winscope:
Na ekranie Collect Traces (Zbieraj logi czasu) kliknij ADB Proxy (Serwer proxy ADB):
Rysunek 2. rejestrować ślady w Winscope,
Uruchom serwer proxy Winscope ADB Connect, aby rejestrować logi czasu bezpośrednio w przeglądarce.
Uruchom polecenie:
python3 $ANDROID_BUILD_TOP/development/tools/winscope/src/adb/winscope_proxy.py
Aby rozpocząć przechwytywanie, na ekranie Zbieraj ścieżki wybierz cele i konfigurację, a potem kliknij Rozpocznij śledzenie:
Rysunek 3. Zbieraj ślady w Winscope.
Aby zatrzymać przechwytywanie, kliknij Zakończ śledzenie:
Rysunek 4. Zakończ śledzenie w Winscope.
Gdy narzędzie przesyła ślady do interfejsu Winscope, na ekranie pojawiają się komunikaty Pobieranie i Analizowanie plików Proto.
Generowanie kopii stanu za pomocą narzędzia Winscope
Aby wykonać zrzut stanu za pomocą Winscope, na ekranie Collect Traces (Zbieraj logi czasu) wybierz kartę Zump (Zrzut), a następnie kliknij Dump state (Stan zrzutu):
Rysunek 5. Stan zrzutu w Winscope.
Rejestrowanie dzienników za pomocą poleceń adb
Przed uruchomieniem poleceń adb shell
dla każdego z tych logów czasu uruchom polecenie adb root
. Po zakończeniu śledzenia pliki śledzenia są dostępne w folderze /data/misc/wmtrace
. Aby skopiować plik lub katalog wraz z podkatalogami z urządzenia, przeczytaj artykuł Kopiowanie plików na urządzenie i z urządzenia.
Więcej informacji znajdziesz w sekcji adb.
Ślady WindowManager
Aby przechwycić ślady WindowManager:
Włącz śledzenie:
adb shell wm tracing start
Wyłączanie śledzenia:
adb shell wm tracing stop
Zapisz dane logowania w pliku podczas przechwytywania logu czasu:
adb shell wm tracing save-for-bugreport
Rejestrowanie ścieżki raz na klatkę:
adb shell wm tracing frame
Rejestrowanie każdej transakcji:
adb shell wm tracing transaction
Ustaw maksymalny rozmiar dziennika (w KB):
adb shell wm tracing size
Stan logu czasu wydruku:
adb shell wm tracing status
Ustaw poziom logowania na
critical
(widoczne tylko okna z ograniczonymi informacjami),trim
(wszystkie okna z niepełnymi informacjami) luball
(wszystkie okna i informacje):adb shell wm tracing level
ProtoLog
Poniższe polecenia są używane w systemie ProtoLog.
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 logowanie Logcata dla podanych grup logów:
adb shell cmd window logging enable-text [group...]
Wyłącz logowanie Logcata dla podanych grup logów:
adb shell cmd window logging disable-text [group...]
W WMShell:
Uruchom ProtoLog:
adb shell dumpsys activity service SystemUIService WMShell
Śledzenie przejść
Do śledzenia przejść używa się tych poleceń:
W procesie system_server
:
Rozpocznij śledzenie:
adb shell cmd window shell tracing start
Zatrzymaj log czasu:
adb shell cmd window shell tracing stop
Rozpocznij śledzenie w WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing start
Zatrzymywanie śledzenia w WMShell:
adb shell dumpsys activity service SystemUIService WMShell transitions tracing stop
edytor IME|edytor metody wprowadzania (tekstu)
Do śledzenia edytora metod wprowadzania (IME) używane są te polecenia:
Rozpocznij śledzenie metody wprowadzania (IM) dla klientów metody wprowadzania, usługi metody wprowadzania i usługi zarządzania metodą wprowadzania:
adb shell ime tracing start
Rozpocznij śledzenie klientów IME, IMS i IMMS:
adb shell ime tracing stop
Warstwy SurfaceFlinger
Śledzenie warstw SurfaceFlinger wykorzystuje do rejestrowania dane Perfetto. Informacje o konfiguracji znajdziesz w sekcji Konfiguracja ścieżki.
Poniżej znajdziesz przykład konfiguracji śledzenia warstwy za pomocą 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
}
}
}
Aby wygenerować śledzenie warstw SurfaceFlinger, zapoznaj się z tym przykładowym poleceniem:
adb shell -t perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Transakcje SurfaceFlinger
Funkcja śledzenia transakcji SurfaceFlinger wykorzystuje do przechwytywania Perfetto Traf. Informacje o konfiguracji znajdziesz w sekcji Konfiguracja śledzenia.
Zobacz przykład konfiguracji Perfetto na potrzeby aktywnego śledzenia w usłudze 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
Oto przykład konfiguracji perfetto do ciągłego śledzenia w przypadku 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
}
}
}
Oto przykładowy sposób generowania śledzenia transakcji w aplikacji SurfaceFlinger:
adb shell perfetto \
-c - --txt \
-o /data/misc/perfetto-traces/trace \
Generuj zrzut stanu za pomocą narzędzia 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ą narzędzia adb, uruchom poniższe polecenia.
W przypadku WindowManagera:
adb exec-out dumpsys window --proto > window_dump.winscope
W przypadku SurfaceFlinger:
adb exec-out dumpsys SurfaceFlinger --proto > sf_dump.winscope
Analizowanie logów czasu
Aby debugować przejściowe i nieprawidłowe stany, które powodują problemy z animacją, Winscope agreguje różne pliki śledzone, umożliwia wyszukiwanie i wizualizację ramek oraz osi czasu, a także przedstawia spójne komunikaty protobuf. Analiza śladów w Winscope pomaga określić dokładną warstwę, ramkę i stan wystąpienia błędu.
Korzystanie z Winscope
Po zarejestrowaniu logów czasu przeanalizuj je w Winscope:
Prześlij zapisane logi czasu za pomocą panelu po prawej stronie. Możesz usunąć przesłane logi czasu lub przesłać więcej logów czasu.
Rysunek 6. Przesyłanie śladów w Winscope.
Aby wyświetlić zwizualizowane przesłane ścieżki, kliknij Wyświetl ścieżki. Karty każdego logu czasu są widoczne w górnym panelu okna. Jeśli przesłany plik zawiera odpowiednie ślady, na ekranie pojawi się widok śladu nagrywania ekranu.
Rysunek 7. Wyświetlanie śladów w Winscope.
Użyj interfejsu w najwyższym panelu okna, aby zmienić nazwę , pobrać przesłany ślad lub przesłać nowy.
Możesz przeglądać logi czasu na przestrzeni czasu za pomocą suwaka czasu w dolnym panelu okna. Aby ułatwić sobie poruszanie się po czasie, użyj tych funkcji, jak pokazano na Rys. 8:
- Aby przejść do określonego czasu lub zdarzenia, użyj kursora (suwaka czasu), strzałki w lewo i w prawo w polu wyświetlania czasu (w lewym dolnym rogu) lub strzałek w lewo i w prawo na klawiaturze.
- Aby wyświetlić wybrane ścieżki z kolorami na osi czasu, użyj menu (po lewej stronie suwaka czasu). Domyślnie na osi czasu wyświetlane są 3 ostatnie logi czasu wyświetlone na kartach logu czasu.
- Aby uzyskać szczegółowy widok wszystkich przesłanych logów czasu, użyj narzędzia Powiększ lub Pomniejsz (pod suwakiem czasu) albo przewiń klawiaturę. Przycisk resetowania pozwala zresetować poziom powiększenia.
- Aby wyświetlić rozkład rozkładu sygnału w czasie, kliknij strzałkę w prawym dolnym rogu.
Rysunek 8. Nawigacja w czasie w Winscope.
W widoku rozszerzonym (ryc. 9) wybierz konkretne przedziały czasu i powiększ je, aby dokładniej je obejrzeć:
Rysunek 9. Rozwinięta oś czasu w Winscope
Aby zbadać logi czasu, możesz wyświetlić stan urządzenia za pomocą nagrania ekranu. Aby sprawdzić konkretny ślad, kliknij odpowiednią kartę śladu w górnym panelu narzędzia.
W przypadku logu Surface Flinger 3 panele wyświetlają różne widoki logu czasu w danym okresie, jak widać na rys. 10:
Rysunek 10. Śledzenie SurfaceFlinger w Winscope.
Widok Warstwy: widok 3D warstw w prostokątnych nakładkach. Te elementy interfejsu dostosowują prostokąty do renderowania elementów graficznych pod względem ich położenia, rozmiaru, transformacji i kolejności Z:
- Suwak Obrót (w lewym górnym rogu widoku Warstwy) obraca wielowarstwowe prostokąty, umożliwiając ich wyświetlanie 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 warstw) umożliwiają powiększanie i pomniejszanie warstw, aby można było je dokładniej obejrzeć.
- Przycisk resetowania (w prawym górnym rogu widoku Warstwy) przywraca ustawienia aparatu do pierwotnego widoku.
- Przeciągnij prostokąty, aby ułatwić powiększanie.
Widok Hierarchia: pełna hierarchia warstw.
- Tylko widoczne (w prawym górnym rogu widoku hierarchii) – po wybraniu opcji ukrywa niewidzialne warstwy z hierarchii, aby ułatwić wizualizację elementów na ekranie.
- Płaski (w prawym górnym rogu widoku hierarchii) – po wybraniu wyświetla hierarchię jako spłaszoną listę warstw.
- Opcja Pokaż różnice (w lewym górnym rogu widoku hierarchii) jest wybrana tylko wtedy, gdy występuje zmiana stanu. Po wybraniu tej opcji narzędzie porównuje bieżący stan z poprzednim. Nowy element jest wyróżniony na zielono, usunięty element jest – na czerwono, a zmodyfikowany – niebieski.
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 zrzut protokołu wszystkich właściwości.
- Pole wyboru Pokaż różnice (w lewym górnym rogu widoku Właściwości) działa tak samo jak w widoku Hierarchia.
- Pokaż wartości domyślne (w lewym górnym rogu widoku Właściwości) – po wybraniu tej opcji w pliku Proto Dump będą wyświetlane wartości domyślne proto.
Domyślnie te wartości nie są wymienione w pliku Proto Dump. 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 są domyślne wartości proto:
- Ciągi znaków: null
- Liczby: 0
- Wartości logiczne: False
- Obiekty: null
Wybór między tymi 3 widokami a nagrywaniem ekranu jest zsynchronizowany, co oznacza, że wszystkie ślady są aktualizowane synchronicznie po przejściu do innego punktu w czasie. Aby zobaczyć właściwości warstwy, zaznacz ją, klikając ją w widoku hierarchii lub klikając odpowiedni prostokąt w widoku Właściwości. Fioletowy prostokąt oznacza, że do danej warstwy jest dołączony ślad wyświetlenia. Po kliknięciu dwukrotnie fioletowej warstwy interfejs przejdzie do odpowiedniej karty śledzenia.
W przypadku śledzenia Window Manager 3 panele wyświetlają różne widoki ścieżki w określonym przedziale czasu, jak pokazano na rysunku 11:
- Widok Windows: widok warstw 3D.
- Widok Hierarchia: pełna hierarchia warstw.
- Widok Usługi zawiera Proto Dump wszystkich usług.
Wybór między 3 widokami a nagraniem ekranu jest zsynchronizowany, co oznacza, że wszystkie ścieżki są aktualizowane synchronicznie, gdy przechodzisz do innego punktu w czasie.
Rysunek 11. Śledzenie Menedżera okien w Winscope
W przypadku śladów Transaction transakcje między SurfaceFlinger i Window Manager są prezentowane w formacie tabeli, który można przeszukiwać za pomocą wyświetlanych identyfikatorów, typu i tekstu, wraz z widokiem właściwości, w którym jest widoczny zrzut proto. Synchronizacja pomiędzy dwoma widokami:
Rysunek 12. Śledzenie transakcji w Winscope.
W przypadku logów czasu ProtoLog informacje są prezentowane w formie tabeli, którą można przeszukiwać według tagów, plików źródłowych i tekstu:
Rysunek 13. Ślad ProtoLog w Winscope.
W przypadku logów czasu przejścia wyświetlana jest lista przejść z identyfikatorem, typem, czasem wysłania, czasem trwania i stanem, a także właściwościami wybranego przejścia:
Rysunek 14. Zrzut przejść w Winscope.