# Track Specification: Performance Dashboard (performance_dashboard_20260306)

 
## Overview
Expand performance metrics panel with CPU/RAM graphs, frame time histogram. Uses existing `performance_monitor.py`.
 
## Current State Audit
 
### Already Implemented (DO NOT re-implement)
 
#### PerformanceMonitor (src/performance_monitor.py)
- **`PerformanceMonitor` class**: Tracks FPS, frame time, CPU, input lag
- **`start_frame()`**: Called at frame start
- **`end_frame()`**: Called at frame end
- **`record_input_event()`**: Track input latency
- **`get_metrics()`**: Returns dict with:
  ```python
  {
   "fps": float,
   "frame_time_ms": float
   "cpu_percent": float
   "input_lag_ms": float
  }
  ```
- **No historical storage** - metrics are per-frame only
 
### Gaps to Fill (This Track's Scope)
- No historical graphs of CPU/RAM over time
- No rolling window storage
- No frame time histogram
 
## Architectural Constraints
 
### 60fps During Graphs
- Graph rendering MUST NOT impact frame rate
- Use simple line rendering (imgui.plot_lines)
 
### Memory Bounds
- Rolling window: max 100 data points (deque)
- Memory per point: ~16 bytes (4 floats)
 
## Architecture Reference
 
### Key Integration Points
 
| File | Lines | Purpose |
|------|-------|---------|
| `src/performance_monitor.py` | 10-80 | `PerformanceMonitor` class |
| `src/gui_2.py` | ~2800-2900 | Diagnostics panel - add graphs |
 
### Proposed Enhancement
```python
# In PerformanceMonitor:
from collections import deque
 
class PerformanceMonitor:
 def __init__(self):
  self._history: deque = deque(maxlen=100)
  
 def get_history(self) -> list[dict]:
  return list(self._history)
```
 
## Functional Requirements
 
### FR1: Historical Data Storage
- Add `_history: deque` to PerformanceMonitor (maxlen=100)
- Store metrics each frame
- `get_history()` returns historical data
 
### FR2: CPU Graph
- Line graph showing CPU% over last 100 frames
- X-axis: frame index
- Y-axis: CPU %
- Use imgui.plot_lines()
 
### FR3: RAM Graph
- Line graph showing RAM usage
- X-axis: frame index
- Y-axis: MB
- Use imgui.plot_lines()
 
### FR4: Frame Time Histogram
- Bar chart showing frame time distribution
- Buckets: 0-16ms, 16-33ms, 33+ms
- Use imgui.plot_histogram()
 
## Non-Functional Requirements
| Requirement | Constraint |
|-------------|------------|
| Frame Time Impact | <1ms for graph render |
| Memory | 100 data points max |
 
## Testing Requirements
### Unit Tests
- Test history storage limits
- Test graph rendering doesn't crash
### Integration Tests
- Verify graphs display in GUI
- Verify 60fps maintained with graphs
 
## Acceptance Criteria
- [ ] CPU graph shows rolling history
- [ ] RAM graph shows rolling history
- [ ] Frame time histogram displays
- [ ] History limited to 100 points
- [ ] Uses existing `PerformanceMonitor.get_metrics()`
- [ ] 1-space indentation maintained
