Skip to content

Commit ae9695a

Browse files
committed
ci: add count to benchmark and pass index to fn
1 parent e4e13a2 commit ae9695a

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

packages/_/benchmark/src/benchmark.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ declare const global: {
1515
const kNanosecondsPerSeconds = 1e9;
1616
const kBenchmarkIterationMaxCount = 10000;
1717
const kBenchmarkTimeoutInMsec = 5000;
18-
const kWarmupIterationCount = 10;
18+
const kWarmupIterationCount = 100;
1919
const kTopMetricCount = 5;
2020

2121

22-
function _run(fn: () => void, collector: number[]) {
22+
function _run(fn: (i: number) => void, collector: number[]) {
2323
const timeout = Date.now();
2424
// Gather the first 5 seconds runs, or kMaxNumberOfIterations runs whichever comes first
2525
// (soft timeout).
@@ -28,7 +28,7 @@ function _run(fn: () => void, collector: number[]) {
2828
i++) {
2929
// Start time.
3030
const start = process.hrtime();
31-
fn();
31+
fn(i);
3232
// Get the stop difference time.
3333
const diff = process.hrtime(start);
3434

@@ -41,13 +41,15 @@ function _run(fn: () => void, collector: number[]) {
4141
function _stats(metrics: number[]) {
4242
metrics.sort((a, b) => a - b);
4343

44-
const middle = metrics.length / 2;
44+
const count = metrics.length;
45+
const middle = count / 2;
4546
const mean = Number.isInteger(middle)
4647
? metrics[middle] : ((metrics[middle - 0.5] + metrics[middle + 0.5]) / 2);
4748
const total = metrics.reduce((acc, curr) => acc + curr, 0);
48-
const average = total / metrics.length;
49+
const average = total / count;
4950

5051
return {
52+
count: count,
5153
fastest: metrics.slice(0, kTopMetricCount),
5254
slowest: metrics.reverse().slice(0, kTopMetricCount),
5355
mean,
@@ -56,12 +58,12 @@ function _stats(metrics: number[]) {
5658
}
5759

5860

59-
export function benchmark(name: string, fn: () => void, base?: () => void) {
61+
export function benchmark(name: string, fn: (i: number) => void, base?: (i: number) => void) {
6062
it(name + ' (time in nanoseconds)', (done) => {
6163
process.nextTick(() => {
6264
for (let i = 0; i < kWarmupIterationCount; i++) {
6365
// Warm it up.
64-
fn();
66+
fn(i);
6567
}
6668

6769
const reporter = global.benchmarkReporter;

scripts/benchmark.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ declare const global: {
2727

2828

2929
interface BenchmarkResult {
30+
count: number;
3031
slowest: number[];
3132
fastest: number[];
3233
mean: number;
@@ -71,12 +72,17 @@ class BenchmarkReporter extends JasmineSpecReporter implements jasmine.CustomRep
7172
return p.substr(0, p.length - ('' + s).length) + s;
7273
}
7374

75+
const count = pad(stat.count);
7476
const fastest = stat.fastest.map(x => pad(x)).join('');
7577
const slowest = stat.slowest.map(x => pad(x)).join('');
7678
const mean = pad(Math.floor(stat.mean));
7779
const average = pad(Math.floor(stat.average));
7880
if (stat.base) {
79-
const precision = (x: number) => ('' + Math.floor(x * 100)).replace(/(\d\d)$/, '.$1');
81+
const precision = (x: number) => {
82+
x = Math.floor(x * 100);
83+
84+
return `${Math.floor(x / 100)}.${Math.floor(x / 10) % 10}${x % 10}`;
85+
};
8086
const multPad = ' ';
8187
const baseFastest = stat.base.fastest.map(x => pad(x)).join('');
8288
const baseSlowest = stat.base.slowest.map(x => pad(x)).join('');
@@ -86,6 +92,7 @@ class BenchmarkReporter extends JasmineSpecReporter implements jasmine.CustomRep
8692
const baseAverageMult = pad(precision(stat.average / stat.base.average), multPad);
8793

8894
console.log(terminal.colors.yellow(tags.indentBy(6)`
95+
count: ${count}
8996
fastest: ${fastest}
9097
(base) ${baseFastest}
9198
slowest: ${slowest}
@@ -95,6 +102,7 @@ class BenchmarkReporter extends JasmineSpecReporter implements jasmine.CustomRep
95102
`));
96103
} else {
97104
console.log(terminal.colors.yellow(tags.indentBy(6)`
105+
count: ${count}
98106
fastest: ${fastest}
99107
slowest: ${slowest}
100108
mean: ${mean}
@@ -120,12 +128,6 @@ global.benchmarkReporter = new BenchmarkReporter();
120128
runner.env.addReporter(global.benchmarkReporter);
121129

122130

123-
// Manually set exit code (needed with custom reporters)
124-
runner.onComplete((success: boolean) => {
125-
process.exitCode = success ? 0 : 1;
126-
});
127-
128-
129131
// Run the tests.
130132
const allTests =
131133
glob.sync('packages/**/*_benchmark.ts')
@@ -134,5 +136,8 @@ const allTests =
134136

135137

136138
export default function(_args: {}) {
137-
runner.execute(allTests);
139+
return new Promise(resolve => {
140+
runner.onComplete((passed: boolean) => resolve(passed ? 0 : 1));
141+
runner.execute(allTests);
142+
});
138143
}

0 commit comments

Comments
 (0)