Candidate 1: the rising edge of an authentication sends the touch event only

Labelled baseline on the proven loop, quick taps only: enrolled finger 2 of 10,
wrong finger 0 of 5. Every press was one frame.

The rising-edge frame costs ~700 ms because it runs the matcher twice -- event 5
and event 7 on the same image, two verdicts back. A human tap is over before a
second frame can exist at that cost. Keeping only the touch event keeps what
every recorded match followed, halves the rising frame, and may be the
difference between one frame per tap and two. It is a single variable against a
labelled baseline; if the rate drops, it comes out.

Also fixes fptrial.sh's latency column, which was all zero: busybox date has no
%N, so it reads /proc/uptime instead.
This commit is contained in:
Jorijn van der Graaf 2026-09-02 23:46:12 +02:00
commit 00925db485
3 changed files with 13 additions and 4 deletions

View file

@ -121,8 +121,8 @@ int main() {
// its press. Not to be removed without a measurement isolating it.
TouchTracker a;
auto a1 = a.Observe(true, Mode::Authenticate);
Check(a1.size() == 2 && a1[0] == Event::FingerTouched && a1[1] == Event::ImageReady,
"auth: rising edge reports touched then image-ready");
Check(a1.size() == 1 && a1[0] == Event::FingerTouched,
"auth: rising edge reports touched only (candidate 1: one matcher run)");
auto a2 = a.Observe(true, Mode::Authenticate);
Check(a2.size() == 1 && a2[0] == Event::ImageReady, "auth: a held frame still reports image-ready");
auto a3 = a.Observe(false, Mode::Authenticate);