• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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