記事寄稿:廣畑 大雅 (taiga)氏
Flash Player Internals
アドビ システムズ社 Flash Player アーキテクトのリー・トマソン氏のセッションでは、Flash Player の内部構造についての説明が行われました。セッションの後半には、発表されたばかりの Flash Player 10.1についての説明もあり、深くて非常にレベルの高い内容のセッションでした。
MAX 2009: Flash Player Internals
Flash Player の構築
Flash Player は、一つのソースコードで構築されていて、大半は、基盤としてすべてのターゲットの Flash Player 間で共有されています。他には、モバイルプラットフォーム、Netscape プラットフォームなど、各プラットフォームの専用コードがあります。
Flash Player は一貫性を保ちながらクロスプラットフォームに対応し、最適化されていますが、以下の相違点があります。
- CPU メモリ
- 画面サイズ
- マウス、キーパッド、タッチ
- ユーザーエクスペリエンス
実際の例として、下記のコードは、PC 上では動作しますが、合計メモリサイズが 100MB のモバイル上では失敗します。
for(var i:int = 0; i < 10; i++) {
data[i] = new BitmapData(1600, 1600);
...
}
Flash Player の基本構造
実行モデルについて
Flash Player のスレッドは、シングルスレッドです。
以下の画像のようなサイクルで処理を実行します。

実行モデルが十分に機能しているときは、すべての処理を同時に実行することができません。
そのような場合、BitmapData.draw() を除いて、処理はすべてキューイングされます。
なお、updateAfterEvent() を実行した場合、以下の画像のようなサイクルで処理を実行します。

実行タイミングの優先順位について
以下の順に実行されます。
- 音楽ストリーミング
- ビデオ
- ActionScript と描画処理
Flash Player 10.1 のリソース管理
- Flash Player は メモリ不足や、正常シャットダウンをハンドリングします
- モバイルではインスタンスを管理します
ActionScript について
ActionScript Virtual Machine (VM)
- AS2は、AVM-1上で動作します。
- AS3は、AVM-2 Tamarin の上で動きます
- JIT は、AS3バイトコードを実行コードに変えます
- Nanojit は、JIT エンジンです。
- コミュニティサポートをして、複数のプロセッサをサポートします。https://developer.mozilla.org/En/Nanojit
- Flash Player 10.1 新機能
- String 処理の改善
- 低 VM メモリ占有スペース
- GCチューニング
ガベージコレクション (GC)
- GC はメモリ管理ではありません
- メモリ管理は巧妙です
- 手動でインタフェースを実装して、明示的に dispose します
- GCでは、素数が役に立ちます
Alchemy
- C/C++ で開発されたコードを AVM2 で動作するコードにコンパイルします
- Ralph Hauwert 氏の 「 3D Particles with Alchemy 」が参考になります
- http://www.unitzeroone.com/blog/2009/03/18/
flash-10-massive-amounts-of-3d-particles-with-alchemy-source-included/
レンダリングについて
Flash Player 10.1 のビデオアクセラレーションについて
- ビデオは、GPU 上でデコードされています
- H.264 エンコーディングのみ対応し、ドライバの認証を行います
( ON2, Sorenson は、一般的ではありません ) - 電力使用量とフレームレートを改善しています
- すべての wmode をサポートしています
Flash Player 10.1 のビットマップ最適化について
- 要求に応じて JPEG の圧縮率を減らします
- 表面のインスタンス化
読み込み専用ビットマップのための、一ビットマップのメモリコストではありません
ビットマップを少しずつ収集します
未使用メモリは解放します - ダイレクト ミップマッピング
モバイルにとって特に重要です - モバイルにおける効果的な 16 ビットの取扱い
モバイル上 Flash Player 10.1 の GPU ベクターアクセラレーションについて
- モバイル初!
- GPU レンダラとソフトウェアレンダラを完全に置き換えます
- 理論 : 計算処理を CPU から GPU に移行します
パフォーマンスのボトルネックについて
注意すべき点は以下の通りです。
- ActionScript
- ActionScript 3.0 を使用しましょう
- 実行間隔と、高フレームレートに注意しましょう
- モバイルの表示リスト
- 最小維持を心がけましょう
- Sprite の多様は避けましょう
- ビデオ
- サイズ、フォーマット、およびターゲットに適切なフレームレートを適応させましょう
- ガベージコレクション
- レンダリング
なお、ソフトウェアと GPU のベクターレンダラ機能比較は以下の画像の通りです。

