Проблемы с производительностью Canvas/Bitmap и альфа-смешивания на Honeycomb (TF101)

StackOverflow https://stackoverflow.com/questions/7300464

Вопрос

Я впервые пытаюсь использовать 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top