• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* eslint-disable node-core/require-common-first, node-core/required-modules */
2
3'use strict';
4
5require('./');
6const fs = require('fs');
7const path = require('path');
8const assert = require('assert');
9
10function getCpuProfiles(dir) {
11  const list = fs.readdirSync(dir);
12  return list
13    .filter((file) => file.endsWith('.cpuprofile'))
14    .map((file) => path.join(dir, file));
15}
16
17function getFrames(file, suffix) {
18  const data = fs.readFileSync(file, 'utf8');
19  const profile = JSON.parse(data);
20  const frames = profile.nodes.filter((i) => {
21    const frame = i.callFrame;
22    return frame.url.endsWith(suffix);
23  });
24  return { frames, nodes: profile.nodes };
25}
26
27function verifyFrames(output, file, suffix) {
28  const { frames, nodes } = getFrames(file, suffix);
29  if (frames.length === 0) {
30    // Show native debug output and the profile for debugging.
31    console.log(output.stderr.toString());
32    console.log(nodes);
33  }
34  assert.notDeepStrictEqual(frames, []);
35}
36
37// We need to set --cpu-interval to a smaller value to make sure we can
38// find our workload in the samples. 50us should be a small enough sampling
39// interval for this.
40const kCpuProfInterval = 50;
41const env = {
42  ...process.env,
43  NODE_DEBUG_NATIVE: 'INSPECTOR_PROFILER'
44};
45
46module.exports = {
47  getCpuProfiles,
48  kCpuProfInterval,
49  env,
50  getFrames,
51  verifyFrames
52};
53