|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +const common = require('../common'); |
| 4 | +const assert = require('assert'); |
| 5 | +const { performance } = require('perf_hooks'); |
| 6 | +const { isMainThread } = require('worker_threads'); |
| 7 | + |
| 8 | +const { nodeTiming } = performance; |
| 9 | +assert.strictEqual(nodeTiming.name, 'node'); |
| 10 | +assert.strictEqual(nodeTiming.entryType, 'node'); |
| 11 | + |
| 12 | +assert.strictEqual(nodeTiming.startTime, 0); |
| 13 | +const now = performance.now(); |
| 14 | +assert.ok(nodeTiming.duration >= now); |
| 15 | + |
| 16 | +// Check that the nodeTiming milestone values are in the correct order and greater than 0. |
| 17 | +const keys = ['nodeStart', 'v8Start', 'environment', 'bootstrapComplete']; |
| 18 | +for (let idx = 0; idx < keys.length; idx++) { |
| 19 | + if (idx === 0) { |
| 20 | + assert.ok(nodeTiming[keys[idx]] >= 0); |
| 21 | + continue; |
| 22 | + } |
| 23 | + assert.ok(nodeTiming[keys[idx]] > nodeTiming[keys[idx - 1]], `expect nodeTiming['${keys[idx]}'] > nodeTiming['${keys[idx - 1]}']`); |
| 24 | +} |
| 25 | + |
| 26 | +// loop milestones. |
| 27 | +assert.strictEqual(nodeTiming.idleTime, 0); |
| 28 | +if (isMainThread) { |
| 29 | + // Main thread does not start loop until the first tick is finished. |
| 30 | + assert.strictEqual(nodeTiming.loopStart, -1); |
| 31 | +} else { |
| 32 | + // Worker threads run the user script after loop is started. |
| 33 | + assert.ok(nodeTiming.loopStart >= nodeTiming.bootstrapComplete); |
| 34 | +} |
| 35 | +assert.strictEqual(nodeTiming.loopExit, -1); |
| 36 | + |
| 37 | +setTimeout(common.mustCall(() => { |
| 38 | + assert.ok(nodeTiming.idleTime >= 0); |
| 39 | + assert.ok(nodeTiming.idleTime + nodeTiming.loopExit <= nodeTiming.duration); |
| 40 | + assert.ok(nodeTiming.loopStart >= nodeTiming.bootstrapComplete); |
| 41 | +}, 1), 1); |
| 42 | + |
| 43 | +// Can not be wrapped in common.mustCall(). |
| 44 | +process.on('exit', () => { |
| 45 | + assert.ok(nodeTiming.loopExit > 0); |
| 46 | +}); |
0 commit comments