• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const common = require('../common');
4
5common.skipIfInspectorDisabled();
6common.skipIfWorker(); // https://github.com/nodejs/node/issues/22767
7
8const assert = require('assert');
9const { performance } = require('perf_hooks');
10const { Session } = require('inspector');
11
12const session = new Session();
13
14function post(message, data) {
15  return new Promise((resolve, reject) => {
16    session.post(message, data, (err, result) => {
17      if (err)
18        reject(new Error(JSON.stringify(err)));
19      else
20        resolve(result);
21    });
22  });
23}
24
25async function test() {
26  session.connect();
27
28  const events = [];
29  let tracingComplete = false;
30  session.on('NodeTracing.dataCollected', (n) => {
31    assert.ok(n && n.params && n.params.value);
32    events.push(...n.params.value);  // append the events.
33  });
34  session.on('NodeTracing.tracingComplete', () => tracingComplete = true);
35
36  // Generate a node.perf event before tracing is enabled.
37  performance.mark('mark1');
38
39  const traceConfig = { includedCategories: ['node.perf'] };
40  await post('NodeTracing.start', { traceConfig });
41
42  // Generate a node.perf event after tracing is enabled. This should be the
43  // mark event captured.
44  performance.mark('mark2');
45
46  await post('NodeTracing.stop', { traceConfig });
47
48  performance.mark('mark3');
49
50  session.disconnect();
51
52  assert.ok(tracingComplete);
53
54  const marks = events.filter((t) => null !== /node\.perf\.usertim/.exec(t.cat));
55  assert.strictEqual(marks.length, 1);
56  assert.strictEqual(marks[0].name, 'mark2');
57}
58
59test();
60