in src/sdk/lh-trace-processor.ts [883:926]
static computeTimeOrigin(traceEventSubsets, method) {
const lastNavigationStart = () => {
// Our time origin will be the last frame navigation in the trace
const frameEvents = traceEventSubsets.frameEvents;
return frameEvents.filter(this._isNavigationStartOfInterest).pop();
};
const lighthouseMarker = () => {
const frameEvents = traceEventSubsets.keyEvents;
return frameEvents.find(
evt =>
evt.name === 'clock_sync' &&
evt.args.sync_id === TraceProcessor.TIMESPAN_MARKER_ID
);
};
switch (method) {
case 'firstResourceSendRequest': {
// Our time origin will be the timestamp of the first request that's sent in the frame.
const fetchStart = traceEventSubsets.keyEvents.find(event => {
if (event.name !== 'ResourceSendRequest') return false;
const data = event.args.data || {};
return data.frame === traceEventSubsets.mainFrameIds.frameId;
});
if (!fetchStart) throw this.createNoResourceSendRequestError();
return fetchStart;
}
case 'lastNavigationStart': {
const navigationStart = lastNavigationStart();
if (!navigationStart) throw this.createNoNavstartError();
return navigationStart;
}
case 'lighthouseMarker': {
const marker = lighthouseMarker();
if (!marker) throw this.createNoLighthouseMarkerError();
return marker;
}
case 'auto': {
const marker = lighthouseMarker() || lastNavigationStart();
if (!marker) throw this.createNoNavstartError();
return marker;
}
}
}