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 件のコメント:

コメントを投稿