Native developer test instrument for Haiku OS
HaikuInsights is a hard fork of HaikuBench. It preserves the useful native benchmark foundation while rebuilding its measurement, result, worker and reporting boundaries into a trustworthy developer instrument.
The project asks five questions:
- What capability is present?
- Which Haiku, driver or API path exposes it?
- Was that path actually exercised?
- Was the result correct?
- How well did the confirmed path perform?
0.0.0-dev is the inherited-code sanitation series. Existing benchmark values,
scores, capability claims and exported reports are not yet treated as calibrated
HaikuInsights evidence. See docs/roadmap.md and
docs/prueffeld/phase-0000-haikuinsights-identity-and-provenance.md.
- no recreation of commercial profiling products
- no new Intel, NVIDIA or Radeon-specific inspection stack
- no public leaderboard
- no claim that an API renderer string alone proves hardware execution
# required build dependencies
pkgman install mesa_devel glu_devel vulkan_devel
# optional Vulkan runtime path and GLSL compiler
pkgman install vulkan mesa_lavapipe shaderc
# build, smoke-test and run
make
make smoke
./HaikuInsightsEvery test warms up the CPU for 200 ms, then samples adaptively: at least 3 runs, up to 10, stopping as soon as the coefficient of variation drops below 2%. The UI and exports report the trimmed mean (robust to a single outlier via the MAD rule) along with stddev, p50, p95 and the actual number of samples taken. JSON export also carries min/max, CoV and trimmed mean for later report validation.
| Section | Tests | What it measures |
|---|---|---|
| CPU (3) | Integer, Float, Multi-thread | Arithmetic throughput, transcendentals, HT/multi-core scaling |
| Memory (4) | Seq Read, Seq Write, Copy, Latency | DDR bandwidth and random-access latency (pointer-chasing) |
| Cache (3) | L1, L2, L3 | Per-level bandwidth with 8 independent accumulators |
| Kernel (8) | Semaphores, Threads, Ports, Areas, Atomics, Syscalls | Haiku kernel primitive throughput and overhead |
| Messaging (2) | BMessage Flatten, BLooper | Haiku IPC serialization and looper round-trip |
All rendering through BView, no GPU required. Detects whether 2D
hardware acceleration is active by identifying the accelerant driver
via BScreen::GetDeviceInfo() and ioctl B_GET_ACCELERANT_SIGNATURE.
Reports device name, chipset, VRAM and individual hook availability
(FillRect, ScreenBlit, InvertRect).
| Level | Theme | Tests |
|---|---|---|
| 1 | Basic Fills | FillRect, StrokeRect, FillRoundRect, StrokeLine |
| 2 | Geometry | FillTriangle, FillEllipse, FillPolygon, DrawString |
| 3 | Compositing | BShape curves, gradients, alpha blending, bitmap scaling |
| 4 | Advanced | 24-point star, clipped regions, conic gradients, text storm |
| 5 | Extreme | Nebula particles, fractal trees, plasma renderer, everything combined |
| 6 | Software 3D | Teapot wireframe, flat-shaded, x4 rotating, x16 army |
| Test | Description |
|---|---|
| Fill Rate | 200 full-screen quads per frame |
| Geometry | 10 000 small triangles per frame |
| Texture | 256x256 re-upload + 50 textured quads |
| Alpha Blending | 300 semi-transparent overlapping quads |
| Stencil Buffer | 100 stencil masks + 150 masked draws |
| Combined Stress | 25 rotating lit objects (teapots, spheres, tori) |
Includes a live rotating teapot preview during idle.
| Test | Description |
|---|---|
| Memory Bandwidth | Host-visible 64 MB buffer write throughput |
| Compute Shader | 1M invocations, 256 FMA ops each (GFLOPS) |
| Buffer Copy | Device-to-device 32 MB vkCmdCopyBuffer |
| Buffer Fill | 64 MB vkCmdFillBuffer |
Vulkan is loaded dynamically at runtime. If the Vulkan loader or a driver (e.g. mesa_lavapipe) is not installed, the benchmark shows an error message instead of crashing. The compute shader is compiled from GLSL at runtime using glslc (shaderc).
Renders 1 to 64 Utah Teapots with Phong lighting via BGLView. Use the +/- buttons to add or remove teapots and watch the FPS counter.
The 2D benchmark panel reports the video card's acceleration status:
- Driver: active accelerant name (e.g.
intel_extreme.accelerant) - Device: GPU name, chipset and VRAM from
BScreen::GetDeviceInfo() - 2D Acceleration: ACTIVE (hardware) or NONE (software rendering)
- Hooks: FillRect, ScreenBlit, InvertRect availability
Detection uses ioctl B_GET_ACCELERANT_SIGNATURE on /dev/graphics/
to identify the active driver, then classifies it against the known set
of Haiku accelerant drivers:
| Driver | 2D Acceleration |
|---|---|
| intel_extreme, radeon_hd, radeon, nvidia, ati, matrox, via, intel_810 | Hardware accelerated |
| vesa, framebuffer, virtio_gpu | Software only |
Clicking Export reports generates two files directly on the Desktop:
HaikuInsights_YYYY-MM-DD_HH-MM-SS.md— human-readable reportHaikuInsights_YYYY-MM-DD_HH-MM-SS.json— machine-readable data
Both files include:
- App version, date, Machine ID
- Full system info (CPU, cores, RAM, OS version)
- All benchmark results with mean, stddev, p50, p95, CoV
- Overall composite score broken down by subsystem
{
"format_version": 1,
"app_version": "1.1.0",
"machine_id": "HB-A3F7B21C",
"hardware": "Intel Core i3 M 370 | 4 cores | 3757 MB RAM",
"os": "Haiku hrev59722",
"system_bench": {
"valid": true,
"runs": 5,
"results": {
"cpu_integer_mops": {
"mean": 59.10, "stddev": 0.30,
"median": 59.05, "p95": 59.50,
"min": 58.70, "max": 59.60,
"cov": 0.005, "trimmed_mean": 59.08,
"n_samples": 3, "n_dropped": 0
},
...
}
},
"graphics": {
"teapot": "Teapot 3D: 25 FPS (4 teapots)",
"bench_2d": "2D Bench: 18795 fill/s | nebula 5215.3/s | extreme 14.3/s",
"gpu_opengl": "GPU Bench: 24.1 FPS (...)",
"vulkan": null
}
}ACPI thermal zones are read in real-time and displayed:
- In the main window (System panel)
- As an overlay on all OpenGL benchmark windows
- In the 2D and GPU benchmark result windows
Colors: green (< 65 C), yellow (65-80 C), red (> 80 C).
make smokeThe root smoke target builds the application, verifies that its Haiku resource
container is readable, and runs all inherited Phase A unit tests
(BenchStats, AdaptiveRunner, BenchWarmup) plus the integration smoke test
(114 checks total). ./tests/run_all.sh remains the direct test entry point.
HaikuInsights/
├── HaikuInsights binary (with HVIF icon)
├── icon.hvif application icon source
├── HaikuInsights.rdef application signature, version and icon resources
├── Makefile
├── LICENSE MIT
├── README.md
├── CHANGELOG.md
├── haikubench-1.1.0.recipe HaikuPorts recipe
├── WattHaiku.cpp BApplication entry point
├── MainWindow.h/cpp Main window, export, score
├── SysBenchmark.h/cpp 20 system tests
├── AdaptiveRunner.h/cpp Convergence-driven multi-run sampler
├── BenchStats.h/cpp Statistics (mean, median, p95, CoV, trimmed mean)
├── BenchWarmup.h/cpp CPU warm-up and buffer touch
├── CpuDatabase.h/cpp CPUID brand string detection
├── TeapotWindow.h/cpp OpenGL teapot demo
├── Bench2DWindow.h/cpp 24 BView rendering tests + 2D accel detection
├── GpuBenchWindow.h/cpp 6 OpenGL tests + teapot preview
├── VulkanBenchWindow.h/cpp 4 Vulkan compute tests
├── TempOverlay.h/cpp ACPI temperature overlay
├── Version.h Version constant
└── tests/ Unit and integration tests
- Haiku OS (x86_64), R1/beta5 or newer
mesa_devel,glu_devel,vulkan_devel(required build dependencies)vulkan(optional Vulkan ICD loader at runtime)mesa_lavapipe(optional Vulkan software-device provider)shaderc(optional runtime provider ofglslc)shaderc_develis not consumed by the current source or link boundary
HaikuInsights started from HaikuBench commit
611f819e0a8871b55397ef486cf070fbdab07f35 by Andrea Bernardi.
The fork keeps the original MIT license and copyright notices.
See docs/provenance.md for the maintained boundary.
MIT License. See LICENSE.
