Bird
Raised Fist0
Unityframework~10 mins

Performance profiling in Unity - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Performance profiling
Start Profiling
↓
Run Game Code
↓
Collect Performance Data
↓
Analyze Data
↓
Identify Bottlenecks
↓
Optimize Code
↓
Repeat Profiling
↓
End Profiling
Start profiling, run the game, collect data, analyze to find slow parts, optimize, and repeat until performance improves.
Execution Sample
Unity
Profiler.BeginSample("MyFunction");
// Code to profile
Profiler.EndSample();
This code marks the start and end of a profiling sample to measure performance of 'MyFunction'.
Execution Table
StepActionProfiler StateData CollectedResult
1Profiler.BeginSample("MyFunction") calledProfiling started for MyFunctionNo data yetReady to measure
2Game code inside MyFunction runsProfiling activeExecution time accumulatingTracking performance
3Profiler.EndSample() calledProfiling stopped for MyFunctionTotal time recordedSample complete
4Analyze collected dataProfiler idleExecution time and call count availableIdentify slow parts
5Optimize code based on dataProfiler idleNo new data yetCode improved
6Repeat profiling to verifyProfiling restartedNew data collectedCheck improvements
7Profiling endsProfiler stoppedFinal performance dataPerformance optimized
💡 Profiling ends after collecting and analyzing performance data to optimize code.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 6Final
Profiler StateIdleActive (MyFunction)IdleActive (MyFunction)Stopped
Execution Time0 msAccumulatingRecorded (e.g. 15 ms)AccumulatingFinal (e.g. 12 ms)
Call Count0IncrementingRecorded (e.g. 1)IncrementingFinal (e.g. 1)
Key Moments - 3 Insights
Why do we need to call Profiler.BeginSample and Profiler.EndSample around the code?
These calls mark the start and end of the code section to measure. Without them, the profiler won't know which part to track, as shown in steps 1 and 3 of the execution_table.
What does the profiler measure during the active state?
During the active state (step 2), the profiler collects execution time and call count data for the marked code, which helps identify slow parts as seen in step 4.
Why do we repeat profiling after optimizing code?
Repeating profiling (step 6) verifies if the optimizations improved performance by comparing new data with previous results, ensuring changes had the desired effect.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what does the profiler do?
AStarts measuring performance
BAnalyzes the data collected
CStops measuring performance and records data
DOptimizes the code automatically
💡 Hint
Check the 'Profiler State' and 'Result' columns at step 3 in the execution_table.
According to variable_tracker, what is the 'Profiler State' after step 6?
AActive (MyFunction)
BIdle
CStopped
DNot started
💡 Hint
Look at the 'Profiler State' row under 'After Step 6' in variable_tracker.
If we forget to call Profiler.EndSample(), what will happen according to the flow?
AProfiler will never start
BProfiler will keep measuring indefinitely
CProfiler will stop automatically after some time
DProfiler will throw an error immediately
💡 Hint
Refer to the concept_flow where profiling starts and ends explicitly with BeginSample and EndSample.
Concept Snapshot
Performance Profiling in Unity:
- Use Profiler.BeginSample("Name") before code to measure
- Run the code section
- Use Profiler.EndSample() after code to stop measuring
- Analyze collected data to find slow parts
- Optimize code and repeat profiling
- Helps improve game performance step-by-step
Full Transcript
Performance profiling in Unity involves marking sections of code with Profiler.BeginSample and Profiler.EndSample to measure how long they take to run. The profiler collects data like execution time and call count while the code runs. After stopping the sample, you analyze the data to find slow parts or bottlenecks. Then you optimize the code and profile again to check if performance improved. This cycle repeats until the game runs smoothly. The execution table shows each step from starting profiling, running code, stopping profiling, analyzing data, optimizing, and repeating. The variable tracker shows how profiler state and data change during these steps. Key moments clarify why marking code sections is necessary and why repeating profiling is important. The quiz tests understanding of profiler states and the importance of proper start and stop calls.

Practice

(1/5)
1. What is the main purpose of using performance profiling in Unity?
easy
A. To write story scripts for the game
B. To add new game features quickly
C. To find slow or heavy parts in your game code
D. To create game art and animations

Solution

  1. Step 1: Understand performance profiling

    Performance profiling is used to check which parts of the game code take the most time or resources.
  2. Step 2: Match purpose with options

    Only To find slow or heavy parts in your game code talks about finding slow or heavy parts, which matches the purpose of profiling.
  3. Final Answer:

    To find slow or heavy parts in your game code -> Option C
  4. Quick Check:

    Profiling purpose = find slow code [OK]
Hint: Profiling finds slow code parts to improve performance [OK]
Common Mistakes:
  • Confusing profiling with adding features
  • Thinking profiling creates art or story
  • Mixing profiling with gameplay design
2. Which of the following is the correct way to mark a code section for profiling in Unity?
easy
A. Profiler.BeginSample("MyCode") and Profiler.EndSample()
B. Profiler.MarkStart("MyCode") and Profiler.MarkEnd()
C. Profiler.StartSample("MyCode") and Profiler.StopSample()
D. Profiler.Profile("MyCode")

Solution

  1. Step 1: Recall Unity profiling API

    Unity uses Profiler.BeginSample and Profiler.EndSample to mark code sections.
  2. Step 2: Compare options with correct API

    Only Profiler.BeginSample("MyCode") and Profiler.EndSample() matches the exact method names used in Unity.
  3. Final Answer:

    Profiler.BeginSample("MyCode") and Profiler.EndSample() -> Option A
  4. Quick Check:

    Correct API = BeginSample and EndSample [OK]
Hint: Use BeginSample and EndSample to mark profiling code [OK]
Common Mistakes:
  • Using StartSample/StopSample instead of BeginSample/EndSample
  • Using non-existent Profiler methods
  • Forgetting to call EndSample after BeginSample
3. What will be the output in the Unity Profiler if you run this code snippet?
Profiler.BeginSample("HeavyTask");
for (int i = 0; i < 1000000; i++) { var x = Mathf.Sqrt(i); }
Profiler.EndSample();
medium
A. The Profiler shows a sample named 'HeavyTask' with time taken for the loop
B. The Profiler shows an error because of missing Profiler.StopSample()
C. No profiling data is recorded because Profiler.BeginSample is inside a loop
D. The Profiler shows a sample named 'HeavyTask' but with zero time

Solution

  1. Step 1: Understand Profiler.BeginSample and EndSample usage

    The code marks the start and end of a heavy task loop, so the Profiler records the time spent inside.
  2. Step 2: Analyze Profiler output

    The Profiler will show a sample named 'HeavyTask' with the time taken to run the loop, which is significant.
  3. Final Answer:

    The Profiler shows a sample named 'HeavyTask' with time taken for the loop -> Option A
  4. Quick Check:

    Profiler records marked code time = The Profiler shows a sample named 'HeavyTask' with time taken for the loop [OK]
Hint: Profiler shows time for code between BeginSample and EndSample [OK]
Common Mistakes:
  • Confusing EndSample with StopSample
  • Thinking profiler needs to be inside the loop
  • Assuming profiler shows zero time for heavy code
4. Identify the error in this profiling code snippet:
Profiler.BeginSample("UpdateLoop");
UpdateGameObjects();
// Missing Profiler.EndSample()
medium
A. Profiler.BeginSample() should be called after UpdateGameObjects()
B. No error, the code is correct
C. Profiler.BeginSample() and EndSample() cannot be used in Update()
D. Profiler.EndSample() is missing, causing incorrect profiling data

Solution

  1. Step 1: Check profiling code structure

    Profiler.BeginSample must be paired with Profiler.EndSample to mark the code section properly.
  2. Step 2: Identify missing EndSample call

    The code is missing Profiler.EndSample(), which causes the Profiler to not close the sample and gives wrong data.
  3. Final Answer:

    Profiler.EndSample() is missing, causing incorrect profiling data -> Option D
  4. Quick Check:

    Missing EndSample causes profiling errors [OK]
Hint: Always pair BeginSample with EndSample to avoid errors [OK]
Common Mistakes:
  • Forgetting to call EndSample after BeginSample
  • Calling BeginSample after the code instead of before
  • Thinking profiling can't be used in Update()
5. You want to profile two different parts of your game code separately: physics calculations and AI updates. How should you use the Profiler API to get clear timing for both?
hard
A. Call Profiler.BeginSample("Physics") once at game start and Profiler.EndSample() at game end, same for AI
B. Call Profiler.BeginSample("Physics") before physics code and Profiler.EndSample(), then Profiler.BeginSample("AI") before AI code and Profiler.EndSample()
C. Use Profiler.BeginSample("Physics") and Profiler.BeginSample("AI") at the same time without EndSample()
D. Only use Profiler.EndSample() after both physics and AI code without BeginSample()

Solution

  1. Step 1: Understand separate profiling sections

    To profile two parts separately, you must mark each section with its own BeginSample and EndSample calls.
  2. Step 2: Apply correct usage for both parts

    Call Profiler.BeginSample("Physics") before physics code and Profiler.EndSample(), then Profiler.BeginSample("AI") before AI code and Profiler.EndSample() correctly calls BeginSample and EndSample around physics code, then again around AI code, giving clear timing for each.
  3. Final Answer:

    Call Profiler.BeginSample("Physics") before physics code and Profiler.EndSample(), then Profiler.BeginSample("AI") before AI code and Profiler.EndSample() -> Option B
  4. Quick Check:

    Separate samples need separate BeginSample/EndSample pairs [OK]
Hint: Use separate BeginSample/EndSample pairs for each code section [OK]
Common Mistakes:
  • Calling BeginSample once for whole game session
  • Starting two samples without ending them
  • Using EndSample without matching BeginSample
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard