| 'use strict'; |
| |
| const common = require('../common'); |
| |
| common.skipIfInspectorDisabled(); |
| common.skipIfWorker(); // https://github.com/nodejs/node/issues/22767 |
| |
| const assert = require('assert'); |
| const { performance } = require('perf_hooks'); |
| const { Session } = require('inspector'); |
| |
| const session = new Session(); |
| |
| function post(message, data) { |
| return new Promise((resolve, reject) => { |
| session.post(message, data, (err, result) => { |
| if (err) |
| reject(new Error(JSON.stringify(err))); |
| else |
| resolve(result); |
| }); |
| }); |
| } |
| |
| async function test() { |
| session.connect(); |
| |
| const events = []; |
| let tracingComplete = false; |
| session.on('NodeTracing.dataCollected', (n) => { |
| assert.ok(n && n.params && n.params.value); |
| events.push(...n.params.value); // append the events. |
| }); |
| session.on('NodeTracing.tracingComplete', () => tracingComplete = true); |
| |
| // Generate a node.perf event before tracing is enabled. |
| performance.mark('mark1'); |
| |
| const traceConfig = { includedCategories: ['node.perf'] }; |
| await post('NodeTracing.start', { traceConfig }); |
| |
| // Generate a node.perf event after tracing is enabled. This should be the |
| // mark event captured. |
| performance.mark('mark2'); |
| |
| await post('NodeTracing.stop', { traceConfig }); |
| |
| performance.mark('mark3'); |
| |
| session.disconnect(); |
| |
| assert.ok(tracingComplete); |
| |
| const marks = events.filter((t) => null !== /node\.perf\.usertim/.exec(t.cat)); |
| assert.strictEqual(marks.length, 1); |
| assert.strictEqual(marks[0].name, 'mark2'); |
| } |
| |
| test(); |