fix: evict stale CGImages from menu bar item cache#1
Merged
Conversation
On long running systems, the cache would continue to grow. On my system, after running for 15 days, the Cache 983MB, almost of the total memory usage.
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.
Cherry-picked from upstream PR jordanbaird/Ice#804 by @mrunkel (commit attribution preserved).
Summary
MenuBarItemImageCache.images, filter the cache down to keys still present inMenuBarItemManager.itemCache.allItems.(bundleID, title)keys when menu bar items change titles or apps quit.Why
The cache previously only ever called
images.merge(...)and never removed keys. Items with dynamic titles (Stats, Itsycal, Spotify, etc.) produce a newMenuBarItemInfoevery time the title changes; old keys stay in memory forever, each holding a backing-scale CGImage. Upstream issue #530 reports up to ~4 GB after long uptime; the PR author saw 983 MB after 15 days. Locally we see ~300 MB after several days.This is the minimum floor for the leak — a follow-up will likely also prune when no UI is visible (current
updateCache()early-returns when Ice Bar / Search / Settings are hidden, so eviction doesn't run in steady state).Test plan
xcodebuildfor now).MenuBarItemImageCache.images.countno longer grows beyond the live item count.