Adobe Scout は Gaming SDK の一部として提供されている、Flash Player あるいは AIR 上 (内) で実行されるコンテンツのプロファイリング用のツールです。
詳細な情報を取得できるため、コンテンツの問題を解決するにはとても便利ですが、取得可能な情報が多いために、最初のうちは、どこから見たら良いのか戸惑ってしまうかもしれません。そこで、Scout が扱う情報の種類を整理してみたいと思います。
Scout は、以下の 5 種類の情報を取得する機能を持っています。各々の項目に対して、取得するかどうかを事前に指定できます。 (途中で変えることはできません)
- 基本 Telemetry
- ActionScript サンプラー
- CPU 使用率
- DisplayList レンダリング処理
- Stage3D の記録
各項目、それぞれ測定の対象となる動作も、測定の結果 Scout に送られるデータ量も異なります。具体的な問題が予め分かっている場合は、該当する項目を指定してプロファイルすれば良いのですが、何が問題かをまず確かめたいという時は、"基本 Telemetry" から始めるのがお勧めです。
基本 Telemetry
"基本 Telemetry" は、コンテンツの動作の概要を知るのに便利です。また、測定によるオーバーヘッドが非常に少ないため、測定結果は、普通に実行している場合と同等のパフォーマンスとみなすことができます。
その代わり、詳細な情報までは分かりません。どの系統の問題がパフォーマンス上のネックになっているのか ? 程度までが分かるもの、と思っておくのがよさそうです。
具体的には、"基本 Telemetry" をオンにすると、以下のパネルに情報が表示されます。
- フレームタイムライン
各フレームの、実行にかかった時間、CPU 使用率、メモリ、GPU メモリ、イベントを表示 - 概要
選択した期間内のフレームレート、合計フレーム時間、使用されたメモリの平均を表示 - 上位アクティビティ
選択した期間内に行われた主要なアクティビティとそれぞれにかかった時間を表示 - アクティビティシーケンス
あるフレームにおけるアクティビティを下位レベルまで表示
これらのパネルから、ある期間、或はあるフレームで、以下の 4 つの項目のどれに時間が費やされたかを推測することができます。
- ActionScript
- DisplayList レンダリング
- ネットワーク & ビデオ
- その他
もし、このとき ActionScript に時間がかかっているようであれば、"ActionScript サンプラー" もオンにして再びプロファイルを行います。
ActionScript サンプラー
"ActionScript サンプラー" は、1 ミリ秒ごとに、関数のコールスタックのスナップショットを記録します。これにより、ある瞬間に、どの関数が実行されていたかがわかります。
"ActionScript サンプラー" をオンにして測定すると、前述のフレームタイムラインと概要バネル内の、ActionScript 処理時間を、もう一段詳細に表示させられます。具体的には以下の項目が表示されます。
- ユーザーパッケージ
AS3 で記述されたコードの実行時間をパッケージごとに表示 - ビルトインパッケージ
ランタイム内のコードの実行時間をパッケージごとに表示 - Stage3D
Stage3D 関連の API の実行時間を表示 - ActionScript 2
AS2 で記述されたコードの実行時間を表示
また、ActionScript パネルに、選択した (複数の) フレーム内で実行された全てのメソッドが表示されるようになります。これにより、ある期間内に、どのメソッドにどのくらいの時間がかかったのかが一目でわかるようになります。
"ActionScript サンプラー" に関しては、その精度について少し気にしておいた方が良い場面があるかもしれません。1 ミリ秒ごとにスナップショットを撮るため、理論上は最大で 2 ミリ秒までの誤差が生じる可能性があります。
これは、無視できる程度の誤差に感じられるかもしれませんが、60 fps のコンテンツでは、フレームあたりの時間が 16.7 ミリ秒です。Flash Player にとって、ミリ病は無視できる程短い時間ではなさそうです。
さらに、オーバーヘッドの大きい測定項目を同時に測定した場合には、誤差は更に大きくなるかもしれません。
このような問題があるため、Scout は、ActionScript パネルの右上にデータ品質を表すマークを表示します。品質が高ければ緑色の顔、悪くなるにつれて、黄色から赤色の顔へと変化します。
とりあえず、正確に ActionScript のパフォーマンスを知りたい時は、他の測定項目はオフにして、できるだけ数多くの回数メソッドが呼ばれるような状態で測定を行うのが良さそうです。
CPU 使用率
"CPU 使用率" をオンにすると、OS から CPU の使用率を定期的に取得します。これは、OS 付属のパフォーマンスモニターに表示されるものと同じデータです。
"CPU 使用率" の測定はオーバーヘッドが少ないため、常時オンでもあまり問題は無さそうです。
描画関連
"DisplayList レンダリング処理" と "Stage3D の記録" は、どちらも測定時のオーバーヘッドが高い測定項目です。
そのため、描画関連の処理のパフォーマンスについては、まず、実際に問題があることを確認してから、詳細な情報を取得するのがお勧めです。
DisplayList レンダリング関連の問題の可能性を調べるには、"基本 Telemetry" を使います。"基本 Telemetry" のみがオンの状態でプロファイリングを行い、概要パネル内の DiplayList レンダリングにかかった時間を見ると、CPU 描画のチューニングが必要かどうか、見当をつけることができます.
Stage3D 処理のパフォーマンスを調べるには、"ActionScript サンプラー" もオンにして測定を行います。そして、概要パネルの ActionScript の下の階層を展開すると、Stage3D 関連の API にかかった時間が表示されます。
GPU 描画パフォーマンスを知るために、ActionScript の実行時間を測定するのは不思議な感じですが、Stage3D の API の処理時間は、実際には GPU で行われていた処理に要した時間なので、とりあえずここに分類されているようです。
以上の確認を行って、描画処理に問題がありそうだということになったら、"DisplayList レンダリング処理" または "Stage3D の記録" をオンにしてプロファイリングを行い、更に詳細な情報を取得します。
一般的な注意事項
Scout でプロファイリングを行う場合に、測定結果を意味のあるものにするには、利用者から見て正確な値を測定することが重要です。そこで、測定時に注意する点をいくつか紹介しておきます。
- デバッグ版の Flash Player を使用しない
- デバッグ用の SWF ファイルを使用しない
- 実際に使用されると想定されるスペックの H/W 上で実行する
- VM 上での実行も避ける(複数コアを使用できる環境が必要)
- 他のプログラムが実行されていない状態で測定する
- 他の SWF が実行されていない状態で測定する(ブラウザの不要なタブは閉じる)
- Telemetry データ送信を行うネットワークがボトルネックになっていないことを確認する
コメントする