Улучшите производительность циферблата с помощью аппаратного ускорения

Приложения Wear OS, использующие стандартные представления, получают преимущества от автоматического аппаратного ускорения рендеринга графики. Но циферблаты обычно реализуются с использованием холстов, поэтому они не получают аппаратное ускорение автоматически.

Зачем использовать холст с аппаратным ускорением для циферблата?

В большинстве случаев циферблат отображается с более высокой частотой кадров при использовании холста с аппаратным ускорением. При более высокой частоте кадров анимация и переходы кажутся более плавными, что повышает удобство работы пользователя.

При использовании холста с аппаратным ускорением вы также можете получить доступ к дополнительным данным о производительности пользовательского интерфейса вашего циферблата. Например, вы можете получить доступ к подробной информации о кадре, описанной в разделе «Измерение производительности пользовательского интерфейса», только при использовании холста с аппаратным ускорением.

Использует ли мой циферблат аппаратное ускорение?

Вы можете проверить, использует ли ваш циферблат аппаратное ускорение, используя параметры разработчика или adb .

Проверьте, используя параметры разработчика

Чтобы использовать параметры разработчика, чтобы проверить, использует ли ваш циферблат аппаратное ускорение, выполните следующие действия:

  1. На устройстве Wear OS перейдите в «Настройки» > «Параметры разработчика» .
  2. Включите отладку профилирования графического процессора .

    Этот параметр рисует наложение поверх видимых поверхностей, по одному на каждой поверхности, чтобы показать количество времени, затраченное на каждом этапе рендеринга графического процессора для этой поверхности.

  3. На устройстве вернитесь к циферблату.

  4. Если на вашем циферблате используется холст с аппаратным ускорением, вы увидите новую полосу, которая перемещается справа налево для каждого визуализированного кадра вашего циферблата.

Проверьте с помощью adb

Чтобы использовать adb для проверки, использует ли ваш циферблат аппаратное ускорение, выполните следующие действия:

  1. На устройстве Wear OS измените циферблат на тот циферблат, который вы хотите протестировать.
  2. Дайте циферблату поработать несколько секунд в интерактивном режиме.
  3. Запустите следующую команду adb , чтобы проверить, использует ли ваш циферблат аппаратное ускорение:

    adb shell dumpsys gfxinfo [package-name]

После запуска команды вы получите вывод, аналогичный следующему примеру:

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

...

В этом примере вывода обратите внимание на строку с надписью Total frames rendered . Как правило, если в выводе общее количество отрисованных кадров превышает 0, то на циферблате используется ускоренный холст. В противном случае общее количество обработанных кадров и другие данные кадров в отчете обычно равны 0.

Однако, поскольку gfxinfo выводится для полного пакета вашего приложения, вы можете увидеть некоторую информацию о времени кадра не из холста с аппаратным ускорением, например из Activity , которое ваше приложение использует для экрана конфигурации. Чтобы заметить разницу, убедитесь, что циферблат — единственная видимая поверхность, а затем повторно запустите команду adb shell dumpsys gfxinfo чтобы проверить, увеличивается ли значение Total frames rendered .

Лучшие практики

Следуйте этим рекомендациям, чтобы обеспечить максимальное удобство для ваших пользователей.

Увеличьте срок службы батареи

Если на циферблате долго воспроизводится анимация, использование аппаратного ускорения может значительно сократить срок службы батареи устройства. Эта проблема может усугубиться, если циферблат будет пытаться рисовать в каждом кадре. Чтобы избежать негативного влияния на пользователей, не используйте длительную анимацию на циферблате. Это руководство не относится конкретно к использованию аппаратного ускорения, но поскольку использование аппаратного ускорения увеличивает количество кадров, которые вы можете отрисовать, следовать ему еще важнее. Дополнительные сведения см. в разделе «Рекомендации по анимации» .

Используйте поддерживаемые операции рисования

Некоторые операции рисования не поддерживаются при использовании аппаратного ускорения. Информацию о том, что поддерживается, см. в разделе Аппаратное ускорение . Если у вас есть небольшой путь кода, в котором используется неподдерживаемая операция, вы можете создать холст на основе растрового изображения, а затем нарисовать это растровое изображение на холсте циферблата с помощью canvas.drawBitmap() .

Поддерживать совместимость при использовании аппаратного ускорения.

Аппаратное ускорение доступно на устройствах Wear OS под управлением Android 9 (уровень API 28) или выше. Если вы хотите избежать определенной операции рисования на старых устройствах, где аппаратное ускорение недоступно, или неподдерживаемой операции рисования на холсте с аппаратным ускорением, вы можете проверить Canvas.isHardwareAccelerated() , а затем предоставить альтернативную функциональность.

{% дословно %} {% дословно %} {% дословно %} {% дословно %}