HydraIssues

hydramark: self-owned UE diagnostic probe and benchmark app for multi-stream bodies
open feature Project: hydramark Parent: #695 Reporter: cederik 19 Aug 2026 18:55

Description

What

A small self-owned Unreal Engine application that serves two purposes on Hydra body machines:

  1. 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".
  2. 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).