Pregunta

Estoy en mis primeros intentos con la API 2D Android (aprendí mucho aquí), y mientras jugaba con la mezcla Alpha noté un problema de rendimiento preocupante en mi tableta de panal (TF101):

canvas.drawBitmap(bmBackground, 0,0, null);                     
canvas.drawBitmap(bmForeground, 0, 0, p);

El código anterior se representa utilizando la conocida pareja SurfaceView/Thread. BMBackground es RGB_565, BMFOREGROUND es un argb_8888 mutable, la pintura P es para jugar solo con alfa. Ambos mapas de bits son pantalla completa.

Tanto en mi Nexus S como Galaxy S (pan de jengibre), la representación se ejecuta a 55 fps, sea cual sea el valor alfa que establecí para P, y cualquiera que sea el formato de píxel para BMFORERAD (RGB_565 o Argb_8888).

Pero en mi tableta de panal, tengo algún comportamiento extraño:

  • 60 fps con alfa deshabilitado (= 0)
  • 10 fps con 0 <alfa <255
  • 20 fps con p = nulo
  • 60 fps con bmforeground = rgb_565

¿Parece que el controlador tiene algún problema de rendimiento al usar la mezcla de alfa y/o la conversión de Argb (mapa de bits) a RGB (FrameBuffer)?

Ya conozco la solución OpenGL, pero me gustaría entender lo que está sucediendo aquí y encontrar una manera de resolverla.

¡Eso sería increíble que un dispositivo de doble núcleo que se ejecute a 1 GHz no pueda hacerlo mejor que mis mapas de bits Galaxy s dibujando 2! Me estoy perdiendo de algo ?

¿Fue útil?

Solución

No hay problema de conductores, el renderizado con un lienzo en una SurfaceView se realiza completamente en el software. Tener 2 núcleos o incluso 1 GHz no necesariamente ayudan, lo que importa la mayor parte del tiempo con los mapas de bits es el ancho de banda de memoria y el Galaxy S es realmente bueno en eso.

También está suponiendo que su FrameBuffer es RGB pero no especifica qué RGB (RGBX 8888 o RGB565?) ¿Cómo se crea su SurfaceView? Es muy importante que minimice las conversiones (si su SurfaceView es RGBX 8888, no use mapas de bits RGB 565, si su superficie es RGB 565, evite usar mapas de bits RGBA 8888, etc.)

¿Tampoco mencionas qué tan grandes son tus mapas de bits? Si ambos mapas de bits son mapas de bits de pantalla completa, el rendimiento que está obteniendo no es inesperado si su tableta tiene la misma arquitectura que un Motorola Xoom (basado en Tegra2).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top