# 프로파일러 마커 레퍼런스

> Reference for built-in Profiler markers.

Unity의 코드는 애플리케이션에서 시간을 소비하는 항목에 대한 인사이트를 제공하는 [프로파일러 마커](/engine/6000.0/manual/analysis/profiler/adding-information-code/intro.md#profiler-markers)로 계측됩니다. 다음 표에는 몇 가지 빌트인 마커 목록이 나와 있습니다.

* [메인 스레드 기본 마커](#main-thread)
* [스크립트 업데이트 마커](#script-update)
* [렌더링 및 VSync 마커](#rendering)
* [백엔드 및 스크립팅 마커](#backend)
* [멀티스레드 마커](#multithreading)
* [물리 마커](#physics)
* [애니메이션 마커](#animation)
* [성능 경고](#warnings)

## 메인 스레드 기본 마커##main-thread-base-markers

메인 스레드 기본 마커는 애플리케이션에 소비된 시간과 Unity 에디터 및 프로파일러 활동에 소비된 시간을 명확하게 구분합니다. 또한 이러한 마커를 [`ProfilerRecorder`](/engine/6000.0/script-reference/unity-profiling/profiler-recorder.md) API와 함께 사용하여 메인 스레드의 프레임 타이밍을 가져오거나, 런타임 시 고수준 프레임 스탯을 위한 [`FrameTimingManager`](/engine/6000.0/script-reference/unity-engine/frame-timing-manager.md) API를 사용할 수도 있습니다.

또한 렌더링 프로파일러 카운터인 CPU 메인 스레드 프레임 시간, CPU 렌더 스레드 프레임 시간, CPU 총 프레임 시간을 사용하여 애플리케이션의 CPU 사용량에 대한 높은 수준의 타이밍을 얻을 수 있습니다. 자세한 내용은 [렌더링 프로파일러 카운터 레퍼런스](/engine/6000.0/manual/analysis/profiler/counters-reference.md#rendering)를 참조하십시오.

| **마커**                                       | **설명**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **PlayerLoop**                               | 애플리케이션의 기본 루프에서 생성된 모든 샘플이 포함되어 있습니다. 플레이어가 활성 상태의 플레이 모드로 에디터 내에서 실행되는 동안 플레이 모드 대신 [에디터를 대상으로 하는](/engine/6000.0/manual/analysis/profiler/collect-data/profiling-applications/profiling-edit-mode.md) 경우 PlayerLoop 샘플은 EditorLoop 아래에 중첩됩니다.                                                                                                                                                                                                                                                           |
| **EditorLoop***(에디터 전용 마커)*                  | 에디터의 기본 루프에서 생성된 모든 샘플이 포함되어 있습니다. 이는 [에디터에서 플레이어를 프로파일링](/engine/6000.0/manual/analysis/profiler/collect-data/profiling-applications/profiling-edit-mode.md)하는 동안만 존재합니다. [프로파일러를 사용하여 플레이 모드를 타게팅](/engine/6000.0/manual/analysis/profiler/collect-data/profiling-applications/profiling-play-mode.md)하는 경우 EditorLoop 샘플은 플레이어가 포함된 에디터를 렌더링하고 실행하는 데 소요된 시간을 나타냅니다.자세한 내용은 [플레이 모드 및 편집 모드 샘플](/engine/6000.0/manual/analysis/profiler/collect-data/play-edit-samples.md)을 참조하십시오.                    |
| **Profiler.CollectEditorStats***(에디터 전용 마커)* | 다양한 활성 Profiler 모듈의 통계 수집과 관련된 모든 샘플이 포함되어 있습니다.`Profiler.CollectGlobalStats` 마커 아래에 중첩된 샘플은 특정 모듈의 통계를 수집할 때 플레이어의 오버헤드 양을 나타냅니다. 다른 모든 자식 샘플은 에디터에서만 해당 효과를 반영합니다.특정 모듈의 오버헤드를 제거하려면 모듈의 차트를 닫거나 `Profiler.SetAreaEnabled`를 호출합니다.**참고:** 빌트인 카운터를 사용하는 [커스텀 Profiler 모듈](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/customizing.md)은 자신이 속한 모듈이 비활성화된 경우에도 빌트인 카운터의 영역을 활성화합니다. 프로파일러가 이러한 통계를 수집하고 컬렉션 오버헤드를 생성하지 않도록 하려면 빌트인 Profiler 모듈과 커스텀 Profiler 모듈을 모두 비활성화해야 합니다. |

## 스크립트 업데이트 마커##script-update-markers

[잡 시스템](/engine/6000.0/manual/scripting/optimization/job-system.md)을 사용하지 않는 한 대부분의 스크립팅 코드는 다음 마커의 아래에 중첩됩니다. 잡 시스템 샘플에 대한 자세한 내용은 이 페이지의 [멀티 스레드 마커](#multithreading) 섹션을 참조하십시오.

Unity의 업데이트 루프에 대한 자세한 내용은 [이벤트 함수 실행 순서](/engine/6000.0/manual/scripting/object-oriented-development/event-handling/execution-order.md) 기술 자료를 참조하십시오. [`PlayerLoop.SetPlayerLoop`](/engine/6000.0/script-reference/unity-engine-low-level/player-loop/set-player-loop.md)를 사용하여 자체 콜백을 [플레이어 루프](/engine/6000.0/script-reference/unity-engine-low-level/player-loop.md)에 삽입할 수 있습니다. 메인 루프에 콜백을 직접 삽입하면 스크립트 업데이트 샘플이 자체적으로 나타납니다. 콜백을 보조 시스템으로 삽입하면 샘플이 각각의 메인 PlayerLoopSystem 마커 아래에 나타납니다.

| **마커**                                         | **설명**                                                                                                                                                                               |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **BehaviourUpdate**                            | 모든 [`MonoBehaviour.Update`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/update.md) 메서드의 샘플이 포함되어 있습니다.                                                               |
| **CoroutinesDelayedCalls**                     | 첫 번째 산출 이후의 모든 [코루틴](ScriptRef:Coroutine.) 샘플이 들어 있습니다.                                                                                                                              |
| **FixedBehaviourUpdate**                       | 모든 [`Monobehaviour.FixedUpdate`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/fixed-update.md) 메서드의 샘플이 포함되어 있습니다.                                                    |
| **PreLateUpdate.ScriptRunBehaviourLateUpdate** | 모든 [`Monobehaviour.LateUpdate`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/late-update.md) 메서드의 샘플이 포함되어 있습니다.                                                      |
| **Update.ScriptRunBehaviourUpdate**            | 모든 [`MonoBehaviour.Update`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/update.md) 및 [코루틴](/engine/6000.0/script-reference/unity-engine/coroutine.md) 샘플이 포함되어 있습니다. |

## 렌더링 및 VSync 마커##rendering-and-vsync-markers

이러한 마커에는 CPU가 GPU에 대한 데이터 처리에 시간을 소비하는 샘플, 또는 GPU가 완료되기를 기다리는 샘플이 포함되어 있습니다. [GPU Profiler 모듈](/engine/6000.0/manual/rendering-and-post-processing/graphics-performance-profiling/profile-rendering/profiler-gpu.md)을 이용할 수 없거나 오버헤드가 과도해지는 경우에는 Profiler 모듈 세부 정보 창의 툴바에 이러한 정보가 표시되지 않습니다. 이러한 마커 아래의 샘플은 애플리케이션이 CPU 바운드 또는 GPU 바운드인지 분명히 알려 줍니다.

| **마커**                                                                                                                                                    | **설명**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **WaitForTargetFPS**                                                                                                                                      | 애플리케이션이 [`Application.targetFrameRate`](/engine/6000.0/script-reference/unity-engine/application/target-frame-rate.md)가 지정하는 타게팅된 FPS를 기다리는 데 소요된 시간을 나타냅니다.이 샘플이 Gfx.WaitForPresentOnGfxThread의 하위 샘플인 경우 애플리케이션이 GPU를 기다리는 데 소요하는 시간을 나타냅니다. 예를 들어, [QualitySettings.vSyncCount](/engine/6000.0/script-reference/unity-engine/quality-settings/v-sync-count.md)에서 설정된 경우, 또는 타겟 플랫폼에서 vSync가 적용된 경우 GPU가 다음 VSync를 기다리는 데 소요하는 시간일 수 있습니다. 그러나 GPU가 프레임 계산을 완료하지 않은 경우에도 이 마커가 있는 샘플이 방출됩니다.이 마커가 있는 샘플이 많은 시간을 소모하는 원인을 확인하려면 [CPU Profiler 모듈의 Timeline 뷰](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md)로 전환하십시오. 이 뷰에서는 렌더 스레드에서 발생한 상황 및 현재 프레임에서 끝나는 이 샘플과 주변 프레임에서 끝나는 동일한 샘플 사이에 경과한 시간을 확인할 수 있습니다.기간이(타겟 프레임 속도 또는 vSync에 따라) 애플리케이션의 프레임 시간보다 길면 프레임이 렌더링하거나 계산하는 데 너무 오래 걸립니다. 이러한 경우 렌더 스레드를 조사하고 Gfx.PresentFrame에서 GPU에 커맨드를 준비 및 발행하는 데 다른 작업보다 소요한 시간을 확인합니다. 렌더 스레드가 Gfx.PresentFrame에서 많은 시간을 소비한 경우 렌더링 작업은 GPU 바운드입니다. 렌더 스레드의 시간이 커맨드 준비에 소요된 경우, 애플리케이션은 CPU 바운드입니다.애플리케이션이 GPU 바운드인 경우 초점을 맞춰야 할 부분을 찾으려면 Unity 프로파일러 또는 플랫폼 프로파일러를 사용하여 GPU 작업을 프로파일링합니다. 자세한 내용은 [그래픽스 성능 최적화](/engine/6000.0/manual/rendering-and-post-processing/graphics-performance-profiling/optimizing-graphics-performance.md) 방법에 대한 사용자 매뉴얼 기술 자료를 참조하십시오.**참고:** 에디터는 GPU에서 VSync를 수행하지 않고 대신에 WaitForTargetFPS를 사용하여 VSync 지연을 시뮬레이션합니다. Android, iOS와 같은 일부 플랫폼은 VSync를 강제로 적용하거나, 30 또는 60의 기본 프레임 속도 상한을 지정합니다. |
| **Gfx.PresentFrame**                                                                                                                                      | 애플리케이션이 GPU가 프레임을 렌더링하고 표시할 때까지 대기하는 데 소요된 시간을 나타내며, 여기에는 VSync 대기가 포함됩니다.메인 스레드에 WaitForTargetFPS 마커가 있는 샘플은 VSync를 기다리는 데 소요된 시간을 보여 줍니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| **Gfx.ProcessCommands**                                                                                                                                   | 렌더 스레드의 모든 렌더링 커맨드 처리가 포함되어 있습니다. 애플리케이션이 메인 스레드에서 VSync 또는 새 커맨드를 기다리는 데 시간을 소비했을 수 있으며, 이는 해당 자식 샘플 Gfx.WaitForPresentOnGfxThread에서 확인할 수 있습니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **Gfx.WaitForCommands**                                                                                                                                   | 렌더 스레드가 새 커맨드에 대한 준비가 되었음을 나타냅니다. 이 마커가 나타나면 메인 스레드의 병목 현상을 나타낼 수 있습니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `<GraphicsAPIName>.WaitForLastPresent` 예시:**GfxDeviceD3D11.WaitForLastPresent****GfxDeviceD3D12.WaitForLastPresent****GfxDeviceMetal.WaitForLastPresent** | 이 마커가 있는 샘플은 메인 스레드가 GPU가 프레임 숫자를 화면으로 플립하기 위해 기다린 경우 나타납니다(`Time.frameCount - QualitySettings.maxQueuedFrames + 1`). 즉 QualitySettings.maxQueuedFrames가 1보다 크면 애플리케이션이 이전 메인 스레드 프레임에서 렌더링하도록 요청한 프레임을 GPU가 플립할 때까지 기다리는 데 이 시간이 소요됩니다.이 샘플에 대한 자세한 내용과 Unity의 프레임 파이프라인 개요는 [델타 시간 해결에 대한 Unity 블로그 포스트](https://unity.com/blog/engine-platform/fixing-time-deltatime-in-unity-2020-2-for-smoother-gameplay)를 참조하십시오.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| **Gfx.WaitForPresentOnGfxThread**                                                                                                                         | 메인 스레드는 다음 프레임 렌더링을 시작할 준비가 되었지만, 렌더 스레드가 GPU가 프레임을 표시할 때까지 대기하는 것을 완료하지 않았음을 나타냅니다. 이는 애플리케이션이 GPU 바운드임을 나타낼 수 있습니다. 렌더 스레드가 동시에 시간을 소비하는 대상을 확인하려면 [CPU Profiler 모듈의 Timeline 뷰](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md#timeline)를 확인하십시오.렌더 스레드가 Camera.Render에서 시간을 소비하는 경우, 애플리케이션이 CPU 바운드이므로 드로우 콜이나 텍스처를 GPU로 전송하는 데 너무 많은 시간이 소요될 수 있습니다.렌더 스레드가 Gfx.PresentFrame에서 시간을 소비하는 경우 애플리케이션이 GPU 바운드이거나 GPU에서 VSync를 기다리고 있을 수 있습니다. Gfx.WaitForPresentOnGfxThread의 WaitForTargetFPS 하위 샘플은 Present 단계에서 애플리케이션이 VSync를 기다리는 데 소비한 시간을 나타냅니다. Present 단계는 Unity가 그래픽스 API에 버퍼 교환을 명령하는 시점과 이 작업이 완료된 시점 사이의 시간입니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| **Gfx.WaitForRenderThread**                                                                                                                               | 렌더 스레드가 현재 커맨드 스트림에 있는 모든 커맨드를 처리할 때까지 메인 스레드가 기다리고 있었음을 의미합니다. 이 마커가 있는 샘플은 멀티스레드 렌더링에서만 나타납니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |

## 백엔드 및 스크립팅 마커##back-end-scripting-markers

이 샘플은 Mono 또는 IL2CPP 스크립팅 백엔드 활동을 강조 표시하며, 가비지 컬렉션 및 할당 문제를 해결하는 데 유용합니다.

| **마커**                   | **설명**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **GC.Alloc**             | 자동 가비지 컬렉션이 적용되는 관리되는 할당을 포함하는 관리되는 힙의 할당을 나타냅니다. 애플리케이션이 자동 가비지 컬렉션에 소비하는 시간을 줄이려면 이 유형의 샘플을 최소화해야 합니다.                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| **GC.Collect**           | 가비지 컬렉션에 관련된 샘플을 나타냅니다. Unity가 가비지 컬렉션을 수행해야 할 때마다 프로그램 코드 실행을 중지하고 가비지 컬렉터가 모든 작업을 완료한 후에만 정상 실행을 재개합니다. **참고:** [점진적 가비지 컬렉션](/engine/6000.0/manual/analysis/performance-memory-overview/managed-memory/garbage-collector/incremental-garbage-collection.md)을 활성화한 경우 가비지 컬렉터가 단일 프레임에서 작업을 완료하지 못할 수 있습니다.이러한 중단으로 인해 애플리케이션 실행 지연이 1밀리초 이하에서 수백밀리초까지 지속될 수 있습니다. 이는 가비지 컬렉터가 처리해야 하는 메모리 양과 애플리케이션이 실행 중인 플랫폼에 따라 다릅니다. 자세한 내용은 [자동 메모리 관리 이해](/engine/6000.0/manual/analysis/performance-memory-overview/managed-memory.md) 기술 자료를 참조하십시오. |
| **Mono.JIT***Mono 전용*    | 스크립팅 메서드의 JIT(Just-In-Time) 컴파일과 관련된 샘플이 포함되어 있습니다. 함수가 처음 실행될 때 Mono가 이를 컴파일하고 Mono.JIT는 이 컴파일 오버헤드를 나타냅니다.                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **UnsafeUtility.Malloc** | 관리되지 않는 메모리를 할당하기 위해 UnsafeUtility.Malloc을 호출하는 샘플이 포함되어 있습니다. 가비지 컬렉터는 이 메모리를 추적하지 않지만, 메모리를 할당하면 이 샘플에서 보이는 것과 같이 성능에 큰 영향을 미칠 수 있습니다. 이 호출의 소스를 조사하려면 프로파일러 창에서 이 마커에 대해 [Call Stack](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md) 기록을 활성화하십시오.                                                                                                                                                                                                                                                         |

## 멀티스레드 마커##multithreading-markers

이 마커에는 소비된 CPU 주기를 측정하지 않고, 대신 스레드 동기화와 잡 시스템과 관련된 정보를 강조 표시하는 샘플이 포함되어 있습니다. 이러한 샘플이 표시되면 CPU Profiler 모듈의 [Timeline 뷰](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md)를 통해 다른 스레드에서 동시에 무슨 일이 일어나고 있는지 확인하십시오.

| **마커**                      | **설명**                                                                                                                                                                                                                                                                                                                                                                                                             |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Idle**                    | 워커 스레드가 비활성 상태인 시간을 나타내는 샘플이 포함되어 있습니다. 워커 스레드는 잡 시스템이 워커 스레드를 사용하지 않을 때마다 비활성화되고 대기 모드로 전환되어 세마포어에서 대기합니다.Idle 샘플 간의 작은 간극은 보통 잡 시스템이 샘플들을 깨울 때 발생합니다(예: 새로운 잡 예약). 간극이 길면 네이티브 잡이 실행 중인 스레드에서 계측되지 않았음을 의미합니다.                                                                                                                                                                                                   |
| **JobHandle.Complete**      | 잡의 동기화 시점이 발생한 시기를 나타내는 샘플이 포함되어 있습니다. 동기화 시점은 애플리케이션 성능에 영향을 미칠 수 있으며 멀티스레드 잡 코드의 실행을 방해할 수 있습니다. 동기화 시점이 발생한 위치를 쉽게 찾으려면 이 샘플에 대해 [Call Stack](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md) 기록을 활성화하십시오. CPU Profiler 모듈의 **Timeline** 뷰에서 [Flow Events](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md)를 활성화하여 이 시점에서 완료된 잡을 확인할 수 있습니다. |
| **Semaphore.WaitForSignal** | 스레드의 동기화 시점을 나타내는 샘플이 포함되어 있습니다. 대기 중인 스레드를 찾으려면 Timeline 뷰에서 이 뷰 직전에 종료된 샘플을 확인하십시오.                                                                                                                                                                                                                                                                                                                              |
| **WaitForJobGroupID**       | JobHandle의 Sync Fence가 트리거되었습니다. 이로 인해 워커가 해당 작업을 마치고 다른 워커가 잡을 끝마치기를 기다릴 때 [작업 훔치기](/engine/6000.0/script-reference/unity-jobs/i-job-parallel-for.md)가 발생할 수 있습니다. 이는 이 마커에서 실행된 잡 샘플로 표시됩니다. 훔친 잡은 대개 기다리고 있던 잡이 아닙니다.                                                                                                                                                                                           |

## 물리 마커##physics-markers

다음 표에는 몇 가지 고수준 물리 프로파일러 마커가 나와 있습니다. [`FixedUpdate`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/fixed-update.md)는 이러한 모든 측정을 호출합니다.

| **마커**                      |                               | **설명**                                                                                                                                                                                                                                                                                                                                                                             |
| --------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Physics.FetchResults**    |                               | 컨택트 스트림, 트리거 오버랩, 조인트 파손 이벤트 등과 같은 물리 엔진의 물리 시뮬레이션 결과를 수집하는 샘플이 포함되어 있습니다.                                                                                                                                                                                                                                                                                                         |
| **Physics.Interpolation**   |                               | `Physics.Interpolation` 메서드의 실행 시간을 측정하는 샘플이 포함되어 있습니다. 이 메서드는 애플리케이션 내 모든 물리 오브젝트의 위치 및 회전 보간을 관리합니다.                                                                                                                                                                                                                                                                             |
| **Physics.Processing**      |                               | 모든 스레드에서 물리 시뮬레이션이 완료될 때까지 메인 스레드에서 대기하는 데 시간을 소비한 샘플이 포함되어 있습니다. 애플리케이션이 `Physics.Processing`에서 많은 시간을 소비하지만, 씬에 몇 개의 물리 관련 게임 오브젝트만 있다면 워커 스레드가 작업 훔치기로 인해 다른 시스템 작업을 선택하고 물리를 보고했음을 나타낼 수 있습니다. 이는 대기하는 동안 메인 스레드가 우선 순위가 높은 대기열에서 잡을 선택하기 때문입니다.                                                                                                                               |
| **Physics.ProcessingCloth** |                               | `Physics.ProcessingCloth` 메서드의 실행 시간을 측정하는 샘플이 포함되어 있습니다. 이 메서드는 모든 천 물리 작업을 처리합니다. 이 샘플을 확장하면 물리 엔진 내부에서 수행되는 작업의 로우 레벨 세부 정보가 표시됩니다.                                                                                                                                                                                                                                             |
| **Physics.ProcessReports**  |                               | 물리 데이터를 [`OnTriggerEnter`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-trigger-enter.md)와 같은 콜백을 통해 스크립트로 전달하는 데 소요된 시간에 해당하는 샘플이 포함되어 있습니다. **참고:** 이러한 샘플은 이미 `FetchResults` 중에 준비되었기 때문에 필요한 데이터를 계산하지 않습니다.여기에는 네 단계가 있습니다.                                                                                                                                 |
|                             | **Physics.Contacts**          | `Physics.Contacts`의 실행 시간을 측정하는 샘플이 들어 있습니다. 이는 [`OnCollisionEnter`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-collision-enter.md), [`OnCollisionExit`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-collision-exit.md) 및 [`OnCollisionStay`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-collision-stay.md) 이벤트를 처리합니다. |
|                             | **Physics.JointBreaks**       | `Physics.JointBreaks`의 실행 시간을 측정하는 샘플이 들어 있습니다. 끊어진 조인트와 관련된 업데이트와 메시지를 처리합니다.                                                                                                                                                                                                                                                                                                     |
|                             | **Physics.TriggerEnterExits** | `Physics.TriggerEnterExits`의 실행 시간을 측정하는 샘플이 들어 있습니다. 이는 [`OnTriggerEnter`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-trigger-enter.md) 및 [`OnTriggerExit`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-trigger-exit.md) 이벤트를 처리합니다.                                                                                                       |
|                             | **Physics.TriggerStays**      | `Physics.TriggerStays`의 실행 시간을 측정하는 샘플이 들어 있습니다. 이는 [`OnTriggerStay`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-trigger-stay.md) 이벤트를 처리합니다.                                                                                                                                                                                                                  |
| **Physics.Simulate**        |                               | [`Physics.Simulate`](/engine/6000.0/script-reference/unity-engine/physics/simulate.md) 메서드의 사전 요구 사항 작업에 소요된 시간을 측정하는 샘플이 포함되어 있습니다. 이 메서드는 물리 엔진이 시뮬레이션을 실행하도록 명령하여 현재 물리의 상태를 업데이트합니다.                                                                                                                                                                                           |
| **Physics.UpdateBodies**    |                               | 모든 물리 바디의 위치와 회전을 업데이트하는 샘플이 포함되어 있습니다. Rigidbody 컴포넌트가 있는 각 게임 오브젝트의 경우 이 마커가 있는 샘플은 물리 시스템에서 포즈를 읽고 Transform에 기록합니다.                                                                                                                                                                                                                                                            |
| **Physics.UpdateCloth**     |                               | `Physics.UpdateCloth` 메서드의 실행 시간을 측정하는 샘플이 포함되어 있습니다. 이 메서드는 천과 해당 스킨드 메시와 관련된 업데이트를 처리합니다.                                                                                                                                                                                                                                                                                        |

스크립트 라이프사이클과 스크립트 라이프사이클 내 일반 샘플에 대한 자세한 내용은 [이벤트 함수의 실행 순서](/engine/6000.0/manual/scripting/object-oriented-development/event-handling/execution-order.md#UpdateOrder)를 참조하십시오.

## 애니메이션 마커##animation-markers

다음 표에는 [애니메이션 시스템](/engine/6000.0/manual/animation-section/animation-overview/class-animator.md)의 마커가 포함되어 있습니다. 애니메이션 시스템 성능에 대한 일반적인 내용은 [메카님 성능 및 최적화](/engine/6000.0/manual/animation-section/animation-overview/mecanim-peformanceand-optimization.md) 페이지를 참조하십시오.

### PreLateUpdate.DirectorUpdateAnimationBegin 단계##prelateupdate.directorupdateanimationbegin-stage

이 단계에서는 활성화된 모든 애니메이터가 처리됩니다. 활성 애니메이터는 컬링 모드와 가시성에 관계없이 처리됩니다.

`Director.`로 시작하는 마커는 플레이어블과 타임라인을 포함할 수도 있습니다.

| **마커**                                         | **설명**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Director.PrepareFrame**                      | `Director.PrepareFrameJob` 잡을 설정하고 예약하고 대기합니다. 이 잡은 활성화된 모든 Animator 컴포넌트의 상태 머신을 평가합니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| **Director.PrepareFrameJob *(job)***           | 단일 활성 애니메이터의 상태 머신을 평가합니다. 애니메이터를 처리하는 데 걸리는 시간은 상태 머신 복잡도(예: 상태, 전환, 프로퍼티, 레이어 수)에 따라 증가합니다.[`OnStateMachineEnter`](/engine/6000.0/script-reference/unity-engine/state-machine-behaviour/on-state-machine-enter.md) 또는 [`OnStateMachineExit`](/engine/6000.0/script-reference/unity-engine/state-machine-behaviour/on-state-machine-exit.md) 리스너를 구현하는 [`StateMachineBehaviours`](/engine/6000.0/manual/animation-section/animation-overview/class-animator-controller/animation-state-machines/state-machine-behaviours.md)가 있는 상태 머신의 평가는 메인 스레드로 제한됩니다. |
| **Animators.PrepareFirstPass**                 | 다음 처리 단계를 준비합니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| **Animators.ProcessGraphJob**                  | `Animator.ProcessGraph` 잡의 결과를 빌드하고 예약하고 기다립니다.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| **Animators.ProcessGraph *(job)***             | 연결된 모든 애니메이션 클립의 모든 프로퍼티를 평가합니다.모든 클립의 루트 모션 프로퍼티를 함께 블렌딩하여 루트 모션 변위를 계산합니다.현재 [`deltaTime`](/engine/6000.0/script-reference/unity-engine/time/delta-time.md)에 대한 새로운 애니메이션 이벤트를 수집합니다.애니메이션 클립의 프로퍼티를 평가할 때 커브 세그먼트는 애니메이션 클립의 메모리에서 필요 이상으로 읽지 않도록 프레임 간에 로컬로 캐싱됩니다.                                                                                                                                                                                                                                                                                      |
| **Animators.FireAnimationEventsAndBehaviours** | `Director.PrepareFrameJob`에서 이미 실행된 [`OnStateMachineEnter`](/engine/6000.0/script-reference/unity-engine/state-machine-behaviour/on-state-machine-enter.md) 또는 [`OnStateMachineExit`](/engine/6000.0/script-reference/unity-engine/state-machine-behaviour/on-state-machine-exit.md) 리스너를 제외하고, [`StateMachineBehaviours`](/engine/6000.0/manual/animation-section/animation-overview/class-animator-controller/animation-state-machines/state-machine-behaviours.md) 및 MonoBehaviour의 모든 애니메이션 이벤트 메시지를 실행합니다.                                             |
| **Animators.ApplyOnAnimatorMove**              | 루트 모션을 적용하고 MonoBehaviour에서 [`OnAnimatorMove`](/engine/6000.0/script-reference/unity-engine/mono-behaviour/on-animator-move.md) 메시지를 트리거합니다.                                                                                                                                                                                                                                                                                                                                                                                                                |

### PreLateUpdate.DirectorUpdateAnimationEnd##prelateupdate.directorupdateanimationend

이 단계에서는 컬링 모드 `Always Update`가 있는 애니메이터와 컬링 모드 `UpdateTransform` 또는 `Cull Completely`가 있는 가시적인 애니메이터만 처리됩니다. 루트 모션에 의해 프레임 밖으로 이동된 `Cull Completely`가 있는 애니메이터는 이 단계에 참여하지 않습니다. StateMachineBehaviours 및 AnimationEvents에서 트리거한 사용자 코드로 비활성화된 애니메이터도 마찬가지입니다.

| **마커**                                 | **기능**                                                                                                                                                                                                                                                                                       |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Animators.PrepareSecondPass**        | 다음 처리 단계를 설정합니다. 여기에는 컬링 모드 및 가시성 상태를 기반으로 애니메이터를 필터링하는 작업이 포함됩니다.                                                                                                                                                                                                                           |
| **Animators.SortWriteJob**             | 트랜스폼 시스템에서는 한 번에 하나의 스레드만 트랜스폼 계층 구조를 수정할 수 있습니다. 이 제약을 수용하기 위해 `Animators.SortWriteJob`은 `Animators.WriteTransforms` 잡을 [Transform.root](/engine/6000.0/script-reference/unity-engine/transform/root.md)로 그룹화합니다.최상의 성능을 위해 동일한 트랜스폼 계층 구조에 여러 애니메이터를 두지 않아 잡을 예약하고 병렬화할 수 있는 세분화 레벨을 높입니다. |
| **Animators.ProcessAnimationsJob**     | `Animators.ProcessAnimations` 잡의 결과를 빌드하고 예약하고 기다립니다.                                                                                                                                                                                                                                        |
| **Animator.ProcessAnimations (*job*)** | 루트 모션을 제외하고 현재 활성화된 애니메이션 클립의 모든 프로퍼티를 단일 애니메이터에 블렌딩합니다. 그리고 이를 내부 아바타 표현에 적용합니다.이 마커의 길이는 애니메이션과 블렌딩의 복잡도에 따라 달라집니다.                                                                                                                                                                        |
| **OnAnimatorIK**                       | 애니메이션 IK를 설정합니다. 이는 IK 패스가 활성화된 각 Animator 컨트롤러 레이어에 대해 한 번 호출됩니다.                                                                                                                                                                                                                           |
| **Animators.WriteJob**                 | `Animator.WriteTransform` 잡의 결과를 빌드하고 예약하고 기다립니다. 이러한 잡은 애니메이션 아바타에서 관련 게임 오브젝트 트랜스폼 계층 구조로 트랜스폼 포즈를 작성합니다.                                                                                                                                                                                  |
| **Animators.WriteTransforms *(job)***  | 애니메이션화된 모든 트랜스폼을 워커 스레드에서 씬에 작성합니다.                                                                                                                                                                                                                                                          |
| **Animator.WriteProperties**           | 트랜스폼 포즈가 아닌 애니메이션화된 프로퍼티를 타겟 오브젝트에 작성합니다.                                                                                                                                                                                                                                                    |

## 성능 경고##performance-warnings

CPU 프로파일러는 몇 가지 일반적인 성능 문제를 감지하고 경고를 표시합니다. 이는 모듈 세부 정보 창에 있는 [CPU Profiler 모듈의 계층 구조](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu/cpu.md#hierarchy) 뷰의 Warning 열에 표시됩니다.

프로파일러는 성능이 중요한 상황에서 피해야 하는 특정 호출을 감지합니다. 다음과 같이 작업이 성능에 영향을 미치는 이유와 함께 경고를 표시합니다.

| **Warning**                                                                                                                | **설명**                                                                                                                                                                                                                                                                                                                                                                                                              |
| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Animation.DestroyAnimationClip****Animation.AddClip****Animation.RemoveClip****Animation.Clone****Animation.Deactivate** | RebuildInternalState가 트리거되었음을 나타냅니다. RebuildInternalState는 Animation 컴포넌트의 각 클립에 대한 커브 목록을 살펴본 후 각 커브를 게임 오브젝트의 컴포넌트 값에 다시 바인딩하는 작업입니다.리소스를 많이 소모하는 작업이므로, 런타임 시점에는 이러한 메서드를 최대한 호출하지 않아야 합니다.                                                                                                                                                                                                                      |
| **AssetBundle.asset/allAssets**                                                                                            | AssetBundle 로드가 완료되지 않은 상태에서 Unity가 AssetBundleRequest.assets/allAssets API를 호출했음을 나타냅니다(AssetBundleRequest.isDone은 false임). 이로 인해 메인 스레드가 중단되고 로드 작업이 완료될 때까지 대기합니다.                                                                                                                                                                                                                                               |
| **AsyncUploadManager.AsyncBufferResized****AsyncUploadManager.AsyncBufferDelete**                                          | GPU에 데이터를 업로드하기 위한 내부 버퍼가 충분히 크지 않아서 크기가 조정되었음을 나타냅니다. 이러한 크기 조정은 속도를 저하시키고 CPU 활동의 급증을 유발합니다.더 큰 크기를 미리 할당하기 위해 메모리를 확보해 두면 이러한 경고를 방지할 수 있습니다.[Quality Settings](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group/class-quality-settings.md)에서 **Async Upload Buffer Size** 설정을 사용하여 기본 크기를 설정할 수 있습니다.AsyncUploadManager.AsyncBufferResized 마커는 기본 버퍼 크기에 대한 가이드로 사용할 수 있는 신규 할당 크기를 나타냅니다. |
| **Rigidbody.SetKinematic**                                                                                                 | 리지드바디에 대해 볼록하지 않은 메시 콜라이더를 다시 생성합니다.                                                                                                                                                                                                                                                                                                                                                                                |

## 추가 리소스##additional-resources

* [플레이 모드 및 에디터 샘플](/engine/6000.0/manual/analysis/profiler/collect-data/play-edit-samples.md)
* [CPU 성능 데이터](/engine/6000.0/manual/analysis/profiler/collect-data/visualizing-data/cpu.md)
* [코드에 프로파일링 정보 추가](/engine/6000.0/manual/analysis/profiler/adding-information-code.md)
