Skip to content

Commit 8a485ef

Browse files
committed
perf tests: show timings of different layout steps
1 parent c440e11 commit 8a485ef

3 files changed

Lines changed: 54 additions & 9 deletions

File tree

examples/perf-1.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as flow from 'dropflow';
22
import parse from 'dropflow/parse.js';
33
import fs from 'fs';
44
import {createCanvas} from 'canvas';
5-
import {bench, run} from 'mitata';
5+
import {bench, run, do_not_optimize} from 'mitata';
66

77
const p = (p: string) => new URL(`../assets/${p}`, import.meta.url);
88
flow.fonts.add(flow.createFaceFromTablesSync(p('Arimo/Arimo-Bold.ttf')));
@@ -54,12 +54,26 @@ ctx.clearRect(0, 0, canvas.width, canvas.height);
5454
flow.paintToCanvas(blockContainer, ctx);
5555
fs.writeFileSync(new URL('perf-1.png', import.meta.url), canvas.toBuffer());
5656

57-
bench('10 paragraphs generate, layout, and paint', () => {
57+
bench('altogether', () => {
5858
const blockContainer = flow.generate(rootElement);
5959
flow.clearWordCache();
6060
flow.layout(blockContainer, canvas.width, canvas.height);
6161
ctx.clearRect(0, 0, canvas.width, canvas.height);
6262
flow.paintToCanvas(blockContainer, ctx);
63-
});
63+
}).gc('inner');
64+
65+
bench('generate', () => {
66+
do_not_optimize(flow.generate(rootElement));
67+
}).gc('inner');
68+
69+
bench('layout', () => {
70+
flow.clearWordCache();
71+
flow.layout(blockContainer, canvas.width, canvas.height);
72+
}).gc('inner');
73+
74+
bench('paint', () => {
75+
ctx.clearRect(0, 0, canvas.width, canvas.height);
76+
flow.paintToCanvas(blockContainer, ctx);
77+
}).gc('inner');
6478

6579
await run();

examples/perf-2.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as flow from 'dropflow';
22
import parse from 'dropflow/parse.js';
33
import fs from 'fs';
44
import {createCanvas} from 'canvas';
5-
import {bench, run} from 'mitata';
5+
import {bench, run, do_not_optimize} from 'mitata';
66

77
const p = (p: string) => new URL(`../assets/${p}`, import.meta.url);
88
flow.fonts.add(flow.createFaceFromTablesSync(p('Arimo/Arimo-Bold.ttf')));
@@ -1917,12 +1917,26 @@ flow.paintToCanvas(blockContainer, ctx);
19171917

19181918
fs.writeFileSync(new URL('perf-2.png', import.meta.url), canvas.toBuffer());
19191919

1920-
bench('10 paragraphs generate, layout, and paint', () => {
1920+
bench('altogether', () => {
19211921
const blockContainer = flow.generate(rootElement);
19221922
flow.clearWordCache();
19231923
flow.layout(blockContainer, 800, 28696);
19241924
ctx.clearRect(0, 0, 800 , 28696 );
19251925
flow.paintToCanvas(blockContainer, ctx);
1926-
});
1926+
}).gc('inner');
1927+
1928+
bench('generate', () => {
1929+
do_not_optimize(flow.generate(rootElement));
1930+
}).gc('inner');
1931+
1932+
bench('layout', () => {
1933+
flow.clearWordCache();
1934+
flow.layout(blockContainer, 800, 28696);
1935+
}).gc('inner');
1936+
1937+
bench('paint', () => {
1938+
ctx.clearRect(0, 0, 800 , 28696 );
1939+
flow.paintToCanvas(blockContainer, ctx);
1940+
}).gc('inner');
19271941

19281942
await run();

examples/perf-3.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as flow from 'dropflow';
22
import fs from 'fs';
33
import {createCanvas} from 'canvas';
4-
import {bench, run} from 'mitata';
4+
import {bench, run, do_not_optimize} from 'mitata';
55

66
const p = (p: string) => new URL(`../assets/${p}`, import.meta.url);
77
flow.fonts.add(flow.createFaceFromTablesSync(p('Roboto/Roboto-Regular.ttf')));
@@ -31,13 +31,30 @@ flow.layout(blockContainer, 100, 20);
3131
flow.paintToCanvas(blockContainer, ctx);
3232
fs.writeFileSync(new URL('perf-3.png', import.meta.url), canvas.toBuffer());
3333

34-
bench('generate and layout one random word', () => {
34+
bench('altogether', () => {
3535
const html = flow.dom(
3636
flow.h('html', {style}, words[Math.floor(Math.random() * words.length)])
3737
);
3838
const blockContainer = flow.generate(html);
3939
flow.clearWordCache();
4040
flow.layout(blockContainer, 100, 20);
41-
});
41+
}).gc('inner');
42+
43+
bench('dom', () => {
44+
const html = flow.dom(
45+
flow.h('html', {style}, words[Math.floor(Math.random() * words.length)])
46+
);
47+
do_not_optimize(html);
48+
}).gc('inner');
49+
50+
bench('generate', () => {
51+
const blockContainer = flow.generate(html);
52+
do_not_optimize(blockContainer);
53+
}).gc('inner');
54+
55+
bench('layout', () => {
56+
flow.clearWordCache();
57+
flow.layout(blockContainer, 100, 20);
58+
}).gc('inner');
4259

4360
await run();

0 commit comments

Comments
 (0)