Skip to content

Display Performance

Systematic diagnosis for frame rate issues on variable refresh rate displays like ProMotion.

When to Use

Use this skill when:

  • Your app runs at 60fps on a ProMotion (120Hz) device
  • MTKView or CADisplayLink isn't reaching expected frame rate
  • You're experiencing micro-stuttering despite good average FPS
  • You need to configure CAMetalDisplayLink for precise timing
  • You want to monitor animation hitches in production

Example Prompts

  • "My Metal app is stuck at 60fps on iPhone Pro. Why?"
  • "How do I configure MTKView for 120Hz?"
  • "Why does UIScreen say 120 but I'm getting 60fps?"
  • "What's the CADisableMinimumFrameDurationOnPhone key for?"
  • "How do I use present(afterMinimumDuration:) for smooth frame pacing?"
  • "How do I detect frame drops in my Metal app?"

What This Skill Provides

  • Decision tree for diagnosing why you're stuck at 60fps
  • Render loop configuration patterns (MTKView, CADisplayLink, CAMetalDisplayLink)
  • System cap detection (Low Power Mode, thermal throttling, Adaptive Power)
  • Frame pacing APIs to eliminate micro-stuttering
  • Hitch mechanics (commit hitches vs render hitches)
  • Production telemetry with MetricKit
  • energy — Use when frame rate issues are battery-related or you need power-aware rendering
  • performance-profiling — Use for general Instruments profiling before diving into display-specific issues
  • swiftui-performance — Use for SwiftUI view update performance, not Metal/CADisplayLink rendering

Released under the MIT License