SDK timing probe Fingerprint Pro SEON

Instrumented build. Every browser API both agents touch is wrapped with high-resolution timestamps, and the log renders on screen — no devtools needed inside a webview.

Instrumentation

Attribution comes from the call stack (agent script URL) and falls back to which agents are in flight. Work inside a Worker cannot be patched from the page — worker spans are bounded by new Worker → first message → terminate.

FP configuration

idle

SEON configuration

idle

Scenarios

idle

Offset sweep — when in FP's run does the collision happen

offsetSEONΔ vs soloFPwalllongest SEON stall

If only a narrow band of offsets is slow, that band is the phase of FP's run that holds the contended resource — the single most useful clue for a bug report.

Baselines

FP solo
SEON solo
SEON worst in case 3
case 3 penalty

Runs

#casewallFPstart/getΔFP SEONΔSEONtimelinenotes

Stall analysis — where SEON waited, and what FP was doing

stall @lengthSEON beforeSEON afterconcurrent FP / system activity

Run a scenario, then pick it here.

Per-API delta — selected run vs SEON-solo baseline

APIactorcallstotalmax baseline totalbaseline maxΔ max

Run case 2 (SEON solo) first — it sets the baseline the deltas are measured against.

Isolation micro-probes — which native resource is serialized

These call the suspect APIs directly, first alone and then offset ms after Fingerprint's get() starts — the exact condition that breaks case 3. Whichever row blows up is the resource the two agents are fighting over, and it does not depend on SEON internals at all.

probesoloduring FPΔΔ%note
idle

Event log

FP SEON both page blob slow only (>20ms)
tΔactorkindapimsdetail

Fingerprint Pro config as found in Plaid Link's flink.js
{ apiKey: "ENBtQILE9DAzCqo0tmlt", region: "us",
  endpoints: [ location.origin + "/e265wpihyb/", "https://f.plaid.com" ],
  worker: new Worker(...), aggressiveOptimization: true,
  extendedSignalCollection: true, modules: [ makeValidationModule() ] }
agent.get({ linkedId })