packages/rum-core/karma.bench.conf.js (63 lines of code) (raw):

/** * MIT License * * Copyright (c) 2017-present, Elasticsearch BV * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ const { join } = require('path') const { mkdirSync, existsSync } = require('fs') const { baseConfig, prepareConfig } = require('../../dev-utils/karma') const { getWebpackConfig, BUNDLE_TYPES } = require('../../dev-utils/build') const BENCHMARKS_DIR = join(__dirname, 'test', 'benchmarks') const REPORTS_DIR = join(__dirname, 'reports') module.exports = function (config) { /** * create reports directory if it does not exist */ try { if (!existsSync(REPORTS_DIR)) { mkdirSync(REPORTS_DIR) } } catch (err) { console.error('Failed to create reports directory', err) process.exit(1) } config.set(baseConfig) const specPattern = `${BENCHMARKS_DIR}/**/*.bench.js` config.set({ files: [require.resolve('regenerator-runtime/runtime'), specPattern], webpack: getWebpackConfig(BUNDLE_TYPES.BROWSER_ESM_PROD), autoWatch: false, singleRun: true, concurrency: 1, frameworks: ['benchmark'], reporters: ['benchmark', 'benchmark-json'], plugins: [ 'karma-webpack', 'karma-benchmark', 'karma-benchmark-reporter', 'karma-benchmark-json-reporter' ], benchmarkJsonReporter: { pathToJson: `${REPORTS_DIR}/rum-core-benchmarks.json`, formatOutput(results) { const summary = results.map( ({ suite, name, mean, count, cycle, browser, hz }) => { /** * Ignore version and os in browser */ const browserName = browser.toLowerCase().split(' ')[0] return { suite, name, mean, count, cycle, browser: browserName, hz, unit: 'ops/sec' } } ) console.log( '@elastic/apm-rum-core benchmarks', JSON.stringify(summary, undefined, 2) ) return { type: 'benchmarkjs', summary } } } }) const preparedConfig = prepareConfig(config) preparedConfig.preprocessors = { [specPattern]: ['webpack'] } config.set(preparedConfig) }