| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const { Worker } = require('worker_threads'); |
| |
| const worker = new Worker(` |
| const { parentPort } = require('worker_threads'); |
| parentPort.on('message', () => {}); |
| `, { eval: true }); |
| |
| worker.on('online', common.mustCall(async () => { |
| { |
| const handle = await worker.startCpuProfile(); |
| JSON.parse(await handle.stop()); |
| // Stop again |
| JSON.parse(await handle.stop()); |
| } |
| |
| { |
| const handle = await worker.startCpuProfile({ |
| sampleInterval: 0.5, |
| maxBufferSize: 8, |
| }); |
| JSON.parse(await handle.stop()); |
| } |
| |
| { |
| const [handle1, handle2] = await Promise.all([ |
| worker.startCpuProfile(), |
| worker.startCpuProfile(), |
| ]); |
| const [profile1, profile2] = await Promise.all([ |
| handle1.stop(), |
| handle2.stop(), |
| ]); |
| JSON.parse(profile1); |
| JSON.parse(profile2); |
| } |
| |
| { |
| await worker.startCpuProfile(); |
| // It will be stopped automatically when the worker is terminated |
| } |
| worker.terminate(); |
| })); |
| |
| worker.once('exit', common.mustCall(async () => { |
| assert.throws( |
| () => worker.startCpuProfile({ maxBufferSize: 0 }), |
| common.expectsError({ |
| code: 'ERR_OUT_OF_RANGE', |
| })); |
| await assert.rejects(worker.startCpuProfile(), { |
| code: 'ERR_WORKER_NOT_RUNNING' |
| }); |
| })); |