# 빌트인 프로파일러로 성능 측정

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

**참고:** 내부 프로파일러는 지원이 중단되어 향후 Unity 버전에서 종료될 예정입니다. 대신 [프로파일러 창](/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(1,000ms/60Hz = 16.7ms)의 배수인 시간을 반환합니다.                       |

## 렌더링 통계##rendering-statistics

| **프로퍼티**                    | **기능**                                                                                                                            |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **tris #**                  | 렌더링하기 위해 전송된 총 삼각형 수입니다.                                                                                                          |
| **verts #**                 | 렌더링하기 위해 전송된 총 버텍스 수입니다. 애플리케이션이 정적 지오메트리만 사용하는 경우 이 숫자를 10000 미만으로 유지합니다. 애플리케이션에서 스킨드 지오메트리의 인스턴스를 많이 사용하는 경우 이 수치는 훨씬 낮아야 합니다. |
| **dynamic/static batching** | 엔진이 자동으로 배칭한 드로우 콜, 삼각형, 버텍스 수입니다. 이 수치를 드로우 콜 및 삼각형 합계와 비교하면 씬이 배칭에 얼마나 적절하게 준비되었는지 알 수 있습니다. 오브젝트 간에 머티리얼을 최대한 공유하여 배칭을 개선합니다.  |

## 상세 Unity 플레이어 통계##detailed-unity-player-statistics

**player-detail** 섹션에서 엔진 내부 동작에 대한 상세 내역을 확인할 수 있습니다.

| **프로퍼티**               | **기능**                                                                   |
| ---------------------- | ------------------------------------------------------------------------ |
| **physx**              | 물리 연산에 소요된 시간입니다.                                                        |
| **animation**          | 뼈대 애니메이션에 소요된 시간입니다.                                                     |
| **culling**            | 카메라 절두체 밖에 있는 오브젝트를 컬링하는 데 소요된 시간입니다.                                    |
| **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**                 | 현재 오브젝트가 사용하는 **할당된 힙** 의 부분입니다. 구조체가 아닌 새로운 클래스 인스턴스를 생성할 때마다 이 수치가 다음 가비지 컬렉션까지 증가합니다.                |
| **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-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프레임마다 콘솔 창에 출력합니다.
