A Complete Guide to Analyzing Variable Refresh Rates and Stuttering in iOS Games with Keymob
1. Core Concepts
1.1 Variable Refresh Rate (ProMotion)
iOS devices (such as iPad Pro, iPhone 13 Pro, and newer models) support adaptive refresh rates between 10Hz and 120Hz. The screen dynamically adjusts its refresh rate based on the content to balance smoothness and power consumption.
1.2 Stuttering Detection (Frame Pacing Analysis)
Apple introduced frame stability analysis in iOS 15+, which tracks frame submission times to determine smoothness. The difference between FPS and stuttering detection:
Metric | FPS (Frame Rate) | Stuttering Detection |
---|---|---|
Focus | Total frames rendered per second | Stability of frame submission times |
Scene Sensitivity | May drop to 0 during idle times | Always reflects real user interaction |
Common Issues | High average FPS with stuttering | Accurately captures dropped frames and rendering delays |
2. Step-by-Step Process
2.1 Entering the Monitoring Interface
- Connect the iOS device to the Keymob tool
- Click the “Performance Charts” option on the left sidebar → Select the “Show Performance” submenu
2.2 Enable Monitoring Metrics
- In the top-right corner, check the following metrics:
- “Variable Refresh Rate”: Displays the real-time refresh rate of the screen (in Hz)
- “Stuttering Detection”: Records frame submission delays and stuttering occurrences
2.3 Start Monitoring
- Click the “Start” button, and the tool will automatically capture global display data (no need to select a specific app as this involves system-level parameters)
- Perform game actions on the device (such as combat scenes, map loading, etc.)
2.4 Data Analysis
- Variable Refresh Rate Curve:
- Normal range: 10Hz (static interface) - 120Hz (high-speed motion)
- Abnormal case: Constantly locked at 60Hz (may not support ProMotion)
3. Key Considerations
-
Device Requirements
- Variable refresh rate monitoring is only supported on iPhone 13 Pro and newer models
- “Developer Mode” must be enabled (Settings → Privacy & Security → Developer Mode)
-
Key Points for Data Interpretation
- A brief drop to 24Hz may be normal for video playback adaptation
- Games should prioritize frame stability rather than blindly chasing 120Hz
-
Performance Optimization Tips
- Use
CAShapeLayer
instead ofUIBezierPath
for high-frequency UI updates - Set
layer.shouldRasterize = true
for static elements
- Use
4. FAQ
Q1: The refresh rate on the monitor always shows 60Hz?
- Check if the game declares support for ProMotion:
1<key>CADisableMinimumFrameDurationOnPhone</key> 2<true/>
- Verify if Low Power Mode is enabled (forces a 60Hz lock)
Q2: Stuttering occurs frequently but FPS appears normal?
- Typical multithreading issue:
- Background threads occupying GPU resources (e.g., asynchronous drawing not synchronized)
- Use
MTLSharedEvent
to coordinate rendering timing
Q3: How to distinguish between system stuttering and app stuttering?
- System-level stuttering characteristics:
- Multiple apps experience stuttering peaks simultaneously
- Accompanied by memory pressure warnings (verify through Keymob’s memory monitoring)