Early access · Power regression testing in CI
Catch battery-life regressions on every commit, measured on your real device.
Benchwire flashes each build onto your hardware, runs your scenario on a precision power analyzer, and fails the build when energy use regresses past your threshold.
- baseline
main@3f1a9c2 - this PR
fix/ble-retry@8d04e71
- sleep current
- 4.2 µA → 14.6 µA
- energy / scenario
- +2.3%
- check
- FAIL · sleep > 12 µA
Illustrative trace, not a real measurement.
The problem
Your CI checks everything except the battery.
-
Nothing measures power on real hardware
Firmware CI builds the image, runs unit tests, maybe boots an emulator. None of it puts a current probe on the device.
-
Small diffs, quiet regressions
A peripheral left clocked, a radio retry loop, a missed sleep entry. The diff looks harmless. Weeks later someone spots it on a bench, or a customer spots it in the field.
-
An in-house rig is its own project
Automating power tests means buying instruments, building fixtures, writing the glue to CI, and keeping all of it running when nobody owns it.
How it works
Your device on our bench, wired into your pipeline.
-
Step 01
Ship us a unit
Send one or more units, once. Each is mounted on a bench slot with an Otii Ace Pro power analyzer, a programmable supply, a debug probe, and GPIO/UART access.
-
Step 02
Add the CI step
One step in your pipeline sends the firmware build and a scenario file describing what to run and what to measure.
-
Step 03
Every commit runs on the real device
We flash the build, run your scripted scenario, and record the full current profile on your unit.
-
Step 04
Regressions fail the build
If energy use crosses a threshold against the baseline, the check fails and the PR gets a comment with the trace diff.
What you get
A power check next to your other checks.
- Per-commit current profile
- The recorded trace for every run, with average current, peak current, and energy for the scenario.
- Diff against baseline
- Each run overlaid on its baseline (your main branch or a pinned commit), with the changed regions marked.
- Thresholds you configure
- Limits on average current, sleep current, and energy per scenario, per phase, as absolute values or relative to baseline.
- PR comments
- Pass/fail, a metric table, and a link to the trace diff, posted where the review already happens.
- History across commits
- Every metric over time, so you can find the commit where sleep current moved.
Example config
A CI step and a scenario file.
The scenario says how to drive the device and what counts as a regression. Illustrative only: the real API isn't final and will change before launch.
# …after your build job produces the image
- name: Measure power on device
uses: benchwire/measure@v0
with:
firmware: build/zephyr/zephyr.hex
scenario: .benchwire/advertise-and-sleep.yml
api-key: ${{ secrets.BENCHWIRE_API_KEY }}
device: tracker-rev-c
supply: { voltage: 3.7V }
baseline: main
steps:
- flash: swd
- wait_for_uart: "boot ok"
- measure: { phase: advertise, duration: 30s }
- gpio: { pin: BTN1, pulse: 100ms }
- measure: { phase: sleep, duration: 60s }
thresholds:
average_current: { max_increase: 5% }
energy_per_scenario: { max_increase: 3% }
sleep_current: { phase: sleep, max: 12uA }
FAQ
Questions engineers ask first.
What devices fit?
Battery-powered devices that can be flashed over SWD/JTAG or USB (DFU or a bootloader). During a run, the programmable supply stands in for the battery, and the power analyzer measures what the device draws. If your scenario needs button presses, sensor stimulus, or a UART console, we drive those over GPIO and UART.
If your device needs something unusual, such as RF conditions, a specific fixture, or an unusual supply range, tell us when we reach out and we'll say whether it fits.
How do shipping and returns work?
You ship units to us once, with any cables or adapters they need. They stay mounted on our bench while you use Benchwire. You can swap in a new hardware revision at any point. You pay to ship units to us, and we pay for return shipping. When you want units back, we ship them within 5 business days.
How do you handle unreleased hardware and firmware?
We'll sign an NDA before you ship anything. Your firmware images are used only to run your scenarios.
Firmware images are deleted 30 days after the run that used them. Traces are kept while you're a customer, because commit history depends on them. We delete them within 30 days of you leaving, or sooner if you ask.
Which CI systems are supported?
GitHub Actions at launch. GitLab CI and CircleCI are planned. If you use something else, choose it on the waitlist form so we know.
What does it cost?
Early-access pricing will be shared with the waitlist.
Can I use it today?
Not yet. Benchwire is pre-launch. Teams on the waitlist get early access first.
Early access
Put your power budget under test.
Join the waitlist. We'll contact teams as early-access slots open.
Power check failed: 1 of 3 thresholds exceeded
scenario
advertise-and-sleep· devicetracker-rev-c· baselinemain@3f1a9c2View trace diff →