Commit graph

15 commits

Author SHA1 Message Date
Hibryda
3859317477 perf(ui-gpui): add render counters, remove redundant cx.observe, reduce repaints
- BlinkState.start_from_context<V>() uses Context<V> spawn (not App)
  which correctly registers the async task in the window's executor
- ProjectGrid NOT cached (blocks child dirty propagation)
- AgentPane + TerminalView cached with into_cached_flex()
- Render diagnostic: ProjectBox renders 2x/sec (blink), both boxes
  re-render because shared parent, but inner cached views are free
- CPU: ~3% with pulsing dot visible
2026-03-19 22:48:29 +01:00
Hibryda
1f26e5b272 perf(ui-gpui): diagnostic counters confirm 2 renders/sec at window level (GPUI limit)
- Sidebar and StatusBar uncached (natural size collapsed with StyleRefinement::default)
- ProjectGrid cached with flex-1 style (into_cached_flex)
- AgentPane + TerminalView cached within ProjectBox
- BlinkState::start() fixed with &mut *cx deref coercion
- CPU: ~3% with full layout visible (down from 6.8% uncached)
- Remaining: ProjectBox re-renders full tree on blink (reads BlinkState)
- Next: isolate dot into StatusDotView entity to prevent ProjectBox re-render
2026-03-19 22:45:21 +01:00
Hibryda
73cfdf6752 perf(ui-gpui): cache SharedStrings, remove diagnostics, zero alloc per render frame
- BlinkState as shared Entity (not child) → cx.notify() only dirties ProjectBox,
  NOT ancestors (Workspace, ProjectGrid). Siblings serve from GPU cache.
- .cached(StyleRefinement::default()) on all Entity children in Workspace,
  ProjectGrid, ProjectBox → GPUI replays previous frame's GPU commands via memcpy
- CachedView trait: Entity<V>.into_cached_view() → AnyView::from().cached()
- Result: 4.5% CPU → 0.83% CPU (25 ticks / 30s) for pulsing dot animation
2026-03-19 22:35:41 +01:00
Hibryda
5dbf5bd43c perf(ui-gpui): cache SharedStrings, remove diagnostics, zero alloc per render frame 2026-03-19 09:38:00 +01:00
Hibryda
b557aeb833 perf(ui-gpui): diagnostic counters confirm 2 renders/sec at window level (GPUI limit) 2026-03-19 09:33:34 +01:00
Hibryda
7ab5d97352 perf(ui-gpui): add render counters, remove redundant cx.observe, reduce repaints 2026-03-19 09:27:08 +01:00
Hibryda
8dd3d82d31 fix(ui-gpui): re-enable start_blinking (was disabled for testing) 2026-03-19 09:21:21 +01:00
Hibryda
ba74e19ff2 feat(ui-gpui): Zed-style BlinkManager pattern for pulsing dot (epoch guard, 500ms timer) 2026-03-19 09:20:04 +01:00
Hibryda
3383334821 feat(ui-gpui): custom Element with direct paint_quad() for zero-overhead pulse 2026-03-19 08:16:44 +01:00
Hibryda
713b53ba0c perf(ui-gpui): throttle pulse to 5fps via spawn+timer instead of request_animation_frame 2026-03-19 08:11:22 +01:00
Hibryda
c4d0707514 fix(ui-gpui): set first project to Running status so pulse animation triggers 2026-03-19 08:08:53 +01:00
Hibryda
18cfe7979c fix(ui-gpui): color interpolation instead of alpha (GPUI ignores alpha on bg) 2026-03-19 08:03:24 +01:00
Hibryda
573105eae6 feat(ui-gpui): render-driven pulse via request_animation_frame() (GPUI native) 2026-03-19 07:59:32 +01:00
Hibryda
57e0e3a087 feat(ui-gpui): add pulsing dot via GPUI async runtime (entity-scoped repaint) 2026-03-19 07:51:25 +01:00
Hibryda
f3d2ca78ba feat: add Dioxus and GPUI UI prototypes for framework comparison
Dioxus (ui-dioxus/): 2,169 lines, WebView mode (same wry as Tauri),
  Catppuccin theme, 12 components, agor-core integration, compiles clean.
  Evolution path — keeps xterm.js, gradual migration from Tauri.

GPUI (ui-gpui/): 2,490 lines, GPU-accelerated rendering, alacritty_terminal
  for native terminal, 17 files, Catppuccin palette, demo data.
  Revolution path — pure Rust UI, 120fps target, no WebView.

Both are standalone (not in workspace), share agor-core backend.
Created for side-by-side comparison to inform framework decision.
2026-03-19 06:05:58 +01:00