Z tego przewodnika dowiesz się, jak poruszać się po raporcie Systrace i jak go interpretować. Aby zinterpretować raport Perfetto, zapoznaj się z dokumentacją procesora śledzenia.
Elementy typowego raportu
Systrace wygeneruje wyjściowy plik HTML zawierający serię sekcji. Raport zawiera listę wątków każdego procesu. Jeśli dany wątek renderuje klatki interfejsu, raport wskazuje też wyrenderowane klatki na osi czasu. Czas płynie w kierunku do przodu, gdy poruszasz się w raporcie od lewej do prawej.
Raport składa się z tych sekcji (w kolejności od góry do dołu):
Interakcje użytkownika
Pierwsza sekcja zawiera słupki reprezentujące konkretne interakcje użytkownika w aplikacji lub grze, np. kliknięcie ekranu urządzenia. Interakcje te służą jako przydatne znaczniki czasu.
Aktywność procesora
W następnej sekcji są widoczne słupki reprezentujące aktywność wątków w poszczególnych procesorach. Słupki pokazują aktywność CPU we wszystkich aplikacjach, w tym w Twojej aplikacji lub grze.
Sekcja aktywności procesora jest rozwijana, co umożliwia wyświetlenie częstotliwości zegara każdego z procesorów. Rysunek 1 przedstawia przykład zwiniętej sekcji aktywności procesora. Rysunek 2 przedstawia rozszerzoną wersję z częstotliwością zegara:
Zdarzenia systemowe
Histogramy w tej sekcji pokazują konkretne zdarzenia na poziomie systemu, np. liczbę tekstur i łączny rozmiar konkretnych obiektów.
Histogram, który warto dokładniej sprawdzić, to SurfaceView. Liczba ta reprezentuje liczbę utworzonych buforów ramek, które zostały przekazane do potoku wyświetlania i oczekują na wyświetlenie na ekranie urządzenia. Ponieważ większość urządzeń jest buforowana podwójnie lub potrójnie, ta liczba wynosi prawie zawsze 0, 1 lub 2.
Inne histogramy przedstawiające proces Surface Flinger, w tym zdarzenia VSync i zamiana wątków interfejsu, są widoczne na Rysunku 3:
Wyświetlane ramki
Ta sekcja, często najwyższa w raporcie, przedstawia wielokolorową linię, po której są stosy słupków. Kształty te reprezentują stos ramek
i stanu utworzonego wątku. Każdy poziom stosu odpowiada wywołaniu beginSection()
, czyli początkowi niestandardowego zdarzenia logu czasu zdefiniowanego przez Ciebie dla aplikacji lub gry.
Wielokolorowa linia nad każdym stosem słupków przedstawia zestaw stanów danego wątku na przestrzeni czasu. Każdy segment linii może zawierać jeden z tych kolorów:
- Zielony: uruchomione
- Wątek kończy pracę związaną z procesem lub odpowiada na przerwę.
- Niebieski: gotowe do działania
- Wątek jest dostępny do uruchomienia, ale nie jest to obecnie zaplanowane.
- Biały: sen
- Wątek nie ma żadnych zadań, być może został zablokowany przy użyciu blokady muteksu.
- Pomarańczowy: sen bez przerw
- Wątek jest blokowany podczas wejścia-wyjścia lub czeka na zakończenie operacji na dysku.
- Fioletowy: przerywany sen
- Wątek jest blokowany w innej operacji jądra, zwykle w ramach zarządzania pamięcią.
Skróty klawiszowe
W tabeli poniżej znajdziesz skróty klawiszowe, które są dostępne podczas wyświetlania raportu Systrace:
Klucz | Opis | |
---|---|---|
W | Powiększ oś czasu logu czasu. | |
O | Przesuń w lewo na osi czasu logu czasu. | |
S | Pomniejsz oś czasu logu czasu. | |
D | Przesuń palcem w prawo na osi czasu logu czasu. | |
E | Wyśrodkuj oś czasu logu czasu na bieżącej lokalizacji myszy. | |
P | Umieść bieżące zaznaczenie w ramce. | |
1 | Zmień aktywny model wyboru na tryb „Wybierz”. Odpowiada pierwszemu przyciskowi, który pojawia się na pasku narzędzi selektora myszy (patrz ilustracja po prawej stronie). |
|
2 | Zmień aktywny model wyboru na tryb „przesuwania”. Odpowiada drugiemu przyciskowi, który pojawia się na pasku narzędzi selektora myszy (patrz ilustracja po prawej stronie). |
|
3 | Zmień aktywny model wyboru na tryb „powiększenie”. Odpowiada trzeciemu przyciskowi, który pojawia się na pasku narzędzi selektora myszy (patrz ilustracja po prawej stronie). |
|
4 | Zmień aktywny model wyboru na tryb „czasu”. Odpowiada czwartemu przyciskowi, który pojawia się na pasku narzędzi selektora myszy (patrz ilustracja po prawej stronie). |
|
P | Pokaż siatkę na początku aktualnie wybranego zadania. | |
Shift + G | Pokaż siatkę na końcu aktualnie wybranego zadania. | |
Strzałka w lewo | Wybierz poprzednie zdarzenie na obecnie wybranej osi czasu. | |
Strzałka w prawo | Wybierz następne zdarzenie na obecnie wybranej osi czasu. |
Analizowanie problemów z wydajnością
Podczas interakcji z raportem Systrace możesz sprawdzać wykorzystanie procesora przez urządzenie w trakcie nagrywania. Aby uzyskać pomoc w poruszaniu się po raporcie HTML, przejdź do sekcji skrótów klawiszowych lub kliknij przycisk ? w prawym górnym rogu raportu.
W sekcjach poniżej dowiesz się, jak sprawdzać informacje w raporcie, aby znaleźć i rozwiązać problemy z wydajnością.
Rozpoznawanie problemów z wydajnością
Nawigując po raporcie Systrace, możesz łatwiej zidentyfikować problemy z wydajnością, wykonując co najmniej jedną z tych czynności:
- Wybierz interesujący Cię przedział czasu, rysując wokół niego prostokąt.
- Zaznacz lub zaznacz problematyczny obszar, używając narzędzia linijki.
- Aby pokazać każdą operację odświeżania wyświetlacza, kliknij View Options (Opcje widoku) > Podświetl pionową synchronizację.
Sprawdzanie ramek i alertów interfejsu
Jak to widać na Rysunku 4, raport Systrace zawiera listę wszystkich procesów, które renderują ramki UI i wskazują każdą wyrenderowaną klatkę na osi czasu. Klatki renderowane w czasie 16,6 milisekundy wymagane do utrzymania stabilnej liczby 60 klatek na sekundę są oznaczone zielonymi okręgami. Klatki, których renderowanie trwa dłużej niż 16,6 milisekundy, są oznaczone żółtymi lub czerwonymi okręgami.
![Powiększenie ramki](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-unselected.png?authuser=7&hl=pl)
Kliknięcie okrągłej ramki powoduje jej wyróżnienie i wyświetla dodatkowe informacje o pracy wykonanej przez system podczas jej renderowania, w tym alerty. Raport pokazuje też metody wykonywane przez system podczas renderowania danej klatki. Możesz zbadać te metody, aby określić potencjalne przyczyny zacinania się interfejsu.
![Wybrano problematyczną klatkę](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected.png?authuser=7&hl=pl)
Gdy wybierzesz spowolnioną klatkę, w dolnym panelu raportu może pojawić się alert. Alert na Rysunku 5 informuje, że głównym problemem ramy jest zbyt długi czas spędzony na recyklingu i ponownym wiązaniu elementów ListView
. Istnieją linki do odpowiednich zdarzeń w śladzie, które wyjaśniają, co system robi w tym czasie.
Aby zobaczyć wszystkie alerty wykryte przez narzędzie w logu czasu oraz liczbę wywołań poszczególnych alertów, kliknij kartę Alerty po prawej stronie okna, tak jak to widać na Rysunku 6. Panel Alerty ułatwia sprawdzanie, jakie problemy występują w śladzie i jak często przyczyniają się do zacinania. Możesz traktować go jak listę błędów do naprawienia. Niewielka zmiana lub poprawa błędu w jednym obszarze często mogą spowodować usunięcie całego zestawu alertów.
![Wyświetlono kartę Alert](https://developer.android.google.cn/static/topic/performance/images/tracing/frame-selected-alert-tab.png?authuser=7&hl=pl)
Jeśli zauważysz, że wątek interfejsu użytkownika wykonuje zbyt dużo pracy, użyj jednej z tych metod, aby określić, które metody pochłaniają zbyt dużo czasu procesora:
- Jeśli masz pomysł, które metody mogą powodować wąskie gardła, dodaj do tych metod znaczniki śledzenia. Więcej informacji znajdziesz w przewodniku dotyczącym definiowania zdarzeń niestandardowych w kodzie.
- Jeśli nie masz pewności, skąd biorą się wąskie gardła interfejsu, użyj Profilera procesora, które jest dostępne w Android Studio. Możesz wygenerować logi logów czasu, a następnie zaimportować i zbadać je za pomocą programu profilującego procesora.