Проблемы с производительностью Canvas/Bitmap и альфа-смешивания на Honeycomb (TF101)
-
22-10-2019 - |
Вопрос
Я впервые пытаюсь использовать 2D API для Android (здесь я многому научился), и, играя с альфа-смешением, я заметил некоторые тревожные проблемы с производительностью на моем планшете Honeycomb (TF101):
canvas.drawBitmap(bmBackground, 0,0, null);
canvas.drawBitmap(bmForeground, 0, 0, p);
Приведенный выше код визуализируется с использованием хорошо известной пары SurfaceView/Thread.bmBackground — это RGB_565, bmForeground — изменяемый ARGB_8888, краска p предназначена только для игры с альфа-каналом.Оба растровых изображения полноэкранные.
И на моем Nexus S, и на Galaxy S (Gingerbread) рендеринг выполняется со скоростью 55 кадров в секунду независимо от значения альфа, которое я установил для p, и независимо от формата пикселей для bmForeground (RGB_565 или ARGB_8888).
Но на моем планшете Honeycomb у меня странное поведение:
- 60 кадров в секунду с отключенным альфа-каналом (= 0)
- 10 кадров в секунду с 0 < альфа < 255
- 20 кадров в секунду с p = ноль
- 60 кадров в секунду с bmForeground = RGB_565
Кажется, у драйвера возникли проблемы с производительностью при использовании альфа-смешивания и/или преобразовании из ARGB (растровое изображение) в RGB (кадровый буфер)?
Я уже знаю о решении OpenGL, но мне хотелось бы понять, что здесь происходит, и найти способ решить эту проблему.
Было бы здорово, что двухъядерное устройство, работающее на частоте 1 ГГц, не может рисовать два растровых изображения лучше, чем мой Galaxy S!Я что-то пропустил ?
Решение
Проблем с драйверами нет, рендеринг с помощью Canvas на SurfaceView полностью выполняется программно.Наличие 2 ядер или даже 1 ГГц не обязательно поможет, в большинстве случаев при работе с растровыми изображениями важна пропускная способность памяти, и Galaxy S действительно хорош в этом.
Вы также предполагаете, что ваш кадровый буфер представляет собой RGB, но не указываете, какой именно RGB (RGBX 8888 или RGB565?). Как вы создаете SurfaceView?Очень важно свести к минимуму преобразования (если ваш SurfaceView — RGBX 8888, не используйте растровые изображения RGB 565, если ваша поверхность — RGB 565, избегайте использования растровых изображений RGBA 8888 и т. д.)
Вы также не упомянули, насколько велики ваши растровые изображения?Если оба ваших растровых изображения являются полноэкранными, производительность, которую вы получите, не является неожиданностью, если ваш планшет имеет ту же архитектуру, что и Motorola Xoom (на базе Tegra2).