2012/10/03

Nexus では SurfaceView が遅い

 
Galaxy Nexus の不思議。
galaxy_nexus_common 
SurfaceView で軽いゲームを動かすと、他の端末よりも2倍近く遅い
drawBitmap と、少しの drawText と drawRect を行ってるだけなのに。
 
Android 4.0以降ならデフォルトで ON になるハードウェアアクセラレーター
有効になっていないのかもしれない。
 
そして TextureView で実験してみると…こちらは他の端末での SurfaceView
同等の速度(fps)が出る。
 
さらに不思議な事に、別アプリで TextureView を動かした後に SurfaceView
アプリを起動すると…速度が2倍近く速くなる
 
他の端末での SurfaceView 同等の処理速度になる。
 
 
不思議すぎる現象です。ちなみにその場合でも
 
 Canvas.isHardwareAccelerated()
 
は常に false が返ってくるので、ハードウェアアクセラレーションが有効に
なっているかどうかの判定ができない。これは Nexus に限った問題では
ないけど。
 
SurfaceView が遅いこの現象…解決するには 4.0 以降なら TextureView
検討。幅広く対応するなら GLSurfaceView の検討って感じでしょうか。
 
「TextureView を起動した直後の SurfaceView は高速化する」っていう
流れから、内部的には HW acceleration が行われているような気もしますが…
どうなってるんですかね。

0 件のコメント:

コメントを投稿