SmartQ 5 – SurfaceViewへの描画(12/01Firmware)

SmartQ 5でSurfaceViewへの描画速度を適当にはかってみた。

Drawable.draw(canvas); で測定

DrawableはPNGのBitmapで、640 x 480 と 480 x 640

  1. 640 x 480 を 640 x 480 に転送 = 52fps
  2. 480 x 640 を 640 x 480 に転送 = 16fps
  3. 2.に対してsetFilterBitmap(false);  = 28fps
  4. 1.に大してsetAlpha(128); = 32fps

まぁ、だいたい予想通りの数値。でも、思っていたよりは速いかな。

続いてcanvas.drawBitmap(…)で描いた場合

  1. memory上にint配列を作って640 x 480 hasAlpha=false = 19fps
  2. memory上にint配列を作って640 x 480 hasAlpha=true = 9fps
  3. memory上にint配列を作って640 x 480(α付)でBitmap.createBitmapでbitmap作成 = 20fps

やる気なくなったのでここまで。まぁ、予想通りとは言え結構遅いなぁ。

一応、BitmapFactory使ってdecodeしたBitmapの描画も測ってみたけどDrawable.draw(canvas)と同じ感じ。

memory上のbitmap転送が遅いのは多分ARGB/32bitからRGB/16bitに変換してるからかな? ScreenのDensityは565のはずなので、、、。

ってーことで。まとめ。当たり前のことだけど、ScaleやFiltering処理が入ると極端に遅くなるのでdot by dotで準備しておく。半透明合成するためのBitmapは基本的にcreateBitmapしてやってから使う。Immutableなので描画用に最適化しておいてくれてるっぽい(事前に乗算すましてるのかな?)。Immutableでも描画時のPaintに大してsetAlphaしてやれば全体のAlpha設定も可能なのでそれなりに使えるっぽい。