Skip to content

Commit

Permalink
test,inspector: add heap allocation tracker test
Browse files Browse the repository at this point in the history
This provides coverage for the `InspectorTimer` instances
created as part of heap allocation tracking.

PR-URL: #26089
Reviewed-By: Eugene Ostroukhov <[email protected]>
Reviewed-By: James M Snell <[email protected]>
  • Loading branch information
addaleax authored and rvagg committed Feb 28, 2019
1 parent 8881c0b commit fbf6dd5
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions test/parallel/test-inspector-heap-allocation-tracker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
'use strict';
const common = require('../common');

common.skipIfInspectorDisabled();

const assert = require('assert');
const inspector = require('inspector');
const stream = require('stream');
const { Worker, workerData } = require('worker_threads');

const session = new inspector.Session();
session.connect();
session.post('HeapProfiler.enable');
session.post('HeapProfiler.startTrackingHeapObjects',
{ trackAllocations: true });

// Perform some silly heap allocations for the next 100 ms.
const interval = setInterval(() => {
new stream.PassThrough().end('abc').on('data', common.mustCall());
}, 1);

setTimeout(() => {
clearInterval(interval);

// Once the main test is done, we re-run it from inside a Worker thread
// and stop early, as that is a good way to make sure the timer handles
// internally created by the inspector are cleaned up properly.
if (workerData === 'stopEarly')
process.exit();

let data = '';
session.on('HeapProfiler.addHeapSnapshotChunk',
common.mustCallAtLeast((event) => {
data += event.params.chunk;
}));

// TODO(addaleax): Using `{ reportProgress: true }` crashes the process
// because the progress indication event would mean calling into JS while
// a heap snapshot is being taken, which is forbidden.
// What can we do about that?
session.post('HeapProfiler.stopTrackingHeapObjects');

assert(data.includes('PassThrough'), data);

new Worker(__filename, { workerData: 'stopEarly' });
}, 100);

0 comments on commit fbf6dd5

Please sign in to comment.