[examples] add routes to access v8 profiling (#155956)

Adds routes to run v8 profiling tools, when running the examples plugins
via `--run-examples`

See the included README.md for more info
This commit is contained in:
Patrick Mueller 2023-06-30 08:42:38 -04:00 committed by GitHub
parent b12238bac8
commit 1f3426942c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 547 additions and 0 deletions

View file

@ -0,0 +1,35 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import { Session } from './session';
interface StartProfilingArgs {
samplingInterval: number;
includeObjectsCollectedByMajorGC: boolean;
includeObjectsCollectedByMinorGC: boolean;
}
// Start a new profile, resolves to a function to stop the profile and resolve
// the profile data.
export async function startProfiling(
session: Session,
args: StartProfilingArgs
): Promise<() => any> {
session.logger.info(`starting heap profile with args: ${JSON.stringify(args)}`);
await session.post('Profiler.enable');
await session.post('HeapProfiler.enable');
await session.post('HeapProfiler.startSampling', args);
// returned function which stops the profile and resolves to the profile data
return async function stopProfiling() {
session.logger.info('stopping heap profile');
const result: any = await session.post('HeapProfiler.stopSampling');
return result.profile;
};
}