This document summarizes techniques used to optimize Call of Duty Mobile for mobile platforms. It discusses using adaptive performance to dynamically adjust quality settings like shadows and foliage based on device performance and temperature to maintain framerate and reduce throttling. It also covers Vulkan optimizations for mobile like using a single scratch buffer, descriptor set batching, render pass load/store, threaded presenting, and direct buffer access to improve performance.
13. Mobile Limitation
FPS
Core Freq
Temperature After Throttling
• Temperature
– No active cooling
– Performance Throttling
• Power
– Limitation of Battery
– Use more power than needed
• Performance
– Hardware Fragmentation causes
different capabilities between devices
Developers can’t control
15. Power Manager
Power Budget Control
CPU Level
CPU
Level
CPU
Level
GPU Level
GPU
Level
GPU
Level
core freq
freq cap
16. Power Manager
Frame Time Tracking
1.0 ms
Bottleneck Detection
Frame
Time
CPU
Time
GPU
Time
Target
FPS
CPU
GPUGPU
Time
CPU
Time
Frame
Time
Bottleneck Detection
Frame
Time
CPU
Time
GPU
Time
Target
FPS
CPU
GPU
1.0 ms
1.0 ms
17. Default Power Manager
Auto Perf Control
Temp
Trend
Target FPS
U/D CPU
U/D GPU
Value
U/D CPU
U/D GPU
Update
Interval
CPU Level
CPU Level CPU Level
GPU Level
GPU Level GPU Level
Temp
Trend
Bottleneck Detection
Frame
Time
CPU
Time
GPU
Time
Target
FPS
CPU
GPU
Bottleneck
Mode
Allow U/D
CPU
Allow U/D
GPU
GPU
Time
CPU
Time
Frame
Time
18.
19. Power Manager + Dynamic Quality Scaling
30
15
200 10
Time [m]
24. Adaptive Performance
• Adaptive Performance
vs Normal Condition
Feature ADP Normal
FPS 58 54
Stability (%) 100 100
CPU (%) 11.37 11.69
GPU (%) 80.08 87.85
FPS
ADP-FPS Normal-FPS
25. Adaptive Performance
• Can save power and
manage thermal better
Feature ADP Normal
FPS 58 54
Stability (%) 100 100
CPU (%) 11.37 11.69
GPU (%) 80.08 87.85
Temperature
Normal ADP 60 160 260 360 460
Max Freq
ADP-CPU ADP-GPU
Normal-CPU Normal-GPU
26.
27. Vulkan Optimizations in Call of Duty Mobile
• Single Scratch Buffer
• Low Priority Destroy Thread
• Descriptor Set Batching/Caching
• RenderPass Load/Store
• Threaded Present
• VB, IB Binding Optimization
• Direct Buffer Access
29. Vulkan Optimizations
— Ring buffer for all needs
— Usually recreated only during first load
Allocate Allocate Allocate
offset offset offset
Allocate
Free Memory
Allocate
Not enough memory
Larger buffer
• Single Scratch Buffer
33. Vulkan Optimizations
• Descriptor Set Batching/Caching
vkUpdateDescriptorSets
vkUpdateDescriptorSets
vkUpdateDescriptorSets
vkUpdateDescriptorSets
vkUpdateDescriptorSets
vkUpdateDescriptorSets
— Combine separate Update calls into one
34. Vulkan Optimizations
• Descriptor Set Batching/Caching
— Cache and reuse sets with same resources
AllocateDS
+
UpdateDS
BindDS
+
Draw
…
AllocateDS
+
UpdateDS
BindDS
+
Draw
…
AllocateDS
+
UpdateDS
BindDS
+
Draw
… …
AllocateDS
+
UpdateDS
BindDS
+
Draw
…
BindDS
+
Draw
……
BindDS
+
Draw
…
Allocate and update Descriptor Sets before each draw call
Reuse Descriptors Sets from cache
35. Vulkan Optimizations
• Descriptor Set Batching/Caching
— Cache and reuse sets with same resources
BindDS
+
Draw
…
BindDS
+
Draw
…
BindDS
+
Draw
… …
AllocateDS
+
UpdateDS
BindDS
+
Draw
…
BindDS
+
Draw
……
BindDS
+
Draw
…
AllocateDS
+
UpdateDS
AllocateDS
+
UpdateDS
AllocateDS
+
UpdateDS
Allocate and update Descriptor Sets before each draw call
Reuse Descriptors Sets from cache
36. Vulkan Optimizations
• Descriptor Set Batching/Caching
— Cache and reuse sets with same resources
AllocateDS
+
UpdateDS
BindDS
+
Draw
…
Allocate and update Descriptor Sets before each draw call
Reuse Descriptors Sets from cache
AllocateDS
+
UpdateDS
BindDS
+
Draw
…
AllocateDS
+
UpdateDS
BindDS
+
Draw
… …
BindDS
+
Draw
…
BindDS
+
Draw
……
BindDS
+
Draw
…
AllocateDS
+
UpdateDS