2.5 KiB
2.5 KiB
Visualize
Visualize is a real-time graph viewer for instrumenting your programs.
You run a graphical app (visualize.exe), then your own program connects through a small C/C++ header-only API and streams plot data into shared memory. The viewer reads that memory and draws graphs live.
Demo video: visualize_plot_zooms.mp4
What this project is for
- Quickly inspect runtime stats from external programs.
- Plot continuously changing values (frame time, latency, memory, counters, custom metrics).
- Organize data as
plot -> series -> points. - Visualize without building a full UI in your own app.
Data Flow
flowchart LR
A[Your Program] -->|VIS_* API calls| B[Shared Memory Buffer\n32 MB]
B --> C[Visualize Viewer App]
C --> D[Plot Canvas Renderer]
D --> E[Line / Scatter / Histogram / Bar Graphs]
Core concept
The integration API is defined in src/visualize/visualize.h.
- Shared memory transport (
VIS_CreateSharedMemory,VIS_Connect) - Plot/series selection (
VIS_Plot,VIS_Series) - Data writes (
VIS_Point,VIS_Value,VIS_NamedValue,VIS_NamedPoint) - Labels and metadata (
VIS_Title,VIS_XLabel,VIS_YLabel,VIS_SeriesName) - Synchronization/commands (
VIS_Clear, command ring buffer)
Internally, data is written as lightweight nodes into a single mapped buffer and then copied by the viewer into frame-local structures for safe rendering.
Supported graph types
| Plot kind | Purpose |
|---|---|
| Line | Time-series and trend lines |
| Scatter | Point clouds / sampled observations |
| Histogram | Distribution of values |
| Bar | Named categorical values |
Quick start
Before building, open the x64 Visual Studio Command Prompt and run commands from there. This ensures cl.exe (MSVC) is available on your PATH.
1) Build and run the viewer (Windows/MSVC)
From repository root:
build.bat
This produces build/visualize.exe.
2) Send data from your program
Minimal example:
#include "src/visualize/visualize.h"
void send_metrics() {
VIS_Plot(0);
VIS_Title("Application Timing");
VIS_XLabel("Frame");
VIS_YLabel("Milliseconds");
VIS_Series(0);
VIS_SeriesName("Update");
VIS_Point(1.0, 0.42);
VIS_Series(1);
VIS_SeriesName("Render");
VIS_Point(1.0, 0.31);
}
Notes:
- Start the viewer first so shared memory exists.
- API uses a fixed named shared-memory region (
VIS_BUFFER_NAME). - Buffer size is
32 MB(VIS_BUFFER_SIZE).