Jednym z najtrudniejszych problemów dla deweloperów aplikacji jest tworzenie płynnych animacji bez zakłóceń. Może to być szczególnie trudne do debugowania, gdy system wykonuje również wymagające zasobów zadania w tle. Trudno jest określić, czy usterka jest spowodowana przez aplikację, czy przez system. Narzędzie do profilowania może jednak pomóc w określeniu możliwego źródła nieprawidłowego działania.
Renderowanie w ChromeOS
Dopracowana aplikacja, np. gra, zwykle korzysta z podwójnego buforowania, aby jak najbardziej skrócić czas reakcji użytkownika. Mimo to wiele czynników może obniżyć wydajność. Jeśli na przykład renderowanie klatki trwa zbyt długo, wyrenderowany wynik nie jest gotowy do następnej zamiany bufora i powtarza się poprzednia klatka.
Wtedy moduł renderujący nie może rozpocząć renderowania następnej klatki, co powoduje jeszcze więcej problemów. Ten scenariusz jest znany deweloperom aplikacji mobilnych na Androida. Gdy aplikacja działa w ChromeOS, kontekst jest jeszcze bardziej złożony.
Aplikacja działająca na komputerze nie renderuje bezpośrednio do ramki wyświetlacza ekranu. Zamiast tego renderuje dane w postaci tekstury. Zwykle jest wiele aplikacji, z których każda renderuje grafikę do tekstury. System tworzy widok na ekranie za pomocą kompozytora, który łączy wszystkie tekstury w jeden obraz pulpitu.
Kompozytor działa w tle w sposób niewidoczny dla użytkownika, ale wprowadza opóźnienie o 1 klatkę, aby zmaksymalizować wykorzystanie potoku GPU. To opóźnienie wygładza wahania wydajności systemu i pomaga zrównoważyć asymetryczne obciążenie.
Gdy system operacyjny jest mocno obciążony, procesor graficzny może być przeciążony, co powoduje opóźnienie między renderowaniem klatki a jej wyświetleniem na ekranie. W zależności od sprzętu system może używać poczwórnego buforowania, aby to zrekompensować. Nawet przy większym buforowaniu potok graficzny może nadal działać nieprawidłowo.
Śledzenie grafiki ARC
ChromeOS ma narzędzie do profilowania, które pokazuje, jak bufory przenikają przez system, kiedy następuje wymiana pamięci, jak bardzo zajęty jest procesor lub GPU i co robi aplikacja w danym momencie. Ilustracja poniżej pokazuje, jak to wygląda:
Konfigurowanie profilera
Aby korzystać z profilera, musisz mieć wersję 75 lub nowszą. Aby uzyskać najlepsze wyniki, użyj urządzenia Intel.
Zanim użyjesz profilera, wypełnij aplikację śladami.
Dodaj Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); do kodu w miejscach, w których chcesz uwzględnić ślad. Użyj Event, który zaczyna się od prefiksu customTrace. Prefiks nie pojawia się w śledzonej wiadomości.
Aby skonfigurować profiler, wykonaj te czynności:
- Włącz tryb programisty.
- Włącz ustawienia Chrome i włącz narzędzie do wizualizacji buforów graficznych ARC.
- Wejdź na
chrome://arc-graphics-tracing.
Uruchamianie profilera
- Wybierz zatrzymaj w przypadku błędu.
- Uruchom aplikację na Androida.
- Gdy aplikacja na Androida jest aktywna i ma fokus, naciśnij
Control+Shift+G.
Gdy wystąpi usterka, pojawi się okno przeglądarki. Aby powiększyć lub pomniejszyć oś czasu, użyj klawiszy W i S.