Popraw wydajność tarczy zegarka dzięki akceleracji sprzętowej

Aplikacje na Wear OS, które używają widoków standardowych, korzystają z automatycznego renderowania grafiki z akceleracją sprzętową. Ale tarcze zegarka są zazwyczaj implementowane z użyciem płóci, więc nie otrzymują automatycznie akceleracji sprzętowej.

Dlaczego warto korzystać z akceleratora sprzętowego kanwy do tarczy zegarka?

W większości przypadków tarcza zegarka renderuje się z większą liczbą klatek podczas korzystania z kanw z akceleracją sprzętową. Przy wyższej liczbie klatek animacje i przejścia wyglądają płynniej, zapewniając użytkownikom lepsze wrażenia.

Gdy używasz kanw z akceleracją sprzętową, masz też dostęp do większej ilości danych o wydajności tarczy zegarka. Na przykład szczegółowe informacje o klatce opisane w artykule Pomiar wydajności interfejsu są dostępne tylko wtedy, gdy używasz obszaru roboczego z akceleracją sprzętową.

Czy tarcza zegarka korzysta z akceleracji sprzętowej?

To, czy tarcza zegarka używa akceleracji sprzętowej, możesz sprawdzić za pomocą opcji programisty lub adb.

Sprawdź, używając opcji programisty

Aby sprawdzić, czy tarcza zegarka używa akceleracji sprzętowej, wykonaj te czynności:

  1. Na urządzeniu z Wear OS otwórz Ustawienia > Opcje programisty.
  2. Włącz Debugowanie profilowania GPU.

    Ta opcja powoduje wyświetlanie nakładki na widoczne powierzchnie (po 1 na każdą z nich), aby pokazywać ilość czasu poświęcanego na poszczególne etapy renderowania tej powierzchni przez GPU.

  3. Na urządzeniu wróć do tarczy zegarka.

  4. Jeśli tarcza zegarka wykorzystuje płótno z akceleracją sprzętową, zobaczysz nowy pasek, który porusza się od prawej do lewej dla każdej wyrenderowanej klatki tarczy.

Sprawdź za pomocą narzędzia adb

Aby za pomocą funkcji adb sprawdzić, czy tarcza zegarka korzysta z akceleracji sprzętowej, wykonaj te czynności:

  1. Na urządzeniu z Wear OS zmień tarczę zegarka na tarczę, którą chcesz przetestować.
  2. Pozwól, aby tarcza zegarka uruchamiała się przez kilka sekund w trybie interaktywnym.
  3. Uruchom to polecenie adb, aby sprawdzić, czy tarcza zegarka korzysta z akceleracji sprzętowej:

    adb shell dumpsys gfxinfo [package-name]

Po uruchomieniu polecenia otrzymasz dane wyjściowe podobne do tych poniżej:

Applications Graphics Acceleration Info:
Uptime: 2239933 Realtime: 13568751

** Graphics info for pid 1100 [package-name] **

Stats since: 59875589194ns
Total frames rendered: 1213
Janky frames: 0 (0.00%)
50th percentile: 7ms
90th percentile: 18ms
95th percentile: 25ms
99th percentile: 150ms
Number Missed Vsync: 0
Number High input latency: 0
Number Slow UI thread: 0
Number Slow bitmap uploads: 0
Number Slow issue draw commands: 0
Number Frame deadline missed: 0

...

Zwróć uwagę na wiersz Total frames rendered w tych przykładowych danych wyjściowych. Jeśli w danych wyjściowych widoczna jest łączna liczba wyrenderowanych klatek jest większa niż 0, tarcza zegarka używa przyspieszonego obszaru roboczego. Jeśli tego nie zrobisz, łączna liczba wyrenderowanych klatek i inne dane klatek w raporcie wynosi zwykle 0.

Ponieważ jednak gfxinfo dostarcza danych o pełnym pakiecie aplikacji, możesz zobaczyć informacje o czasie renderowania klatek inne niż płótno z akceleracją sprzętową, np. element Activity używany przez aplikację na ekranie konfiguracji. Aby odróżnić tarczę zegarka, upewnij się, że jest to jedyna widoczna powierzchnia, a następnie ponownie uruchom polecenie adb shell dumpsys gfxinfo, aby sprawdzić, czy wartość Total frames rendered wzrośnie.

Sprawdzone metody

Stosuj te sprawdzone metody, aby zapewnić użytkownikom maksymalną wygodę.

Maksymalne wykorzystanie baterii

Jeśli tarcza zegarka zawiera długotrwałe animacje, użycie akceleracji sprzętowej może znacznie skrócić czas pracy na baterii urządzenia. Problem może się nasilić, jeśli tarcza będzie rysować w każdej klatce. Aby nie wpłynąć negatywnie na użytkowników, nie używaj długotrwałych animacji na tarczy zegarka. Te wytyczne nie odnoszą się tylko do korzystania z akceleracji sprzętowej, ale ponieważ akceleracja sprzętowa zwiększa liczbę możliwych do narysowania klatek, warto zastosować się do nich. Więcej informacji znajdziesz w artykule o sprawdzonych metodach korzystania z animacji.

Korzystanie z obsługiwanych operacji rysowania

Niektóre operacje rysowania nie są obsługiwane podczas korzystania z akceleracji sprzętowej. Informacje na temat obsługiwanych funkcji znajdziesz w artykule Akceleracja sprzętowa. Jeśli masz małą ścieżkę kodu, która używa nieobsługiwanej operacji, możesz utworzyć płótno z bitmapami, a potem narysować tę mapę bitową na obszar roboczy tarczy zegarka, używając canvas.drawBitmap().

Zachowywanie zgodności podczas korzystania z akceleracji sprzętowej

Akceleracja sprzętowa jest dostępna na urządzeniach z Wear OS z Androidem 9 (poziom interfejsu API 28) lub nowszym. Jeśli nie chcesz wykonywać konkretnej operacji rysowania na starszych urządzeniach, na których akceleracja sprzętowa nie jest dostępna, lub nieobsługiwanej operacji rysowania na obiektie canvas z akceleracją sprzętową, możesz zaznaczyć opcję Canvas.isHardwareAccelerated() i skorzystać z funkcji alternatywnej.