1// Flags: --expose-internals 2'use strict'; 3 4const common = require('../common'); 5 6common.skipIfInspectorDisabled(); 7common.skipIfWorker(); // https://github.com/nodejs/node/issues/22767 8 9const { internalBinding } = require('internal/test/binding'); 10 11const { 12 trace: { 13 TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN: kBeforeEvent 14 } 15} = internalBinding('constants'); 16 17const { trace } = internalBinding('trace_events'); 18 19const assert = require('assert'); 20const { Session } = require('inspector'); 21 22const session = new Session(); 23 24function post(message, data) { 25 return new Promise((resolve, reject) => { 26 session.post(message, data, (err, result) => { 27 if (err) 28 reject(new Error(JSON.stringify(err))); 29 else 30 resolve(result); 31 }); 32 }); 33} 34 35async function test() { 36 session.connect(); 37 38 const events = []; 39 let tracingComplete = false; 40 session.on('NodeTracing.dataCollected', (n) => { 41 assert.ok(n && n.params && n.params.value); 42 events.push(...n.params.value); // append the events. 43 }); 44 session.on('NodeTracing.tracingComplete', () => tracingComplete = true); 45 46 trace(kBeforeEvent, 'foo', 'test1', 0, 'test'); 47 48 const traceConfig = { includedCategories: ['foo'] }; 49 await post('NodeTracing.start', { traceConfig }); 50 51 trace(kBeforeEvent, 'foo', 'test2', 0, 'test'); 52 trace(kBeforeEvent, 'bar', 'test3', 0, 'test'); 53 54 await post('NodeTracing.stop', { traceConfig }); 55 56 trace(kBeforeEvent, 'foo', 'test4', 0, 'test'); 57 session.disconnect(); 58 59 assert.ok(tracingComplete); 60 61 const marks = events.filter((t) => null !== /foo/.exec(t.cat)); 62 assert.strictEqual(marks.length, 1); 63 assert.strictEqual(marks[0].name, 'test2'); 64} 65 66test(); 67