1'use strict'; 2 3const common = require('../common'); 4const assert = require('assert'); 5const { 6 createHistogram, 7 monitorEventLoopDelay, 8} = require('perf_hooks'); 9const { MessageChannel } = require('worker_threads'); 10 11{ 12 const h = createHistogram(); 13 14 assert.strictEqual(h.min, 9223372036854776000); 15 assert.strictEqual(h.max, 0); 16 assert.strictEqual(h.exceeds, 0); 17 assert(Number.isNaN(h.mean)); 18 assert(Number.isNaN(h.stddev)); 19 20 h.record(1); 21 22 [false, '', {}, undefined, null].forEach((i) => { 23 assert.throws(() => h.record(i), { 24 code: 'ERR_INVALID_ARG_TYPE' 25 }); 26 }); 27 assert.throws(() => h.record(0, Number.MAX_SAFE_INTEGER + 1), { 28 code: 'ERR_OUT_OF_RANGE' 29 }); 30 31 assert.strictEqual(h.min, 1); 32 assert.strictEqual(h.max, 1); 33 assert.strictEqual(h.exceeds, 0); 34 assert.strictEqual(h.mean, 1); 35 assert.strictEqual(h.stddev, 0); 36 37 assert.strictEqual(h.percentile(1), 1); 38 assert.strictEqual(h.percentile(100), 1); 39 40 const mc = new MessageChannel(); 41 mc.port1.onmessage = common.mustCall(({ data }) => { 42 assert.strictEqual(h.min, 1); 43 assert.strictEqual(h.max, 1); 44 assert.strictEqual(h.exceeds, 0); 45 assert.strictEqual(h.mean, 1); 46 assert.strictEqual(h.stddev, 0); 47 48 data.record(2n); 49 data.recordDelta(); 50 51 assert.strictEqual(h.max, 2); 52 53 mc.port1.close(); 54 }); 55 mc.port2.postMessage(h); 56} 57 58{ 59 const e = monitorEventLoopDelay(); 60 e.enable(); 61 const mc = new MessageChannel(); 62 mc.port1.onmessage = common.mustCall(({ data }) => { 63 assert(typeof data.min, 'number'); 64 assert(data.min > 0); 65 assert.strictEqual(data.disable, undefined); 66 assert.strictEqual(data.enable, undefined); 67 mc.port1.close(); 68 }); 69 setTimeout(() => mc.port2.postMessage(e), 100); 70} 71