Jednym z najtrudniejszych problemów dla deweloperów jest zapewnienie płynności i bezproblemowej jakości animacji. Jest to szczególnie trudne do debugowania, gdy system wykonuje również zadania w tle pochłaniające dużo zasobów. Nie ma łatwego sposobu na sprawdzenie, czy zacięcie jest spowodowane przez aplikację, czy przez system. Dostępne jest jednak narzędzie do profilowania, które pomaga zidentyfikować potencjalne źródło niewłaściwego działania.
Renderuj w ChromeOS
Dopracowane aplikacje, takie jak gra, zwykle używają podwójnego buforowania, by jak najkrótszy czas reakcji użytkownika był ograniczony. Istnieje jednak wiele czynników, które mogą obniżać wydajność. Jeśli np. renderowanie klatki trwa zbyt długo, renderowany wynik nie jest gotowy do następnej zamiany bufora, a w konsekwencji poprzednia klatka się powtarza.
Wtedy mechanizm renderowania nie może rozpocząć renderowania następnej klatki, co powoduje dalsze problemy. Ten scenariusz jest znany deweloperom aplikacji mobilnych na Androida. Gdy aplikacja działa na ChromeOS, kontekst jest jeszcze bardziej skomplikowany.
Aplikacja uruchomiona na komputerze nie jest renderowana bezpośrednio w ramce displayowej ekranu. Renderuje swoje dane w teksturę. Jest wiele aplikacji, z których każda renderuje swoją grafikę jako teksturę. System tworzy widok ekranu za pomocą kompozytora, który łączy wszystkie tekstury w jeden obraz na komputery.
Kompozytor działa w tle w sposób przejrzysty. Wprowadza jednak jednoklatkowe opóźnienie, które pozwala zmaksymalizować wykorzystanie potoku GPU. W idealnym świecie może to nie być konieczne, ale pomaga wyrównać wahania wydajności systemu i równoważyć asymetryczne obciążenie.
Gdy system operacyjny pracuje bardzo intensywnie, GPU może być ściśnięte. Od renderowania klatki do pojawienia się na ekranie może wystąpić opóźnienie. W zależności od sprzętu system może używać czterokrotnego buforowania w celu kompensacji. Nawet przy głębszym buforowaniu wciąż mogą występować zakłócenia w działaniu graficznym.
Analizator graficzny ARC
W ChromeOS dostępne jest narzędzie do profilowania, które pokazuje przepływ pamięci przez bufory w systemie, czas wymiany pamięci, natężenie procesora/GPU i obciążenie aplikacji w danym momencie. Widać to na ilustracji poniżej:
Konfigurowanie programu profilującego
Aby korzystać z programu profilującego, musisz mieć wersję M75 lub nowszą. Najlepsze wyniki uzyskasz w przypadku urządzeń Intel.
Zanim użyjesz programu profilującego, zainicjuj w aplikacji ślady.
Dodaj Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>);
do kodu tam, gdzie chcesz dołączyć log czasu. Użyj znaku Event
, który zaczyna się od prefiksu customTrace
. Prefiks nie pojawia się w komunikacie logu czasu.
Aby skonfigurować program profilujący, wykonaj następujące 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
.
Uruchom program profilujący
- Wybierz Zatrzymaj zacięcie.
- Uruchom aplikację na Androida.
- Gdy aplikacja na Androida jest aktywna i zaznaczona, naciśnij Control + Shift + G.
Gdy zdarzy się coś zacięć, otworzy się okno przeglądarki. Aby powiększyć lub zmniejszyć oś czasu, użyj klawiszy W i S.