mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
test,inspector: add heap allocation tracker test
This provides coverage for the `InspectorTimer` instances created as part of heap allocation tracking. PR-URL: https://github.com/nodejs/node/pull/26089 Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
46
test/parallel/test-inspector-heap-allocation-tracker.js
Normal file
46
test/parallel/test-inspector-heap-allocation-tracker.js
Normal file
@@ -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);
|
||||
Reference in New Issue
Block a user