SmartQ 5 – SurfaceViewへの描画(12/01Firmware)
SmartQ 5でSurfaceViewへの描画速度を適当にはかってみた。
Drawable.draw(canvas); で測定
DrawableはPNGのBitmapで、640 x 480 と 480 x 640
- 640 x 480 を 640 x 480 に転送 = 52fps
- 480 x 640 を 640 x 480 に転送 = 16fps
- 2.に対してsetFilterBitmap(false); = 28fps
- 1.に大してsetAlpha(128); = 32fps
まぁ、だいたい予想通りの数値。でも、思っていたよりは速いかな。
続いてcanvas.drawBitmap(…)で描いた場合
- memory上にint配列を作って640 x 480 hasAlpha=false = 19fps
- memory上にint配列を作って640 x 480 hasAlpha=true = 9fps
- 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設定も可能なのでそれなりに使えるっぽい。