GFlick

Measured August 3, 2026

What it costs to leave running

GFlick is meant to sit in the background for months, so the number that matters is what it consumes while doing nothing. These are complete recordings of operating-system process counters - every metric captured, including the ones where GFlick does not win.

How this was measured

gflick-bench is a native release-mode recorder that reads OS process counters. It does not inject code into the target and does not talk to GFlick over IPC, so it measures both stacks the same way. Each run discards a 120-second warm-up, then samples every two seconds for 30 minutes and writes a versioned JSON report plus a CSV.

Both products are measured as complete products, not as their smallest process: G Hub is recorded as its three resident components together. The primary metric is CPU on a one-core basis - accumulated target CPU time divided by wall time - because it stays comparable across machines with different core counts.

Each result below is one run per stack. The recommended procedure is three alternating runs per stack compared at the median, so treat small differences as provisional.

Windows

GFlick used less of every resource measured.

Environment and scope

Test environment for the Windows run
ItemValue
Operating systemWindows 10 Pro, build 19045, x86-64
ProcessorAMD Ryzen 7 5700X, 8 cores / 16 threads
Memory32 GB
Recorded duration1,800 s per recorder, after 120 s warm-up
Sample interval2 s (900 samples)
GFlick groupgflick-agent
G Hub grouplghub_agent, lghub_system_tray, lghub_updater

Target process results

Measured counters for the Windows run
MetricGFlickG HubRatioReduction
Accumulated CPU time1,890 ms6,937 ms0.272x72.8%
Average CPU, one-core basis0.1050%0.3854%0.272x72.8%
Average CPU, whole-system0.006562%0.024087%0.272x72.8%
CPU sample p950.8000%2.3512%0.340x66.0%
CPU sample maximum1.6008%10.9055%0.147x85.3%
Resident memory mean7.579 MiB227.550 MiB0.033x96.7%
Resident memory p957.590 MiB231.418 MiB0.033x96.7%
Virtual memory mean1.602 MiB287.534 MiB0.006x99.4%
I/O read total24,140 B20,058,492 B0.001x99.9%
I/O read rate13.411 B/s11,143.606 B/s0.001x99.9%
I/O write total26,962 B11,877,360 B0.002x99.8%
I/O write rate14.979 B/s6,598.533 B/s0.002x99.8%
Resident process count130.333x66.7%

Validity and observer overhead

Run completeness and recorder overhead for the Windows run
CheckGFlick runG Hub run
Matched samples900 / 900900 / 900
Missing samples00
Target process start events00
System CPU mean8.83%8.28%
System CPU p9519.57%17.30%
System CPU maximum66.20%52.98%
Recorder CPU time12,984 ms12,734 ms
Recorder CPU, one-core basis0.721%0.707%

Limits of this run

  • Both stacks were resident and both recorders sampled concurrently for about 25 minutes 54 seconds, so this is a co-resident comparison, not an isolated sequential A/B test.
  • Recorder overhead differed by roughly 2% between runs, which supports the fairness of the process-counter comparison - but recorder CPU exceeded either target's CPU usage.
  • Background system load was not perfectly quiet. The G Hub I/O values are Windows all-I/O process counters and are not physical disk traffic alone.

Apple Silicon macOS

GFlick used far less memory and I/O, but slightly more CPU than G Hub.

Environment and scope

Test environment for the Apple Silicon macOS run
ItemValue
Operating systemmacOS 15.7.7, build 24G720
ComputerMacBook Air (Mac16,12), Apple M4
Processor10 logical cores (4 performance, 6 efficiency)
Memory16 GB
MousePRO X Wireless via USB receiver, 1600 DPI
Recorded duration1,800 s per recorder, after 120 s warm-up
Sample interval2 s (900 samples)
GFlick groupgflick-agent, gflick-tray
G Hub grouplghub_agent, lghub_system_tray, lghub_updater

Target process results

Measured counters for the Apple Silicon macOS run
MetricGFlickG HubRatioReduction
Accumulated CPU time3,621 ms3,403 ms1.064x−6.4%
Average CPU, one-core basis0.2012%0.1891%1.064x−6.4%
Average CPU, whole-system0.020117%0.018906%1.064x−6.4%
CPU sample p950.5008%0.3003%1.668x−66.8%
CPU sample maximum9.2546%1.1483%8.060x−706.0%
Resident memory mean34.959 MiB258.728 MiB0.135x86.5%
Resident memory p9538.078 MiB297.953 MiB0.128x87.2%
Virtual memory mean802,945.8 MiB804,619.8 MiB0.998x0.2%
I/O read total4,096 B18,399,232 B0.0002x99.98%
I/O read rate2.276 B/s10,221.767 B/s0.0002x99.98%
I/O write total0 B0 Bn/an/a
Resident process count230.667x33.3%

Validity and observer overhead

Run completeness and recorder overhead for the Apple Silicon macOS run
CheckGFlick runG Hub run
Matched samples900 / 900900 / 900
Missing samples00
Target process start events00
System CPU mean9.89%9.34%
System CPU p9545.94%36.85%
System CPU maximum76.29%55.99%
Recorder CPU time4,783 ms5,602 ms
Recorder CPU, one-core basis0.266%0.311%

Limits of this run

  • This run was sequential, one stack at a time, because starting G Hub immediately changed the live DPI. GFlick was measured from commit 0b648be with the mouse in host/local control.
  • Quitting G Hub stopped its agent and tray, but its root-owned updater stayed resident during the GFlick run. That updater is excluded from the GFlick target counters.
  • System load was noisier during the GFlick run, and the recorder used more CPU than either target group. macOS virtual-memory figures include large shared mappings and are not physical memory pressure.

What this cannot prove

CPU time, wake frequency, I/O, and memory pressure all influence power draw, but they are not watts. Windows exposes no stable, precise, cross-hardware per-process energy counter suitable for this comparison, so nothing here is a battery-life or power claim.

A real energy result needs these same reports alongside a repeatable whole-system measurement: an external power meter for a desktop, or several long battery-discharge trials for a laptop. The recorder reports its own CPU overhead so that contribution stays visible rather than hidden.

Reproducing it

The recorder ships in the devtools archive and the repository. Build it in release mode, run the binary directly rather than through cargo run so compiler activity does not contaminate the baseline, and record at least three runs per stack with their order alternated.

The full procedure - recommended test conditions, the exact record and compare invocations, and how to read every field in a report - is in the benchmark README .