Skip to content

fix: harden Metal presentation lifetimes - #164

Open
x90skysn3k wants to merge 1 commit into
manaflow-ai:mainfrom
x90skysn3k:fix/remote-terminal-latency-canonical
Open

fix: harden Metal presentation lifetimes#164
x90skysn3k wants to merge 1 commit into
manaflow-ai:mainfrom
x90skysn3k:fix/remote-terminal-latency-canonical

Conversation

@x90skysn3k

@x90skysn3k x90skysn3k commented Jul 28, 2026

Copy link
Copy Markdown

Retains the exact tokened Metal frame until host presentation acknowledgement, preventing remote-terminal typing updates from waiting behind recycled or stalled frames. Covers replacement, reordering, and teardown lifetimes without adding an app-level draw loop.\n\nRebased directly onto current manaflow-ai/ghostty main. Local zig build test passes with Zig 0.15.2.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Hardened Metal presentation by tracking a per-frame presentation lifetime and generation, so stale or resized IOSurfaces never overwrite current contents. This fixes remote-terminal typing latency and flicker during resize or layer teardown.

  • Bug Fixes
    • Retains the exact tokened IOSurface until host ack; queues presentation on main to avoid recycled or stalled frames blocking input.
    • Validates updates by size and monotonic generation; discards stale/wrong-size surfaces and advances generation on resize/teardown.
    • Splits presentation lifetime from renderer/layer ownership to avoid touching detached UI or callback userdata.
    • Sync completion on macOS now returns delivery to caller after draw lock releases; iOS path stays async to keep queued behavior.

Written for commit cce098d. Summary will update on new commits.

Review in cubic

@x90skysn3k

Copy link
Copy Markdown
Author

@lawrencecchen This is the minimal 3-file rebase onto current fork main. Full zig build test passes with Zig 0.15.2; parent macOS/iOS integration was already green against the equivalent patch. Please merge when checks clear.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@x90skysn3k, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 38 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 2e27bbb5-1960-461b-975b-b290478f12b6

📥 Commits

Reviewing files that changed from the base of the PR and between 0b1734f and cce098d.

📒 Files selected for processing (3)
  • src/renderer/Metal.zig
  • src/renderer/metal/Frame.zig
  • src/renderer/metal/IOSurfaceLayer.zig
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@x90skysn3k

Copy link
Copy Markdown
Author

@lawrencecchen All available checks are now green/skipped, the full Ghostty renderer suite is green, and the parent macOS/iOS integration has been built and dogfooded. The parent repository is temporarily pinned to the equivalent fork-main commit; merging this PR is the remaining step needed to restore the configured manaflow-ai/ghostty main-branch ancestry contract.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant