mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
71 lines
2.7 KiB
TypeScript
71 lines
2.7 KiB
TypeScript
// Benchmarks allow us to make changes and evaluate performance before the code gets shipped to production.
|
|
// They can be used to make performance improvements or to test impact of newly added functionality.
|
|
|
|
// Run with: yarn run ts-node --project ./config/tsconfig.benchmark.json -r tsconfig-paths/register static/app/utils/profiling/profile/profile.benchmark.ts
|
|
|
|
import benchmarkjs from 'benchmark';
|
|
|
|
import {initializeLocale} from 'sentry/bootstrap/initializeLocale';
|
|
|
|
import eventedTrace from './formats/android/trace.json';
|
|
import sampledTrace from './formats/ios/trace.json';
|
|
import jsSelfProfileTrace from './formats/jsSelfProfile/trace.json';
|
|
import nodeTrace from './formats/node/trace.json';
|
|
import typescriptTrace from './formats/typescript/trace.json';
|
|
import {importProfile} from './importProfile';
|
|
|
|
// This logs an error which is annoying to see in the outputs
|
|
initializeLocale({} as any);
|
|
|
|
// Note: You MUST import @sentry/tracing package before @sentry/profiling-node
|
|
// eslint-disable-next-line simple-import-sort/imports
|
|
import * as Sentry from '@sentry/node';
|
|
import {ProfilingIntegration} from '@sentry/profiling-node';
|
|
|
|
if (process.env.PROFILE) {
|
|
Sentry.init({
|
|
dsn: 'https://[email protected]/6625302',
|
|
integrations: [
|
|
// Add our Profilling integration
|
|
new ProfilingIntegration(),
|
|
],
|
|
debug: true,
|
|
tracesSampleRate: 1.0,
|
|
// Set sampling rate for profiling
|
|
profilesSampleRate: 1.0,
|
|
});
|
|
}
|
|
|
|
// We dont compare benchmark results, as we are testing a single version of the code, so we run this as a baseline,
|
|
// store the results somewhere locally and then compare the results with the new version of our code.
|
|
function benchmark(name: string, callback: () => void) {
|
|
const suite = new benchmarkjs.Suite();
|
|
|
|
suite
|
|
.add(name, callback, {minSamples: 50})
|
|
.on('cycle', event => {
|
|
// well, we need to see the results somewhere
|
|
// eslint-disable-next-line
|
|
console.log(event.target.toString(), (event.target.stats.mean * 1e3).toFixed(2));
|
|
})
|
|
.on('error', event => {
|
|
// If something goes wrong, fail early
|
|
throw event;
|
|
})
|
|
.on('fini');
|
|
|
|
suite.run({async: true, minSamples: 100});
|
|
}
|
|
|
|
benchmark('typescript', () => importProfile(typescriptTrace as any, '', 'flamechart'));
|
|
benchmark('js self profile', () =>
|
|
importProfile(jsSelfProfileTrace as any, '', 'flamechart')
|
|
);
|
|
benchmark('evented profile', () => importProfile(eventedTrace as any, '', 'flamechart'));
|
|
benchmark('sampled profile', () => importProfile(sampledTrace as any, '', 'flamechart'));
|
|
benchmark('sampled node profile', () =>
|
|
importProfile(nodeTrace as any, '', 'flamechart')
|
|
);
|
|
|
|
// importProfile(nodeTrace, '', 'flamechart');
|