Abstract
Profiler ํญ์ "์ง๊ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ๋ง๋ ์ฐ๊ณ ์๋"๋ฅผ ๊ธฐ๊ธฐ ์์์ ๋ฐ๋ก ๋ณด์ฌ ์ฃผ๋ ๊ณ๊ธฐํ์
๋๋ค. Unity ์๋ํฐ์ Profiler ์ฐฝ์ ๋์ฒดํ์ง๋ ๋ชปํ์ง๋ง, ์๋ํฐ๋ฅผ ๋ถ์ผ ์ ์๋ ์ํฉ์์ "์๊ณ ์๋๊ฐ ์๋๊ฐ"๋ฅผ ํ๋จํ๊ธฐ์๋ ์ถฉ๋ถํฉ๋๋ค.
์ซ์๊ฐ ๋ง์ง๋ง ๋ณผ ๊ฒ์ ์ธ ๊ฐ
์งํ | ๋ป | ์ด๋ ๊ฒ ์ฝ๋๋ค |
Mono Used Size | C# ์ฝ๋๊ฐ new ๋ก ๋ง๋ ๊ฐ์ฒด๊ฐ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ | ํ๋ ์ด ์ค ํฑ๋ ๋ชจ์(์ฌ๋๋ค๊ฐ GC ๋ ๋จ์ด์ง)์ด๋ฉด ์ ์. ํฑ๋์ ๋ฐ๋ฅ์ด ๊ณ์ ์ฌ๋ผ๊ฐ๋ฉด ๋์๋ค |
Total Allocated Memory | Unity ์์ง์ด ์ฐ๋ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ (ํ
์ค์ฒยท๋ฉ์ยท์ค๋์ค ๋ฑ) | ๊ฐ์ ์ฅ๋ฉด์ ๋ฐ๋ณตํด๋ ๊ณ์ ์ค๋ฅด๋ฉด ์์
์ด ํด์ ๋์ง ์๋ ๊ฒ |
Allocated Memory For Graphics Driver | GPU ์ชฝ ๋ฉ๋ชจ๋ฆฌ | ๋ชจ๋ฐ์ผ์์ ํฌ๋์์ ์ฃผ๋ฒ. ํ
์ค์ฒ ํด์๋ยท์์ถ์ ์์ฌํ๋ค |
์ง์ ํด ๋ณด๊ธฐ โ ToyboxNightmare ๋ก ํ๋ง ํจ๊ณผ ํ์ธํ๊ธฐ
1.
๊ฒ์์ ์์ํ๊ณ ๋๋ฒ๊ฑฐ โ Profiler โ Summary ๋ฅผ ์ฐ๋ค.
2.
์ ์ด ๋ชฐ๋ ค์ค๋ ๋์ Mono Used Size ๋ฅผ 30์ด์ฏค ์ง์ผ๋ณธ๋ค. ์ ๊ณผ ํฌ์ฌ์ฒด๊ฐ ๊ณ์ ์๊ฒผ๋ค ์ฌ๋ผ์ง๋๋ฐ๋ ๊ฐ์ด ์๋งํ๊ฒ๋ง ์์ง์ธ๋ค โ ์ํฐํฐ๊ฐ Instantiate / Destroy ๊ฐ ์๋๋ผ ํ์์ ์ฌ์ฌ์ฉ๋๊ณ , ์ด๋ฒคํธ ์ธ์์ ์ํฐํฐ ๋ฐ์ดํฐ๋ ReferencePool ๋ก ๋๊ธฐ ๋๋ฌธ์ด๋ค.
3.
Profiler โ Reference Pool ๋ก ๋์ด๊ฐ EnemyData ์ค์ ๋ณธ๋ค. Acquire ํ์๋ ๊ณ์ ์ค๋ฅด์ง๋ง Unused + Using ํฉ๊ณ(์ค์ ๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด ์)๋ ๋์ ์์กด ์ ๊ทผ์ฒ์์ ๋ฉ์ถ๋ค. ์๋ฐฑ ๋ฒ ์คํฐํด๋ ๊ฐ์ฒด๋ ์ญ์ฌ ๊ฐ๋ง ๋ง๋ค์ด์ก๋ค๋ ๋ป์ด๋ค.
4.
๊ฒ์์ค๋ฒ โ ์ฌ์์์ ๋ช ๋ฒ ๋ฐ๋ณตํ ๋ค Total Allocated Memory ๊ฐ ํ๋ง๋ค ๊ณ๋จ์์ผ๋ก ์ค๋ฅด๋์ง ๋ณธ๋ค. ์ค๋ฅด์ง ์์์ผ ์ ์์ด๋ค.
์ด๋๊น์ง ๋ฏฟ์ ์ ์๋
โข
์ด ํญ์ ๊ฐ์ UnityEngine.Profiling.Profiler API ๋ฅผ ๊ทธ๋๋ก ์ถ๋ ฅํ ๊ฒ์
๋๋ค. ์ซ์ ์์ฒด๋ ์๋ํฐ Profiler ์ ๊ฐ์ ์ถ์ฒ์
๋๋ค.
โข
์๋ํฐ์์ ์ฌ๋ฉด ์๋ํฐ ์์ฒด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์
๋๋ค. ์ ๋๊ฐ์ ์ค๊ธฐ๊ธฐ ๋น๋์์๋ง ์๋ฏธ๊ฐ ์๊ณ , ์๋ํฐ์์๋ "์ค๋ฅด๋๊ฐ ๋ฉ์ถ๋๊ฐ"์ ์ถ์ธ๋ง ๋ด
๋๋ค.
โข
ํจ์๋ณ CPU ์๊ฐ, ๋๋ก์ฐ ์ฝ ๊ฐ์ ์ฑ๋ฅ ํ๋กํ์ผ๋ง์ ์ฌ๊ธฐ์ ๋ชป ํฉ๋๋ค. ๊ทธ๊ฑด Unity Profiler ๋ฅผ Development Build ์ ์ฐ๊ฒฐํด์ ๋ด
๋๋ค.
๋ณธ๋ฌธ์ ์ฝ์ ๋ ์ฃผ์ํ ์
โข
๋๋ฒ๊ฑฐ๋ฅผ ์ฌ๋ ๋จ์ถํค(~)๋ ์์ต๋๋ค. ํ๋ฉด ์ผ์ชฝ ์ FPS ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค. ๋ณธ๋ฌธ๋ ๊ณ ์ณ ๋์์ต๋๋ค.
โข
๋ณธ๋ฌธ์ "Unity 2018.3+ / 2019.3+ ์์ ์ ๊ณต" ๊ฐ์ ๋ฒ์ ๋ถ๊ธฐ๋ ์์์ด ๊ตฌ๋ฒ์ ๊น์ง ์ง์ํ๋ ํ์ ์
๋๋ค. ์ด ์๋์
์ ์ต์ ๋ฒ์ (Unity 6)์์๋ ํ์ ๋ชจ๋ ํญ๋ชฉ์ด ํญ์ ํ์๋ฉ๋๋ค.
Profiler Information
๊ด๋ จ ์์ค ํ์ผ
โข
Scripts/Runtime/Debugger/DebuggerComponent.GraphicsInformationWindow.cs
โข
Scripts/Runtime/Debugger/DebuggerComponent.ProfilerInformationWindow.cs
โข
Scripts/Runtime/Debugger/DebuggerComponent.SceneInformationWindow.cs
โข
Scripts/Runtime/FileSystem/AndroidFileSystemStream.cs
Introduction
Profiler Information ๊ธฐ๋ฅ์ Unity Game Framework์ ๋๋ฒ๊น
ํดํท์ ์ผ๋ถ๋ก, ์ค์๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ฑ๋ฅ ์งํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ํด์ ๊ฐ๋ฐ์๊ฐ ๊ฒ์ ํ๋ ์ด ์ค ๋ฆฌ์์ค ์๋น๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๊ฒ ํ์ฌ, ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ธ, ์ฑ๋ฅ ๋ฌธ์ ์ถ์ , ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์
์ต์ ํ์ ํ์์ ์
๋๋ค.
์ผ๋ฐ์ ์ธ ๋๋ฒ๊น
๋๊ตฌ์ ๋ํ ๋ด์ฉ์ Debugger Component ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Architecture
Profiler Information ์ฐฝ์ DebuggerComponent ๋ด์ ProfilerInformationWindow ํด๋์ค๋ก ๊ตฌํ๋์ด ์์ต๋๋ค.
์ด ํด๋์ค๋ ScrollableDebuggerWindowBase ๋ฅผ ์์ํ์ฌ, ํ์ํ ์ ๋ณด๊ฐ ํ๋ฉด์ ๋์ด์ค ๊ฒฝ์ฐ ์คํฌ๋กค ๊ฐ๋ฅํ UI๋ฅผ ์ ๊ณตํฉ๋๋ค.
Implementation Details
ProfilerInformationWindow๋ Unity์ Profiler API ์ ์ง์ ์ ๊ทผํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ฑ๋ฅ ์งํ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
ํต์ฌ ๊ธฐ๋ฅ์ OnDrawScrollableWindow() ๋ฉ์๋์ ์์ผ๋ฉฐ, Unity์ IMGUI ์์คํ
์ ์ฌ์ฉํด ํ๋กํ์ผ๋ง ์ ๋ณด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
Profiler Metrics
ProfilerInformationWindow๋ ํ๋กํ์ผ๋ฌ ์ํ ์ ๋ณด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ ๋ณด๋ฅผ ํ์ํฉ๋๋ค.
์นดํ
๊ณ ๋ฆฌ | ์งํ | ์ฝ๋ ์ํฐํฐ | ์ค๋ช
|
Status | Supported | Profiler.supported | ํ์ฌ ํ๋ซํผ์์ ํ๋กํ์ผ๋ง ์ง์ ์ฌ๋ถ |
Enabled | Profiler.enabled | ํ๋กํ์ผ๋ง์ด ํ์ฑํ๋์ด ์๋์ง ์ฌ๋ถ | |
Enable Binary Log | Profiler.enableBinaryLog | ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ํ์ฑํ ์ฌ๋ถ ๋ฐ ๋ก๊ทธ ํ์ผ ๊ฒฝ๋ก | |
Enable Allocation Callstacks | Profiler.enableAllocationCallstacks | ํ ๋น ์ฝ์คํ ํ์ฑํ ์ฌ๋ถ (Unity 2019.3+) | |
Area Count | Profiler.areaCount | ํ๋กํ์ผ๋ฌ ์์ญ ๊ฐ์ (Unity 2018.3+) | |
Max Used Memory | Profiler.maxUsedMemory | ์ฌ์ฉ๋ ์ต๋ ๋ฉ๋ชจ๋ฆฌ (Unity 2018.3+) | |
Memory | Mono Used Size | Profiler.GetMonoUsedSizeLong() | Mono ๋ฐํ์์ด ์ฌ์ฉ ์ค์ธ ๋ฉ๋ชจ๋ฆฌ |
Mono Heap Size | Profiler.GetMonoHeapSizeLong() | Mono ๋ฐํ์ ํ์ ์ด ํฌ๊ธฐ | |
Used Heap Size | Profiler.usedHeapSizeLong | ํ์ฌ ์ฌ์ฉ ์ค์ธ ํ ๋ฉ๋ชจ๋ฆฌ | |
Total Allocated Memory | Profiler.GetTotalAllocatedMemoryLong() | ์ด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ | |
Total Reserved Memory | Profiler.GetTotalReservedMemoryLong() | ์ด ์์ฝ๋ ๋ฉ๋ชจ๋ฆฌ | |
Total Unused Reserved Memory | Profiler.GetTotalUnusedReservedMemoryLong() | ์์ฝ๋์์ผ๋ ์ฌ์ฉ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ | |
Allocated Memory For Graphics Driver | Profiler.GetAllocatedMemoryForGraphicsDriver() | ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ (Unity 2018.1+) | |
Temp Allocator Size | Profiler.GetTempAllocatorSize() | ์์ ํ ๋น์ ํฌ๊ธฐ (Unity 5.5+) | |
Marshal Cached HGlobal Size | Utility.Marshal.CachedHGlobalSize | ์บ์๋ HGlobal ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ |
์ฝ๋์์๋ #if ์ ์ฒ๋ฆฌ ์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ Unity ๋ฒ์ ๋ณ ํธํ์ฑ์ ์ ์งํฉ๋๋ค.
#if UNITY_2019_3_OR_NEWER
DrawItem("Enable Allocation Callstacks", Profiler.enableAllocationCallstacks.ToString());
#endif
C#
๋ณต์ฌ
Platform Considerations
Unity ๋ฒ์ ์ ๋ฐ๋ผ ์ง์๋๋ ํ๋กํ์ผ๋ง ์งํ๊ฐ ๋ค๋ฆ
๋๋ค.
ProfilerInformationWindow ํด๋์ค๋ ์ ์ฒ๋ฆฌ ์ง์๋ฌธ์ ํตํด ์ด๋ฌํ ์ฐจ์ด๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ชจ๋ ์ง์ Unity ๋ฒ์ ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํฉ๋๋ค.
์์:
โข
Unity 2019.3+ : ํ ๋น ์ฝ์คํ ์ ๋ณด ์ ๊ณต
โข
Unity 2018.3+ : ์์ญ ๊ฐ์, ์ต๋ ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ์ ๊ณต
โข
Unity 2018.1+ : ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ ๋ฉ๋ชจ๋ฆฌ ์ ๊ณต
โข
Unity 5.5+ : ์์ ํ ๋น์ ํฌ๊ธฐ ์ ๊ณต
๋ฐ๋ผ์ ํ์๋๋ ์งํ๋ Unity ๋ฒ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
Using the Profiler Information Window
์ฌ์ฉ ๋ฐฉ๋ฒ:
1.
์ฌ์ DebuggerComponent ๊ฐ ๋ถ์ฐฉ๋ GameObject๊ฐ ์์ด์ผ ํฉ๋๋ค.
2.
์คํ ์ค์ ํ๋ฉด ์ผ์ชฝ ์์ FPS ์์ด์ฝ์ ํด๋ฆญํด ๋๋ฒ๊ฑฐ๋ฅผ ์ฝ๋๋ค. (๋จ์ถํค๋ ์์ต๋๋ค.)
3.
๋๋ฒ๊ฑฐ ์ธํฐํ์ด์ค์์ Profiler โ Summary ํญ์ ์ ํํฉ๋๋ค.
4.
๊ฒ์ ํ๋ ์ด ๋์ค ์ค์๊ฐ์ผ๋ก ๋ฉํธ๋ฆญ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
Optimization Use Cases
Profiler Information ์ฐฝ์ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํ์
ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค:
โข
๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ง: "Total Allocated Memory" ๊ฐ์ด ๊ณ์ ์ฆ๊ฐํ๊ณ ํด์ ๋์ง ์๋ ๊ฒฝ์ฐ ํ์ธ
โข
๊ด๋ฆฌ ์ฝ๋ ์ต์ ํ: "Mono Used Size" ๋๋ "Mono Heap Size"๊ฐ ํฌ๋ค๋ฉด ๊ณผ๋ํ GC๋ ๋นํจ์จ์ ๊ด๋ฆฌ ์ฝ๋ ์ฌ์ฉ ๊ฐ๋ฅ์ฑ
โข
๊ทธ๋ํฝ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ถ์ : "Allocated Memory For Graphics Driver" ๊ฐ์ผ๋ก ํ
์ค์ฒ, ๋ฉ์, ๋ ๋ ํ๊ฒ์ GPU ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ํ์ธ
โข
๋ฉ๋ชจ๋ฆฌ ๋จํธํ ํ์ธ: "Total Reserved Memory" ์ "Total Unused Reserved Memory" ๋น๊ต๋ก ๋จํธํ ์ฌ๋ถ ํ์
Related Debugging Tools
๊ฒ์ ์ฑ๋ฅ์ ์ข
ํฉ์ ์ผ๋ก ๋ถ์ํ๋ ค๋ฉด Profiler Information ์ฐฝ๊ณผ ํจ๊ป ๋ค์ ํด๋ ํ์ฉํ์ธ์:
โข
Graphics Information Window : ๊ทธ๋ํฝ ๋๋ฐ์ด์ค, ๊ธฐ๋ฅ, ๋ ๋๋ง ์ค์ ์์ธ ์ ๋ณด ์ ๊ณต
โข
Scene Information Window : ๋ก๋๋ ์ฌ ๊ฐ์, ํ์ฑ ์ฌ์ ์ด๋ฆยท๊ฒฝ๋กยท๋น๋ ์ธ๋ฑ์ค ๋ฑ ์ฌ ์ ๋ณด ์ ๊ณต
โข
Runtime Memory Information Window : ์์คํ
๋ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์์ธ ๋ด์ญ ์ ๊ณต
โข
Console Window : ๋ก๊ทธ, ๊ฒฝ๊ณ , ์๋ฌ ํ์ โ ํน์ ์ด๋ฒคํธ์ ์ฑ๋ฅ ๋ฌธ์ ์ฐ๊ด์ฑ ํ์ธ






