From ce1cfd4a30fef5023721233a391ce7ea782c55ed Mon Sep 17 00:00:00 2001 From: Brendan Kenny Date: Wed, 31 May 2017 16:21:04 -0700 Subject: [PATCH] use stable sort for trace events --- lighthouse-core/gather/computed/trace-of-tab.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lighthouse-core/gather/computed/trace-of-tab.js b/lighthouse-core/gather/computed/trace-of-tab.js index ca51b977b9d9..55eb0724850d 100644 --- a/lighthouse-core/gather/computed/trace-of-tab.js +++ b/lighthouse-core/gather/computed/trace-of-tab.js @@ -41,7 +41,8 @@ class TraceOfTab extends ComputedArtifact { * @return {!{processEvents: !Array, startedInPageEvt: TraceEvent, navigationStartEvt: TraceEvent, firstContentfulPaintEvt: TraceEvent, firstMeaningfulPaintEvt: TraceEvent}} */ compute_(trace) { - // Parse the trace for our key events and sort them by timestamp. + // Parse the trace for our key events and sort them by timestamp. Note: sort + // *must* be stable to keep events correctly nested. const keyEvents = trace.traceEvents .filter(e => { return e.cat.includes('blink.user_timing') || @@ -49,7 +50,7 @@ class TraceOfTab extends ComputedArtifact { e.cat.includes('devtools.timeline') || e.name === 'TracingStartedInPage'; }) - .sort((event0, event1) => event0.ts - event1.ts); + .stableSort((event0, event1) => event0.ts - event1.ts); // The first TracingStartedInPage in the trace is definitely our renderer thread of interest // Beware: the tracingStartedInPage event can appear slightly after a navigationStart @@ -94,9 +95,10 @@ class TraceOfTab extends ComputedArtifact { ); // subset all trace events to just our tab's process (incl threads other than main) + // stable-sort events to keep them correctly nested. const processEvents = trace.traceEvents .filter(e => e.pid === startedInPageEvt.pid) - .sort((event0, event1) => event0.ts - event1.ts); + .stableSort((event0, event1) => event0.ts - event1.ts); const traceEnd = trace.traceEvents.reduce((max, evt) => { return max.ts > evt.ts ? max : evt;