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