2011年7月27日水曜日

AIR 2.6とAIR 2.7の描画速度比較

AIR for iOSで実行する時のグラフィック描画速度を、開発中のアプリ「ネコライフ時計 for iPad(仮)」で計測してみました。

アプリは最大30フレームで動作するように設定しています。計測デバイスは初代iPadです。
結果は以下のようになりました。
計測条件フレーム数
AIR 2.6 + CPUレンダリング + 非ビットマップ6 frame
AIR 2.6 + CPUレンダリング + ビットマップ6 frame
AIR 2.6 + GPUレンダリング + 非ビットマップ3 frame
AIR 2.6 + GPUレンダリング + ビットマップ23 frame
AIR 2.7 + CPUレンダリング + 非ビットマップ13 frame
AIR 2.7 + CPUレンダリング + ビットマップ13 frame
AIR 2.7 + GPUレンダリング + 非ビットマップ3 frame
AIR 2.7 + GPUレンダリング + ビットマップ23 frame

非ビットマップというのは、ネコなどのムービークリップをシェイプのまま使用しているという意味です。
ビットマップは全て実行時にビットマップにする方法をとっています。
ActionScript3で、以下のように記述しています。
displayobject.cacheAsBitmap = true;
displayobject.cacheAsBitmapMatrix = new Matrix();

個人的にうっかりしていたのは、GPUレンダリングモード時でもAIR 2.7の描画速度最適化の恩恵が得られると思っていたのですが、計測結果が表すようにそうではありませんでした。
しっかり公式発表にもCPUレンダリングモード時と書いてありました。

計測結果を見ると、ビットマップ化してGPUでレンダリングするのが一番速いのがわかります。
このことだけをとってみれば、AIR 2.6とAIR 2.7の違いは無いようです。
さて、シェイプタイプのムービークリップをビットマップ化するタイミングですが、今回の実験のように実行時に行うと、レンダリングの結果がCPUモードとGPUモード時で結構変わってしまうことが分かりました。

CPUモードで実行時ビットマップレンダリング

GPUモードで実行時ビットマップレンダリング

ステージのレンダリングクオリティはどちらともデフォルトの設定のままなので、以下の設定と同等だと思われます。
stage.quality = StageQuality.MEDIUM;

この事を踏まえると、ビットマップ化は実行時にするのでは無く、パブリッシュ時に行ってしまう方が、映像のクオリティ的には良いと思われます。

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...