/* eslint-disable node-core/require-common-first, node-core/required-modules */ 'use strict'; require('./'); const fs = require('fs'); const path = require('path'); const assert = require('assert'); function getCpuProfiles(dir) { const list = fs.readdirSync(dir); return list .filter((file) => file.endsWith('.cpuprofile')) .map((file) => path.join(dir, file)); } function getFrames(file, suffix) { const data = fs.readFileSync(file, 'utf8'); const profile = JSON.parse(data); const frames = profile.nodes.filter((i) => { const frame = i.callFrame; return frame.url.endsWith(suffix); }); return { frames, nodes: profile.nodes }; } function verifyFrames(output, file, suffix) { const { frames, nodes } = getFrames(file, suffix); if (frames.length === 0) { // Show native debug output and the profile for debugging. console.log(output.stderr.toString()); console.log(nodes); } assert.notDeepStrictEqual(frames, []); } // We need to set --cpu-interval to a smaller value to make sure we can // find our workload in the samples. 50us should be a small enough sampling // interval for this. const kCpuProfInterval = 50; const env = { ...process.env, NODE_DEBUG_NATIVE: 'INSPECTOR_PROFILER' }; module.exports = { getCpuProfiles, kCpuProfInterval, env, getFrames, verifyFrames };