2012年7月3日火曜日

QuadBatchで早くなるか試してみた

QuadBatchを使うとBenchmarkシーンの結果が本当によくなるか試してみました。


結果:

Nexus One: 380 (370) -> 350 (350) // なぜか若干低下?
iPhone 4: 530 (220) -> 760 (400) // 43% アップ
プロジェクタ: 4410 (1160) -> 7110 (1740) // 61% アップ

※すべてリリースビルドでテストしました。
※カッコ内の数字は開発ビルドでの結果です(iOS用のパッケージ化方法は標準)。
※プロジェクタはデバッグ版でWindows 7環境です。
※FPSの設定は、デバイスのNexus OneとiPhone 4は30fps。プロジェクタは60fps。

全体的には確かにパフォーマンスがよくなりましたが、Nexus Oneで若干低下しました。今回のベンチマークテストでは画像がずっと回転しているので、毎フレームでquadBatch.reset()してすべてのオブジェクトをquadBatch.addImage()し直す必要があったなど、ActionScriptで処理することが逆に増えたということが、裏目に出たのかもしれません。

ところで、パフォーマンスチェックは「リリースビルドでやるべし!」ですね。通常の開発ビルドだとまったく本来のパフォーマンスがでないようですね。Flash Builderの実行構成ウィンドウでは、iOS用のパッケージ化方法「標準」はリリースビルドと同等のパフォーマンスだという説明がありますが、これは正しくないみたいですね。

ただ、これもNexus Oneは例外的で開発ビルドとリリースビルドの差がほとんどありませんね...

ちなみに、Webに公開するアプリを前提にしたパフォーマンスチェックするなら、"デバッグ版じゃない"Flash Playerでテストするべきなんですが、このベンチマークテストでは、パフォーマンスが良すぎて結果が出るまで時間がかかり過ぎますし、今回のQuadBatch版では、仕様上の限界に達するのかエラーになって止まってしまいます。どうもContex3Dで「ArgumentError: Error #3670: Buffer too big.」というエラーが出てるようです。この投稿によると、ひとつのQuadBatchに追加できるImage(Quad)の限界は8192個のようです。

最後に、今回試したBenchmarkScene2.asのソースです。

0 件のコメント:

コメントを投稿

コメントありがとう