パフォーマンスのプロファイリングとチューニングは、科学というより芸術に近い複雑なタスクです。ゲーム内で完全に同期する必要がある多くの可動部分と、特定のシーンの複雑さにより、問題を理解して特定することが難しくなることがあります。ChromeOS では、多くのツールが ARM チップセットを念頭に置いて設計されています。以下に、プロセスを迅速に進めるためのヒントをいくつかご紹介します。
ChromeOS でゲームのパフォーマンスを最適化する際に留意すべき点は、パフォーマンスに関する根本的な問題はすべてのデバイスで共通であり、改善によってすべてのユーザーのパフォーマンスとバッテリー駆動時間が向上するということです。ChromeOS は、大画面やパソコンの入力デバイスを使用する傾向があるため、特定の問題がより顕著になる可能性があります。たとえば、非効率的なテクスチャ読み込みアルゴリズムは、ハイエンドのモバイル デバイスでは「問題なく動作」するかもしれませんが、4K ディスプレイを搭載した Chromebook では処理が追いつかない可能性があります。アルゴリズムを改善すると、すべてのデバイスでゲームが改善されます。
プロファイリングを初めて行う場合は、次の一般的なアプローチをおすすめします。
- パフォーマンスが次のいずれかに制限されているかどうかを判断します。
- CPU
- GPU
- その他: 入力/ディスク/ネットワーク
- 主な原因を特定する
- 最適化を試す
- 繰り返し
ほとんどの場合、ゲームは「CPU バウンド」または「GPU バウンド」のいずれかになります。以下のプロファイリングのヒントとツールを使用して、各フレームでシステムが「時間を費やしている」場所を特定してみてください。たとえば、GPU がレンダリングを開始する前に頂点の計算と読み込みに時間がかかっている場合、ゲームは CPU バウンドになっている可能性があります。代わりに、詳細な GPU ベースのフィルタを多数使用している場合は、ゲームが GPU バウンドになっている可能性があります。多くの携帯電話や ChromeOS デバイスには、ディスクリート グラフィック カードが搭載されていません。GPU フィルタが高速であることを前提とするデスクトップ ゲームでは、統合 GPU が各シーンのレンダリングに時間がかかりすぎることがあります。
プロファイリングのアプローチについて詳しくは、ARM の 「最適化プロセス」に関するガイドをご覧ください。
ツール
ボトルネックを自分で特定することも可能ですが、適切なツールを使用すると、ゲームのパフォーマンスを簡単に分析でき、正しいことに集中しているという確信が得られます。さまざまなツールがありますが、ここではおすすめのプログラムをいくつかご紹介します。
Android Studio Profiler
Android アプリのプロファイリングを始める最も簡単な方法は、統合された Android Studio プロファイラを使用することです。Android Studio で、[実行] をクリックする代わりに [プロファイル] を選択するだけで、アプリを実行して CPU、メモリ、ネットワークの使用状況に関するリアルタイムの分析情報を取得できます。シンプルな CPU トレースは、確認するコード領域を特定するのに役立ちます。
このツールでは、GPU の使用率や各フレーム同期の間に何が起こっているかについての実際の分析情報は得られません。そのため、ツールボックスに入れておくと便利なツールではありますが、ゲームを最高のパフォーマンスで実行するには十分ではない可能性があります。
Snapdragon Profiler
ゲームの動作はデバイス間で同じになるため、パフォーマンスの詳細情報を取得する効果的な方法の一つは、Qualcomm ベースの ARM スマートフォンで Snapdragon Profiler を使用することです。ChromeOS デバイスで直接プロファイリングを行うことはできませんが、この方法で、ゲームが各フレームで最も時間を費やしている場所に関する情報を取得し、どの GPU 呼び出しが使用されているかを具体的に把握できます。
たとえば、異方性 GPU フィルタで大量の時間が費やされており、各フレームで実行される作業の大部分を占めていることがわかった場合は、この設定を変更することでパフォーマンスを大幅に向上させることができます。
GPU 時間が短く一定であるにもかかわらず、CPU 時間が長すぎてフレーム同期が失われている場合は、テクスチャの読み込み/フレーム準備アルゴリズムを確認してください。
詳しくは、公式の使用方法に関するドキュメントをご覧ください。
ARM Mobile Studio
もう一つの便利な ARM デバイス プロファイラは ARM Mobile Studio です。Snapdragon Profiler よりも好むデベロッパーもいるかもしれませんが、同様の方法で使用できます。公式の使用方法に関するドキュメントをご覧ください。
Android GPU Inspector
Android GPU Inspector は、Google が開発した新しいツールで、OpenGL と Vulkan の両方でゲームのパフォーマンスを最大限に引き出すために特別に設計されています。現在、デベロッパー プレビュー版であり、セットアップに手間がかかる場合があります。また、現在、動作するのは一部のデバイスのみです。今後、グラフィック プロファイリングに使用する主要なツールの 1 つになることが期待されます。公式ドキュメントをご覧ください。
ARC 概要トレース
上記の ARC グラフィック トレース ツールと同様に動作する、より汎用的なツール(ARC 概要トレース)もあります。このトレーサーは、アプリと ChromeOS のパフォーマンスに関する概要レベルの指標を提供します。読み出しには、アプリと Chrome 自体の FPS、CPU 使用率、GPU 使用率、消費電力などが表示されます。このツールは複数回実行でき、実行ごとにグラフが表示され、色分けされて区別されます。各トレースモデルは [ダウンロード] フォルダに保存され、後で比較するために再インポートできます。一般的なアプリのヘルスチェックには、ARC 概要トレースから始めることをおすすめします。
このツールにアクセスするには、ChromeOS のブラウザで chrome://arc-overview-tracing にアクセスします。
次のステップ
ボトルネックが見つかったものの、どうすればよいかわからないという場合もあるでしょう。または、問題を見つけて対処したものの、次に何をすべきかわからない場合。以下に、Android 全般とエンジン固有のヒントとリソースをまとめました。
全般的なヒント
Android デベロッパー ポータルには、アプリケーションのパフォーマンスを向上させるためのヒントがいくつか掲載されています。読み込み時間の考慮事項、マルチスレッドの活用方法、入力遅延の処理などについては、こちらをご覧ください。
特に、性能の低いマシンをターゲットにしている場合や、ハイエンド アーキテクチャの限界を押し広げようとしている場合は、早期に頻繁にプロファイリングを行うようにしてください。アプリのパフォーマンス統計情報を把握しておくと、フレームレートを低下させた変更や、目標とするスムーズなエクスペリエンスの維持に役立つ変更を特定するのに役立ちます。
Unity エンジン
Unity は、一般的な Android ドキュメントに加えて、Chrome OS 固有のドキュメントも提供しています。このドキュメントは、Unity のエンジンを使用してパフォーマンスの高い ChromeOS アプリケーションを作成する際に役立ちます。スタートガイド、入力、デバッグ、ビルドに関する ChromeOS ドキュメントをご覧ください。x86 ビルドの作成方法も記載されています。パフォーマンスに関するコンテンツについては、最適化についてと、パフォーマンスと最適化に関するコースをご覧ください。
ARM の Unity ゲームのプロファイリングと最適化に関するガイドと関連するベスト プラクティスを読むことをおすすめします。このガイドでは、ARM Mobile Studio の一部である Streamline ツールを使用して、Unity でサンプルゲームのプロファイリングを行う手順について説明します。
Unreal Engine
Unreal は、エンジンが提供する多くのオプションと設定を最大限に活用する方法を説明する独自のパフォーマンス ガイドラインとヒントとコツのドキュメントを作成しています。ここでは、詳細レベルのトリック、ライティングを最大限に活用する方法、マテリアル品質の設定とシェーダーに関するステップバイステップ ガイドなどの提案を確認できます。
グラフィック ベースの最適化について詳しくは、ARM が作成したモバイルゲームの最適化に関するガイドをご覧ください。一般的な最適化のヒントと Unreal 固有のグラフィックに関する考慮事項については、こちらをご覧ください。