fix: resolve high CPU usage from event subscription loop and aggressive polling#394
Merged
Dimillian merged 2 commits intoDimillian:mainfrom Feb 10, 2026
Merged
Conversation
aa61f3b to
da23537
Compare
…ve polling - useAppServerEvents: stabilize subscription with useRef to prevent infinite subscribe/unsubscribe loop caused by handlers object recreation on every render - useWorkspaceFiles: reduce polling frequency (30s/60s instead of 5s/20s) and pause polling when tab is hidden Fixes Dimillian#393 Co-authored-by: Amp <amp@ampcode.com> Amp-Thread-ID: https://ampcode.com/threads/T-019c4703-2ce1-7308-9585-7f7c41730fbb
da23537 to
94e8cb7
Compare
Owner
|
This is nice! Looking! |
Owner
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 94e8cb7507
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Fixes #393
WebKit.WebContentprocess consumes 60-75% CPU and 1GB+ RAM, causing severe UI lag — especially when switching back to Codex Monitor from another app.Root Cause
Three React hooks had unstable
useEffectdependency arrays, causing infinite re-registration loops and flooding the IPC bridge / backend with requests:useAppServerEvents—[handlers]dependency recreated every render → infinite subscribe/unsubscribe cycle on the event bridge.useWorkspaceRefreshOnFocus—[workspaces, ...]dependency recreated every render → re-registered focus/visibility listeners every render, and fired a burst of workspace + thread list refreshes on every focus event with no debounce.useRemoteThreadRefreshOnFocus— Same pattern as above, adding another immediate refresh on focus.When switching back to the app, all three hooks fired simultaneously, hammering the backend.
Changes
useAppServerEvents.tsuseRefto track the latest handlers, allowing the subscription effect to use an empty dependency array ([]) and remain stable across renders.handlers.references inside the effect withcurrentHandlers.from the ref.useWorkspaceRefreshOnFocus.tsuseRef+ empty dependency array to prevent listener re-registration.useRemoteThreadRefreshOnFocus.tsuseRef+ empty dependency array stabilization.useWorkspaceFiles.tsdocument.visibilityState === "hidden"(tab not visible / app minimized).Results (local build v0.7.49)