Skip to content

fix: reduce potential menu bar memory growth from oversized collapsed widths#344

Merged
phucledien merged 1 commit intodevelopfrom
fix/memory-leak-monitor-loop
Mar 3, 2026
Merged

fix: reduce potential menu bar memory growth from oversized collapsed widths#344
phucledien merged 1 commit intodevelopfrom
fix/memory-leak-monitor-loop

Conversation

@phucledien
Copy link
Copy Markdown
Member

Summary

This PR addresses high-memory reports (see #326) by removing oversized status item collapse widths that can trigger expensive menu bar layout behavior on newer macOS versions.

Closes #343.

Root cause hypothesis

StatusBarController used very large hardcoded collapse lengths (10000) for status items when hiding sections.
On newer macOS builds, oversized status item geometry appears to cause pathological layout/repaint work, which aligns with reports of Hidden consuming multiple GB of RAM.

What changed

  • Replaced hardcoded large collapse lengths with a dynamic bounded width based on current screen width.
    • New bounded formula: max(500, min(screenWidth + 200, 4000))
  • Recompute collapse lengths when display configuration changes via:
    • NSApplication.didChangeScreenParametersNotification
  • Added cleanup safety:
    • deinit now removes observers.
  • Fixed status item lifecycle in always-hidden toggle:
    • Explicitly remove old NSStatusItem from NSStatusBar before replacing/nilling.

Why this is safe

  • Behavior remains functionally the same (collapsed section still fully hidden).
  • Uses realistic, bounded geometry instead of extreme values.
  • Should reduce risk of memory growth while preserving UX.

Validation notes

I couldn’t run full xcodebuild in this environment because full Xcode isn’t installed (only Command Line Tools). Please validate on macOS 15/26 with Activity Monitor after repeated collapse/expand + auto-hide cycles.

@phucledien phucledien self-assigned this Mar 3, 2026
@phucledien phucledien changed the base branch from master to develop March 3, 2026 06:35
@phucledien phucledien merged commit a971149 into develop Mar 3, 2026
@phucledien phucledien deleted the fix/memory-leak-monitor-loop branch March 3, 2026 13:47
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.

High memory usage likely caused by oversized status item lengths on newer macOS

1 participant