Kestrel.
Battery, system and frame-time overlay for Windows. One
portable executable. No kernel driver, no installer, no
service, and no DLL in anybody’s game.
$ why it exists
------------------------------------------------------------
Windows monitoring comes in two shapes. Heavy suites that
install a kernel driver and a background service, and small
gadgets that show only what the OS gives away for free.
Kestrel sits between them on purpose. Package power comes
from the Windows energy counters rather than a ring-0 MSR
driver. Frame timing comes from ETW, the same event
stream PresentMon reads, attributed to the process that is
actually rendering.
When a value cannot be measured, the row shows a dash and
the log names the sensor that failed. Nothing is guessed,
and nothing prints a plausible zero in place of a number
it does not have.
$ frame timing
------------------------------------------------------------
- fps, frame interval, and real per-frame GPU time read
from the graphics kernel scheduler
- 1% and 0.1% low from individual frame intervals, the
definition MangoHud and CapFrameX use, so the figures
compare across tools. Each stays a dash until enough
frames exist to mean anything
- CPU or GPU bound, from GPU time against frame interval
- D3D9, D3D11, D3D12, OpenGL and Vulkan
- follows whatever process is presenting, so alt-tabbing
out of a game does not lose the reading
$ system
------------------------------------------------------------
- CPU total and per-core load, package power from RAPL
- frames per watt, which says whether raising the power
limit actually bought you anything
- GPU load, per-process GPU time, video memory against
the adapter’s capacity, fan speed in RPM
- temperatures labelled by the chip they came from. The
GPU figure comes from the display driver; the CPU has no
kernel driver to read, so it uses Afterburner’s shared
block when it is running and an ACPI zone otherwise
$ battery
------------------------------------------------------------
- level, voltage, rate, time to empty and time to full
- cycle count and wear against the design capacity, with
the pack’s age worked out from its manufacture date
- charger deficit warning — plugged in and still
draining, because the load outruns the supply
- a slow background log to battery-history.csv, so ageing
shows over months rather than only right now
$ the overlay
------------------------------------------------------------
- per-pixel alpha, drawn with Direct2D and DirectWrite
- any of the four corners, adjustable margin, redraw at
50, 100, 250 or 500 ms
- rolling graphs holding 24 seconds, grouped by unit so
each group gets its own scale
- Ctrl+Alt+H hide, Ctrl+Alt+1/2/3 preset,
Ctrl+Alt+B start and stop a recording
$ recording a run
------------------------------------------------------------
- a REC row while it captures, even with the overlay hidden
- per run: average, 1% low, 0.1% low, median, worst frame,
stutter count, watt-hours spent, and the battery life
that load implies
- one CSV row per frame, plus an index of every run
$ will not
------------------------------------------------------------
- No DLL injected into the game’s present chain.
Anti-cheat treats injection as an attack, and it
contradicts the point of a portable executable.
The cost, stated plainly: no frame limiter, and no
overlay over exclusive fullscreen. Borderless is fine.
- Checks for a new release only when asked, never on
its own.