Skip to content

Commit

Permalink
core(fr): add lighthouseMarker timeOrigin support (#12688)
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickhulce authored Jun 24, 2021
1 parent 9dba65a commit 0de46e7
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 6 deletions.
8 changes: 7 additions & 1 deletion lighthouse-core/gather/gatherers/trace.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
*/

const FRGatherer = require('../../fraggle-rock/gather/base-gatherer.js');
const TraceProcessor = require('../../lib/tracehouse/trace-processor.js');

class Trace extends FRGatherer {
/** @type {LH.Trace} */
Expand Down Expand Up @@ -95,14 +96,19 @@ class Trace extends FRGatherer {
/**
* @param {LH.Gatherer.FRTransitionalContext} passContext
*/
async startSensitiveInstrumentation({driver}) {
async startSensitiveInstrumentation({driver, gatherMode}) {
// TODO(FR-COMPAT): read additional trace categories from overall settings?
// TODO(FR-COMPAT): check if CSS/DOM domains have been enabled in another session and warn?
await driver.defaultSession.sendCommand('Page.enable');
await driver.defaultSession.sendCommand('Tracing.start', {
categories: Trace.getDefaultTraceCategories().join(','),
options: 'sampling-frequency=10000', // 1000 is default and too slow.
});

if (gatherMode === 'timespan') {
await driver.defaultSession.sendCommand('Tracing.recordClockSyncMarker',
{syncId: TraceProcessor.TIMESPAN_MARKER_ID});
}
}

/**
Expand Down
44 changes: 39 additions & 5 deletions lighthouse-core/lib/tracehouse/trace-processor.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/

/** @typedef {Omit<LH.Artifacts.NavigationTraceTimes, 'firstContentfulPaintAllFrames'|'traceEnd'>} TraceNavigationTimesForFrame */
/** @typedef {'lastNavigationStart'|'firstResourceSendRequest'} TimeOriginDeterminationMethod */
/** @typedef {'lastNavigationStart'|'firstResourceSendRequest'|'lighthouseMarker'|'auto'} TimeOriginDeterminationMethod */
/** @typedef {Omit<LH.TraceEvent, 'name'|'args'> & {name: 'FrameCommittedInBrowser', args: {data: {frame: string, url: string, parent?: string}}}} FrameCommittedEvent */
/** @typedef {Omit<LH.TraceEvent, 'name'|'args'> & {name: 'largestContentfulPaint::Invalidate'|'largestContentfulPaint::Candidate', args: {data?: {size?: number}, frame: string}}} LCPEvent */
/** @typedef {Omit<LH.TraceEvent, 'name'|'args'> & {name: 'largestContentfulPaint::Candidate', args: {data: {size: number}, frame: string}}} LCPCandidateEvent */
Expand All @@ -39,6 +39,10 @@ const SCHEDULABLE_TASK_TITLE_ALT2 = 'ThreadControllerImpl::DoWork';
const SCHEDULABLE_TASK_TITLE_ALT3 = 'TaskQueueManager::ProcessTaskFromWorkQueue';

class TraceProcessor {
static get TIMESPAN_MARKER_ID() {
return '__lighthouseTimespanStart__';
}

/**
* @return {Error}
*/
Expand Down Expand Up @@ -67,6 +71,13 @@ class TraceProcessor {
return new Error('No FirstContentfulPaint event found');
}

/**
* @return {Error}
*/
static createNoLighthouseMarkerError() {
return new Error('No Lighthouse timespan marker event found');
}

/**
* Returns true if the event is a navigation start event of a document whose URL seems valid.
*
Expand Down Expand Up @@ -584,7 +595,7 @@ class TraceProcessor {
* @return {LH.Artifacts.ProcessedTrace}
*/
static processTrace(trace, options) {
const {timeOriginDeterminationMethod = 'lastNavigationStart'} = options || {};
const {timeOriginDeterminationMethod = 'auto'} = options || {};

// Parse the trace for our key events and sort them by timestamp. Note: sort
// *must* be stable to keep events correctly nested.
Expand Down Expand Up @@ -780,6 +791,21 @@ class TraceProcessor {
* @return {LH.TraceEvent}
*/
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.
Expand All @@ -792,12 +818,20 @@ class TraceProcessor {
return fetchStart;
}
case 'lastNavigationStart': {
// Our time origin will be the last frame navigation in the trace
const frameEvents = traceEventSubsets.frameEvents;
const navigationStart = frameEvents.filter(this._isNavigationStartOfInterest).pop();
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;
}
}
}

Expand Down
48 changes: 48 additions & 0 deletions lighthouse-core/test/fixtures/traces/timespan-trace-m91.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"traceEvents": [
{"args":{"name":"swapper"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":0,"ts":0},
{"args":{"name":"StackSamplingProfiler"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98673,"tid":11011,"ts":0},
{"args":{"name":"CrBrowserMain"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":775,"ts":0},
{"args":{"name":"NetworkService"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":53507,"ts":0},
{"args":{"name":"CrRendererMain"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98676,"tid":775,"ts":0},
{"args":{"name":"Chrome_DevToolsHandlerThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":130819,"ts":0},
{"args":{"name":"VizCompositorThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98673,"tid":44547,"ts":0},
{"args":{"name":"CrGpuMain"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98673,"tid":775,"ts":0},
{"args":{"name":"Chrome_ChildIOThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98673,"tid":34307,"ts":0},
{"args":{"name":"CacheThread_BlockFile"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":79875,"ts":0},
{"args":{"name":"Chrome_IOThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":33283,"ts":0},
{"args":{"name":"StackSamplingProfiler"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":6659,"ts":0},
{"args":{"name":"ThreadPoolServiceThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":36867,"ts":0},
{"args":{"name":"ThreadPoolServiceThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98673,"tid":35587,"ts":0},
{"args":{"name":"ThreadPoolServiceThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98676,"tid":20483,"ts":0},
{"args":{"name":"Chrome_ChildIOThread"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98676,"tid":13059,"ts":0},
{"args":{"name":"ThreadPoolForegroundWorker"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98676,"tid":11779,"ts":0},
{"args":{"name":"ThreadPoolForegroundWorker"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98676,"tid":19203,"ts":0},
{"args":{"name":"ThreadPoolForegroundWorker"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98662,"tid":63747,"ts":0},
{"args":{"name":"ThreadPoolForegroundWorker"},"cat":"__metadata","name":"thread_name","ph":"M","pid":98673,"tid":32259,"ts":0},
{"args":{"name":"Browser"},"cat":"__metadata","name":"process_name","ph":"M","pid":98662,"tid":0,"ts":0},
{"args":{"name":"GPU Process"},"cat":"__metadata","name":"process_name","ph":"M","pid":98673,"tid":0,"ts":0},
{"args":{"name":"Renderer"},"cat":"__metadata","name":"process_name","ph":"M","pid":98676,"tid":0,"ts":0},
{"args":{"uptime":"17"},"cat":"__metadata","name":"process_uptime_seconds","ph":"M","pid":98662,"tid":0,"ts":0},
{"args":{"uptime":"17"},"cat":"__metadata","name":"process_uptime_seconds","ph":"M","pid":98673,"tid":0,"ts":0},
{"args":{"uptime":"16"},"cat":"__metadata","name":"process_uptime_seconds","ph":"M","pid":98676,"tid":0,"ts":0},
{"args":{"data":{"frameTreeNodeId":2,"frames":[{"frame":"CDC7FDACD95C50606A7BC08529E7F1CD","name":"","processId":98676,"url":"https://example.com/"}],"persistentIds":true}},"cat":"disabled-by-default-devtools.timeline","name":"TracingStartedInBrowser","ph":"I","pid":98662,"s":"t","tid":775,"ts":260758704187,"tts":489667},
{"args":{},"cat":"disabled-by-default-devtools.timeline","dur":99652,"name":"RunTask","ph":"X","pid":98676,"tdur":99335,"tid":775,"ts":260760721453,"tts":144263},
{"args":{"microtask_count":1},"cat":"v8.execute","dur":66,"name":"RunMicrotasks","ph":"X","pid":98676,"tdur":67,"tid":775,"ts":260760820980,"tts":243474},
{"args":{},"cat":"disabled-by-default-devtools.timeline","dur":1004488,"name":"RunTask","ph":"X","pid":98676,"tdur":997136,"tid":775,"ts":260761324398,"tts":243766},
{"args":{},"cat":"disabled-by-default-devtools.timeline","dur":1004344,"name":"EvaluateScript","ph":"X","pid":98676,"tdur":996992,"tid":775,"ts":260761324446,"tts":243813},
{"args":{"data":{"columnNumber":1,"lineNumber":1,"notStreamedReason":"inline script","streamed":false,"url":""},"fileName":""},"cat":"v8,devtools.timeline","dur":118,"name":"v8.compile","ph":"X","pid":98676,"tdur":124,"tid":775,"ts":260761324588,"tts":243955},
{"args":{"microtask_count":3},"cat":"v8.execute","dur":1003400,"name":"RunMicrotasks","ph":"X","pid":98676,"tdur":996049,"tid":775,"ts":260761325228,"tts":244595},
{"args":{"microtask_count":3},"cat":"v8.execute","dur":103,"name":"RunMicrotasks","ph":"X","pid":98676,"tdur":102,"tid":775,"ts":260762328684,"tts":1240700},
{"args":{"snapshot":"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5OeT32+UQEueT32+Tnk99vlEBLnk99vk55Pfb5RAS55Pfb5OeT32+UQEueT32+Tnk99vlEBLnk99vlibXmNpvaY/3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/Z"},"cat":"disabled-by-default-devtools.screenshot","id":"0x1","name":"Screenshot","ph":"O","pid":98662,"tid":775,"ts":260758704433},
{"args":{"sync_id":"__lighthouseTimespanStart__"},"cat":"__metadata","name":"clock_sync","ph":"c","pid":98662,"tid":775,"ts":260759206050,"tts":491817},
{"args":{"number":16},"cat":"__metadata","name":"num_cpus","ph":"M","pid":98662,"tid":0,"ts":260762832144},
{"args":{"number":16},"cat":"__metadata","name":"num_cpus","ph":"M","pid":98673,"tid":0,"ts":260762832156},
{"args":{"number":16},"cat":"__metadata","name":"num_cpus","ph":"M","pid":98676,"tid":0,"ts":260762832161},
{"args":{"sort_index":-5},"cat":"__metadata","name":"process_sort_index","ph":"M","pid":98676,"tid":775,"ts":260762832168},
{"args":{"sort_index":-6},"cat":"__metadata","name":"process_sort_index","ph":"M","pid":98662,"tid":63747,"ts":260762832171},
{"args":{"labels":"Example Domain"},"cat":"__metadata","name":"process_labels","ph":"M","pid":98676,"tid":775,"ts":260762832171},
{"args":{"sort_index":-1},"cat":"__metadata","name":"thread_sort_index","ph":"M","pid":98676,"tid":775,"ts":260762832174},
{"args":{"sort_index":-1},"cat":"__metadata","name":"process_sort_index","ph":"M","pid":98673,"tid":32259,"ts":260762832180}
]
}
11 changes: 11 additions & 0 deletions lighthouse-core/test/lib/tracehouse/trace-processor-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const noTracingStartedTrace = require('../../fixtures/traces/no-tracingstarted-m
const preactTrace = require('../../fixtures/traces/preactjs.com_ts_of_undefined.json');
const noFMPtrace = require('../../fixtures/traces/no_fmp_event.json');
const noFCPtrace = require('../../fixtures/traces/airhorner_no_fcp.json');
const timespanTrace = require('../../fixtures/traces/timespan-trace-m91.json');
const noNavStartTrace = require('../../fixtures/traces/no_navstart_event.json');
const backgroundTabTrace = require('../../fixtures/traces/backgrounded-tab-missing-paints.json');
const lcpTrace = require('../../fixtures/traces/lcp-m78.json');
Expand Down Expand Up @@ -421,6 +422,16 @@ describe('TraceProcessor', () => {

expect(trace.timestamps.timeOrigin).toEqual(713037332092);
});

it('supports lighthouseMarker', () => {
const trace = TraceProcessor.processTrace(timespanTrace);

expect(trace.timings).toMatchObject({
traceEnd: 3626.13,
});

expect(trace.timestamps.timeOrigin).toEqual(260759206050);
});
});

describe('.processNavigation()', () => {
Expand Down
1 change: 1 addition & 0 deletions types/externs.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,7 @@ declare global {
args: {
fileName?: string;
snapshot?: string;
sync_id?: string;
beginData?: {
frame?: string;
startLine?: number;
Expand Down

0 comments on commit 0de46e7

Please sign in to comment.