feat(jest-core): Add performance markers around significant lifecycle events by robhogan · Pull Request #13859 · jestjs/jest (original) (raw)
I'd like to upstream some of the work we've been doing over in Metro to improve startup times (particularly with an overhaul of jest-haste-map that started by forking it), and possibly carve out some time to optimise other areas of Jest startup. A first step (especially to get some buy-in at Meta!) is instrumentation - this PR is a stab at adding some key markers via the standard global performance API.
I'm not wedded to this implementation - open to bikeshedding about labels, abstraction, or if there's a pre-existing Jest instrumentation pattern I'd missed, but I'm particularly looking for some way to time the startup independently of running tests.
Running Jest programmatically in a thin wrapper allows performance data to be gathered:
[
PerformanceMark {
name: 'jest/runCLI:start',
entryType: 'mark',
startTime: 179.9593139886856,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/buildContextsAndHasteMaps:start',
entryType: 'mark',
startTime: 269.55708903074265,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/buildContextsAndHasteMaps:end',
entryType: 'mark',
startTime: 1525.8082609772682,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/getTestRunData:start',
entryType: 'mark',
startTime: 1535.9708949923515,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/getTestRunData:end',
entryType: 'mark',
startTime: 2911.5280399918556,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/globalSetup:start',
entryType: 'mark',
startTime: 2928.4168980121613,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/globalSetup:end',
entryType: 'mark',
startTime: 2928.6306880116463,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/scheduleAndRun:start',
entryType: 'mark',
startTime: 2938.5601339936256,
duration: 0,
detail: { numTests: 1 }
},
PerformanceMark {
name: 'jest/scheduleAndRun:start',
entryType: 'mark',
startTime: 5480.210482001305,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/cacheResults:start',
entryType: 'mark',
startTime: 5480.292959034443,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/cacheResults:end',
entryType: 'mark',
startTime: 5480.848489999771,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/globalTeardown:start',
entryType: 'mark',
startTime: 5480.870894014835,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/globalTeardown:end',
entryType: 'mark',
startTime: 5480.897032022476,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/processResults:start',
entryType: 'mark',
startTime: 5480.90157699585,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/processResults:end',
entryType: 'mark',
startTime: 5481.04110699892,
duration: 0,
detail: null
},
PerformanceMark {
name: 'jest/runCLI:end',
entryType: 'mark',
startTime: 5481.130716025829,
duration: 0,
detail: null
}
]