demo · v130

Ink Latency Probe

Chrome 130 removes DelegatedInkTrailPresenter.expectedImprovement because it's fingerprinting entropy with no real developer value — "all improvement is good improvement." This demo draws ink on a canvas using real pointer events, measures actual latency with PerformanceObserver({type:"event"}), and shows why you should just use the Delegated Ink API unconditionally rather than reading the removed property.

Checking DelegatedInkTrailPresenter API…
Draw here — touch/mouse/stylus all work
0
Pointer events
Median latency (ms)
p95 latency (ms)
Delegated ink active
Latency distribution (last 60 events, green <16ms, amber <32ms, red ≥32ms):

expectedImprovement removed in Chrome 130

presenter.expectedImprovement — removed (fingerprinting vector, no real value)

Replacement pattern (Chrome 130+):
Don't check expectedImprovement. Just call requestPresenter().
The OS-compositor wet-ink path always runs when available.
PerformanceObserver({type:"event"}) gives real latency data.
Draw on the canvas to see latency measurements.
// Chrome 130: don't read expectedImprovement — just use the API
const presenter = await navigator.ink.requestPresenter({ presentationArea: canvas });

canvas.addEventListener('pointermove', e => {
  const style = new InkTrailStyle();
  style.color  = '#1a1a1a';
  style.diameter = 3;

  // Delegate wet-ink rendering to the OS compositor
  presenter.updateInkTrailStartPoint(e, style);

  // Measure actual latency instead
  // (PerformanceObserver type:"event" gives this for free)
});

// DON'T do this (removed in Chrome 130):
// if (presenter.expectedImprovement > 10) { ... }

see also