Allow users to configure the target frame rate via preferences instead of
hardcoding 30fps. Defaults to 30fps when not specified.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace the high-priority dispatch timer with CADisplayLink for frame
updates, reducing target framerate from 60 to 30 fps. This simplifies
the frame loop implementation while providing better system integration.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
iOS aggressively throttles daemon processes, causing CADisplayLink callbacks
to be delayed or skipped. This commit implements multiple workarounds:
- Replace CADisplayLink with high-priority dispatch timer (QOS_CLASS_USER_INTERACTIVE)
- Add power assertions to prevent display/GPU/CPU throttling
- Launch daemon via SSH to localhost for better scheduler treatment
- Set real-time thread priority and ProcessType=Interactive
- Add FPS diagnostics logging to monitor capture performance
- Auto-setup passwordless SSH keys during package installation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add frame skip logic to prevent queue buildup and reduce lock contention
- Serialize operation queue to prevent concurrent frame processing
- Align IOSurface bytes per row to 16 bytes (required for IOSurfaceAccelerator)
- Only create renderServerSurface when scaling is needed, avoiding unnecessary allocations
- Support flexible resolution: width-only, height-only, or both dimensions
- Pass native dimensions to FrameUpdater for proper scaling decisions
- Enable 60 FPS limit on CADisplayLink
- Add IOSurface lock option constants for future use
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Introduced CaptureMode enum for selecting between CARenderServer and IOMobileFramebuffer.
- Updated FrameUpdater and ScreenDumpVNC to handle new capture mode logic.
- Implemented aspect ratio calculations and adjustments in ScreenDumpVNC.
- Added toggleCaptureMode method to switch between capture modes via keyboard input.
- Enhanced initialization of FrameUpdater to accommodate new parameters.