本内容は複数の記事で構成されています。検索などでこの記事に直接飛んできた方はまず以下の記事をご確認ください。
pafuhana1213.hatenablog.com
はじめに
みんな大好きプロファイリングについての話です。
iOS開発では、Instrumentsというプロファイリング用のツールが用意されています。ここではをUE4で開発をする際にどのようにしてInstrumentsを使うかについて説明します。
…実機上で各statコマンドを活用することもお忘れなく。
Instruments起動前の前準備
Instrumentsの起動
まずはXcodeのメニューからInstrumentsを起動します。なお、起動後にInstrumentsをDockに登録しておくと次回以降の起動がXcodeなしで出来るので楽になります。
Instumentsを起動すると、以下のようなウィンドウが開きます。Instrumentsではプロファイリングする項目を選択できるようになっています。ただその項目の量が結構多いため、それらの項目が用途別にまとめられたテンプレートを選択する形になっています。
そして、UE4を使った開発の場合、主に使うテンプレートは以下の3つかと思います。ただ他にも色々項目があるので、軽く見ておくのも良いかと思います。(ただし、iOSでは非サポートの項目もあるのでご注意を)
- Time Profiler
- Game threadのプロファイル
- オーバヘッド:小
- Metal System Trace
- Game, Draw, GPU threadのプロファイル
- オーバヘッド:中
- Game Performance
- Game, Draw, GPU thread + Memory管理 のプロファイル
- オーバヘッド:大
また、表示されたウィンドウの上部にはプロファイリングを行う端末・プロセス名が表示されます。もし意図する対象とは異なる場合はクリックして変更しましょう。
Instrumentsの実行…前の準備
dSYMの配置場所の指定
テンプレート選択したので早速プロファイリングしたい所ですが、まずはInstrumentsのPreferences->Symbolsに、UE4が生成したdSYMがどこにあるのかを設定する必要があります。この設定をしなかった場合、Time Profilerにおける処理項目名がよく分からない文字列になるのでご注意下さい。
一応、あとでdSYMを直接指定することも可能です。具体的には、InstrumentsのFile->SymbolsからdSYMに関する情報を確認・変更可能です。
stat namedevents コマンドを実行
Instrumentsによるプロファイリング結果を正しい形で見るために、アプリ起動後に “stat namedevents”コマンドを実行する必要があります。このコマンドを実行しなかった場合、dSYMを指定しなかった場合と同様に、プロファイリング結果をまともに見ることができなくなるためご注意下さい。
ちなみに、他の外部プロファイリングツールでも同様です。stat namedeventsコマンド、大事です。
Instrumentsの実行
ようやく準備が整いました。これでInstruments左上の録画ボタンを押すことでプロファイリングが開始し、もう一度押すと終了します。ちなみに、下の画像はGame Performanceテンプレートを使用した際のプロファイリング結果です。
それぞれの項目について細かく解説するといつまで経っても終わらないので、ざっくり説明します。
Time Profiler
今回紹介したテンプレートは全てTime Profilerテンプレートを内包します。で、Time Profilerの結果が見れるのがこの CPU Usageです。指定した範囲における各処理の負荷・呼び出し回数などを確認可能です。GameThreadがボトルネックになっている場合、この情報が役に立つ可能性が高いです。
developer.apple.com
ただ少し注意しないといけないことが幾つかあります。
まずは、UE4以外の処理も抽出されてしまう点です。フィルタを適用しない場合、以下のようによく分からない処理が大量に並びます。
これでは調査に支障が出てしまうため、Instrumentの左下にあるInput Filter機能を活用します。ここにある [ IOSAPPDelegate MainAppThread ]を選択することで、UE4関連の処理だけを表示するようになります。
次に、同じくInstrument左下にあるCall Treeにおける”Hide System Libraries”は必ず有効にしましょう。
有効にしない場合、以下の画像のように項目名が解読不能になってしまいます。
Call Treeには他にも調査する上で便利な項目があるので、一度試してみましょう!
Displayed Surfaces
Metal System Trace, またはGame Performanceテンプレートに含まれます。この項目ではVsyncのタイミングを確認する事が可能です。それだけの項目なので、他の項目と併用することになります。例えば、Time Profilerでだいたい1フレームにおける負荷を見たい場合は、このVsyncタイミング情報は非常に有用です。
developer.apple.com
Graphics Driver Activity
Metal System Trace, またはGame Performanceテンプレートに含まれます。この項目では、描画に関するCPU側のイベントを確認できます。ただGPUフレームキャプチャのように詳細は見れません。どの処理がどの程度負荷があったのかを確認する程度です。
developer.apple.com
GPU Hardware
Metal System Trace, またはGame Performanceテンプレートに含まれます。この項目では、描画に関するGPU側のイベントを確認できます。具体的には、頂点・フラグメントシェーダにおける負荷を確認可能です。ただし、先程と同様に詳細(使用されたテクスチャ、どのようなメッシュが描画されたかなど)は全く見れません。
developer.apple.com