What
A small self-owned Unreal Engine application that serves two purposes on Hydra body machines:
- Diagnostic probe for the multi-stream work (issue #504): it makes every spike check produce objective, screenshot-able evidence instead of "does the experience feel right".
- Benchmark: in the tradition of 3DMark and PCMark, run it at increasing concurrency and the machine reports what it can hold. Its output is the body's
stream_capacity, the exact number the multi-stream design needs per node in hydracluster.
Name
Proposed: hydramark (echoes 3DMark/PCMark, short, and covers both the probe and the benchmark role). Alternative considered: hydrabenchmark (more literal, longer). Repo and experience id follow the chosen name.
Features
Each running instance:
- Slot identity screen: fills the window with a slot color and prints its own exe path, process id, window position, display name, and resolution. A screenshot of any head instantly proves which instance is visible and where its window landed.
- Touch visualizer: draws dots and trails at touch locations with pointer ids. Verifies per-display touch routing and coordinate mapping at a glance.
- Audio tone: plays a continuous tone whose pitch comes from a launch arg. One clean tone on a head means audio-out isolation works; a chord means bleed between slots.
- Mic VU meter: shows a live level meter for its capture device. Speak into head k's mic and watch which instance reacts. Mic isolation proven visually.
- Launch args:
-SlotColor, -Tone, -MicDevice, -AudioOutDevice, plus standard -ResX/-ResY -WinX/-WinY -windowed -ForceRes and -UserDir. Native device selection doubles as the working reference implementation for issue #511 if per-app routing needs a fallback.
- Benchmark mode: reports FPS, frame time, and basic GPU/VRAM counters on screen and to a log file, so slot-count scaling runs (N=2, 3, 4...) yield comparable numbers per body.
- Tiny footprint: minimal scene, so capacity limits are measured by the streaming stack, not by experience weight.
Build and distribution plan
- UE 5.7 C++ project (custom GameMode plus a HUD widget; roughly two source files for tone, VU meter, and touch overlay).
- Build machine: fluffy-dumpling-87 (hydra-s-0000, gallo-romeins-museum) — UE 5.7 installed, RTX 5070 Ti, ~1TB free. Builds run when the body is not serving visitors.
- Package with
hydraunrealengine (RunUAT wrapper with preflight checks), upload via HydraTransfer, register in the experience library as experience id hydramark.
- Source lives in a new repo named after the chosen name.
How it plugs into #504
- Spike 1 (multi-instance hardware spike on chunky-turnip-23) runs against hydramark instead of or alongside Rupelmonde: per-app render AND capture routing across hardlinked exe copies, window placement, dual capture stability, and audio isolation all become visible on screen.
- The N-scaling runs on the A5000 produce the first real
stream_capacity numbers.
- #511 (Mercator device-selection args) gets a reference implementation to point at.
Caveats
- fluffy is a venue body; schedule builds around visitor hours.
- Noticed during scoping: fluffy's video controller list shows TWO "Virtual Display Driver" adapter entries — the #428 duplicate-adapter pattern that silently breaks mouse input. Check and clean before anyone streams from fluffy expecting working input (separate issue if confirmed).