I'm collecting data using the Navigation Timing API.
Specifically, these four metrics:
// Time spent during redirection
var redirectTime = performance.timing.redirectEnd - performance.timing.redirectStart;
// DNS query time
var lookupDomainTime = performance.timing.domainLookupEnd - performance.timing.domainLookupStart;
// TCP connection time
var connectTime = performance.timing.connectEnd - performance.timing.connectStart;
// Time to first paint, in milliseconds.
var firstPaintTime = window.chrome.loadTimes().firstPaintTime * 1000 - performance.timing.navigationStart;
I'm finding that on a regular basis redirectTime + lookupDomainTime + connectTime > firstPaintTime. If Chrome's first paint metric is calculated from navigationStart, then this means the first paint happens before any HTML has been downloaded. That seems impossible.
If firstPaintTime isn't calculated from window.performance.timing.navigationStart, from what point is it calculated?