# ビルトインプロファイラーによるパフォーマンスの測定

> Use and configure the built-in profiler for iOS.

**注意**内部プロファイラーは非推奨で、Unity の将来のバージョンで廃止される予定です。代わりに [Profiler ウィンドウ](/engine/6000.0/manual/analysis/profiler/window.md) (メニュー: **Window** > **Analysis** > **Profiler**) を使用してください。iOS デバイスをプロファイルする方法の詳細は、[iOS デバイスでのパフォーマンスデータの収集](/engine/6000.0/manual/platform-specific/iphone/ios-developing/ios-testing-and-debugging/ios-profile-device.md)を参照してください。

Unity には、iOS 用のビルトインプロプロファイラーが含まれており、アプリケーションの実行状況を把握できます。ビルトインプロファイラーは、デバイス上で実行されているアプリケーションから 30 フレームごとにコンソールメッセージを発行しますが、これは CPU 依存か GPU 依存かの判断を支援します。アプリケーションが CPU 依存の場合は、スクリプトコードとガベージコレクションのどちらがボトルネックの原因かを判断することもできます。

以下は、ビルトインプロファイラーの出力例です。

```
iPhone Unity internal profiler stats
frametime>     min: 32.5   max: 34.1   avg: 33.3
cpu-player>    min:  2.2   max:  4.4   avg:  3.7
batches>       min:   3    max:   3    avg:   3
draw calls>    min:   3    max:   3    avg:   3
tris>          min:  1704  max:  1704  avg:  1704
verts>         min:  5088  max:  5088  avg:  5088
dynamic batching> batched draw calls:   0 batches:   0 tris:     0 verts:     0
static batching>  batched draw calls:   0 batches:   0 tris:     0 verts:     0
player-detail> physx:  0.0 animation:  0.0 culling  0.0 skinning:  0.0 batching:  0.0 render:  0.0 fixed-update-count: 0 .. 0
scripting-scripts>  update:  0.0   fixedUpdate:  0.0 coroutines:  0.0 
scripting-memory>   information not available on non-development player configuration
```

すべての時間はミリ秒/フレームで測定されます。直近 30 フレームの最短時間、最長時間、平均時間を確認できます。

## 一般的な CPU アクティビティ##general-cpu-activity

| **プロパティ**                      | **機能**                                                                                                             |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
| **cpu-player**                 | アプリケーションが Unity エンジンの中でコードを実行したり、CPU でスクリプトを実行する時間を表示します。                                                          |
| **cpu-ogles-drv** (Android のみ) | CPU 上での OpenGL ES ドライバーコードの実行に要する時間を表示します。ドローコール、内部レンダリングのステート変更、レンダーパイプラインの設定、処理された頂点数などのいくつかの要因が、ドライバーの統計に影響します。 |
| **cpu-present** (Android のみ)   | OpenGL ES の `presentRenderbuffer` コマンド実行に要した時間。                                                                    |
| **frametime**                  | アプリケーションフレームの総時間を表します。iOS ハードウェアは 60Hz のリフレッシュレートにロックされているため、常に 16.7ms (1000ms/60Hz = 16.7ms) の倍数の時間を返します。         |

## レンダリング統計##rendering-statistics

| **プロパティ**                   | **機能**                                                                                                                                   |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **tris #**                  | レンダリングに送信される三角形の総数を表示します。                                                                                                                |
| **verts #**                 | レンダリングに送信される頂点の総数。アプリケーションが静的ジオメトリのみを使用する場合は、この数値を 10000 未満に保つ必要があります。アプリケーションでスキンジオメトリのインスタンスを多数使用する場合は、この数ははるかに少なくなります。                |
| **dynamic/static batching** | エンジンにより自動的にバッチ処理されたドローコール、三角形、および頂点の数。この数をドローコールと三角形の総数と比較することで、シーンがバッチ処理するのに適しているか判断する材料となります。バッチ処理を改善するには、オブジェクト内でできる限りマテリアルを共有するべきです。 |

## 詳しい Unity プレイヤー統計情報##detailed-unity-player-statistics

**player-detail** セクションには、エンジン内部の状況の詳細な内訳が表示されます。

| **プロパティ**              | **機能**                                                                    |
| ---------------------- | ------------------------------------------------------------------------- |
| **physx**              | 物理エンジンの計算に要した時間を表示します。                                                    |
| **animation**          | ボーンアニメーションに要した時間を表示します。                                                   |
| **culling**            | カメラの Frustum 外のオブジェクトカリングに要した時間を表示します。                                    |
| **skinning**           | スキンメッシュへのアニメーション適用に要した時間を表示します。                                           |
| **batching**           | ジオメトリのバッチ処理に要した時間。動的なジオメトリのバッチ処理は静的なジオメトリのバッチ処理より、リソースの負担が顕著に高くなります。      |
| **render**             | 表示されるオブジェクトのレンダリングに要した時間を表示します。                                           |
| **fixed-update-count** | このフレームで実行される FixedUpdate の最小数と最大数。FixedUpdate の数が大きすぎると、パフォーマンスが著しく低下します。 |

## 詳しいスクリプト統計##detailed-script-statistics

**scripting-scripts** セクションは、 Mono ランタイムでコードを実行するのに要した時間の詳細な内訳を提供します。

| **プロパティ**       | **機能**                                          |
| --------------- | ----------------------------------------------- |
| **update**      | スクリプトのすべての `Update()` メソッド実行に要した総時間を表示します。      |
| **fixedUpdate** | スクリプトのすべての `FixedUpdate()` メソッド実行に要した総時間を表示します。 |
| **coroutines**  | スクリプトのコルーチン内で要した時間を表示します。                       |

## スクリプトによって割り当てられたメモリに関する詳細な統計を表示します。##detailed-statistics-on-memory-allocated-by-scripts

**scripting-memory** セクションは、Mono ガベージコレクターによるメモリの管理状況に関する情報を提供します。

| **プロパティ**:                    | **機能**:                                                                                            |
| ----------------------------- | -------------------------------------------------------------------------------------------------- |
| **allocated heap**            | 割り当て可能なメモリの総量。所定の割り当てに十分なメモリがヒープにない場合、ガベージコレクションがトリガーされます。これで十分なメモリが解放されない場合、割り当てられたヒープのサイズが増加します。 |
| **used heap**                 | 現在、オブジェクトが使用している **allocated heap** の量。この数は、新しいクラスインスタンス (構造体ではない) を作成するたびに、次のガベージコレクションまで増え続けます。  |
| **max number of collections** | 直近 30 フレームでのガベージコレクションが行われた回数を表示します。                                                               |
| **collection total duration** | 直近 30 フレームでのガベージコレクションの総時間 (ミリ秒単位) を表示します。                                                         |

## 設定方法##configuration

iOS では、内部プロファイラーがデフォルトで無効になっています。有効にするには、以下のいずれかのプロセスを使用します。

### Xcode プロジェクト##xcode-project

Xcode プロジェクトから内部プロファイラーを有効にするには、以下の手順に従います。

1. Unity が生成した Xcode プロジェクトを開きます。
2. `InternalProfiler.h` ファイルを選択します。
3. 以下の

```
#define ENABLE_INTERNAL_PROFILER 0
```

の行を以下のように変更します。

```
#define ENABLE_INTERNAL_PROFILER 1
```

### Player 設定##player-settings

Unity で内部プロファイラーを有効にするには、以下の手順に従います。

1. メインメニューで、**Edit** > **Project Settings** > **Player Settings** > **iOS** を選択します。
2. **Debugging and crash reporting** セクションで、**Enable Internal Profiler (Deprecated)** を有効にします。

**ノート**: アプリケーションをビルドするときに、**Build Settings** から **Development Build** オプションが有効になっていることを確認します。

## コンソールの表示##display-the-console

出力コンソールを表示するには、Xcode で **View** > **Debug Area** > **Activate Console** を選択してプロジェクトを実行します。Unity は統計情報を 30 フレームごとにコンソールウィンドウに表示します。
