Skip to content

feat: timeline minimap#712

Merged
lcottercertinia merged 29 commits intocertinia:mainfrom
lukecotter:feat-timeline-minimap
Jan 28, 2026
Merged

feat: timeline minimap#712
lcottercertinia merged 29 commits intocertinia:mainfrom
lukecotter:feat-timeline-minimap

Conversation

@lukecotter
Copy link
Copy Markdown
Contributor

@lukecotter lukecotter commented Jan 28, 2026

📝 PR Overview

Adds a minimap overview panel to the timeline, providing bird's-eye
navigation for massive Apex debug logs. The minimap displays a
density-based skyline visualization with a 2D viewport lens, enabling
instant navigation across the entire log without losing context.

User-Facing Features

  • Skyline Overview — See the entire log structure at a glance with
    color-coded categories and opacity-based density visualization
  • 2D Viewport Lens — A window showing exactly what's visible in the
    main timeline (both time range and depth)
  • Teleport Navigation — Cmd/Ctrl+Click anywhere to instantly jump the
    viewport to that position
  • Drag-to-Zoom — Drag anywhere on the minimap to create a new zoom
    selection
  • Resize Lens Edges — Drag the left/right edges of the lens to adjust
    zoom range
  • Move Viewport — Shift+Drag inside the lens to pan without changing
    zoom
  • Scroll Interactions — Vertical scroll zooms, horizontal scroll pans
  • Double-Click Reset — Double-click to reset to full timeline view
  • Depth Panning — Vertical drag during any operation scrolls the main
    timeline up/down
  • Cursor Mirroring — Cursor position synced between minimap and main
    timeline
  • Keyboard Shortcuts — Arrow keys pan, W/S zoom, Home/End jump to
    start/end, 0 resets (when hovering minimap)
  • Lens Label — Shows duration and time range when interacting with the
    viewport lens

Technical Details

  • MinimapOrchestrator — Owns minimap lifecycle, coordinates renderers
    and interaction handlers
  • MinimapBarGeometry — Optimized geometry class using pre-allocated
    Float32Arrays for density bar rendering
  • MinimapDensityQuery — Leverages TemporalSegmentTree for O(B × log N)
    density computation instead of O(N) traversal
  • Sliding Window Algorithm — Optimized skyline computation with
    pre-allocated arrays for smooth rendering
  • MinimapInteractionHandler — Handles all mouse interactions with state
    machine for drag modes (create, move, resize)
  • MinimapAxisRenderer — Decoupled axis rendering with proper layer
    management
  • Search Integration — Minimap highlights buckets containing search
    matches
  • Cursor Sync — Bidirectional cursor mirroring between minimap and main
    timeline via callbacks
  • Static Content Caching — Density bars and axis are cached and only
    redrawn on resize or data change

🧩 Type of change (check all applicable)

  • 🐛 Bug fix - something not working as expected
  • ✨ New feature – adds new functionality
  • ♻️ Refactor - internal changes with no user impact
  • ⚡ Performance Improvement
  • 📝 Documentation - README or documentation site changes
  • 🔧 Chore - dev tooling, CI, config
  • 💥 Breaking change

📷 Screenshots / gifs / video [optional]

Show off your UI changes.
minimap

🔗 Related Issues

fixes #
resolves #245
closes #
related #446

✅ Tests added?

  • 👍 yes
  • 🙅 no, not needed
  • 🙋 no, I need help

📚 Docs updated?

  • 🔖 README.md
  • 🔖 CHANGELOG.md
  • 📖 help site
  • 🙅 not needed

Anything else we need to know? [optional]

- Added skyline area chart to show a overview of the timeline based on type that took most time
    - Highlights what takes time in a slice to you can target problematic areas
    - Split into 1px slice and the slice color is based on the frame type that took the most time.
- Viewport lens to show main timeline current viewport window on minimap
- Cursor / ruler vertical line on the main timeline that mirrors the cursor position from the minimap

fix: Enhance SelectionHighlightRenderer for better visibility

- Updated selection highlight rendering to account for vertical pan position and ensure markers remain visible.

fix: Update AxisRenderer for consistent label positioning

- Adjusted label positioning logic to remove minimap offset, ensuring correct placement in the main timeline.
With a 1 px slice of the minimap the color of deeper frame are prioritised e.g those with a visual edge
After that we also apply category based weightings so that this like DML and SOQL stand out on methods calls.

For example, Method - parent (100 ms), dml child (50ms).
Imagine within the 1px slice 50 % of each frame is visible (1 on top of other).
The dml would get a 5x weighting on top of methods meaning it would be treated
as if it contributed 250ms. making that the dominant color of the bucket.

This helps to highlight important sections that consume governors.
…d timeline interactions

- Implement MeasurementOrchestrator to manage measurement and area zoom functionalities, including lifecycle management, resizing, and rendering.
- Introduce MinimapOrchestrator to handle minimap interactions, state management, and rendering, including keyboard shortcuts and viewport synchronization.
- Both orchestrators utilize callbacks for communication with the FlameChart and maintain a clear separation of concerns.
…endering

- Added MinimapBarGeometry class to manage PixiJS geometry for vertical bar rendering in the minimap.
- Introduced a grow-only buffer strategy and direct typed array access for performance improvements.
- Updated MinimapDensityQuery to utilize skyline algorithm for category resolution and caching mechanisms.
- Refactored MinimapRenderer to use mesh-based rendering for skyline visualization, improving performance significantly.
- Removed legacy polygon rendering logic in favor of bar geometry for skyline representation.
@lcottercertinia lcottercertinia changed the title Feat timeline minimap feat: timeline minimap Jan 28, 2026
@lcottercertinia lcottercertinia merged commit 71b2c32 into certinia:main Jan 28, 2026
5 checks passed
@lukecotter lukecotter deleted the feat-timeline-minimap branch January 28, 2026 11:11
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.

feat: timeline - minimap / overview

2 participants