From f4bd994387108865254377071a8ea98aac0f40d9 Mon Sep 17 00:00:00 2001 From: Okiki Ojo Date: Wed, 11 Mar 2026 02:26:57 -0400 Subject: [PATCH] bench(tree): add benchmarks for tree materialization performance Signed-off-by: Okiki Ojo --- tree_builder_bench.ts | 48 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tree_builder_bench.ts diff --git a/tree_builder_bench.ts b/tree_builder_bench.ts new file mode 100644 index 0000000..8e13c1e --- /dev/null +++ b/tree_builder_bench.ts @@ -0,0 +1,48 @@ +/** + * Benchmarks for tree materialization. + * + * @module bench + */ +// deno-lint-ignore-file no-import-prefix no-unversioned-import + +import { bench, do_not_optimize, run, summary } from 'npm:mitata'; + +import { + createOutlineTreeBuildFixture, + createTreeBuildFixture, + cycleInputs, + drainBuildTreeFromEvents, + drainBuildTreeFromOutline, + SAME_SIZE_MIXED_TEXT, + SYNTHETIC_ARTICLE_INPUTS, +} from './_test_utils/perf_fixtures.ts'; + +const SAME_SIZE_TREE_FIXTURE = createTreeBuildFixture(SAME_SIZE_MIXED_TEXT); +const SAME_SIZE_OUTLINE_TREE_FIXTURE = createOutlineTreeBuildFixture(SAME_SIZE_MIXED_TEXT); + +const TREE_BUILD_FIXTURES = SYNTHETIC_ARTICLE_INPUTS.map(createTreeBuildFixture); +const OUTLINE_TREE_BUILD_FIXTURES = SYNTHETIC_ARTICLE_INPUTS.map(createOutlineTreeBuildFixture); +const nextTreeBuildFixture = cycleInputs(TREE_BUILD_FIXTURES); +const nextOutlineTreeBuildFixture = cycleInputs(OUTLINE_TREE_BUILD_FIXTURES); + +summary(() => { + bench('buildTree: same-size mixed (~8 KB)', () => { + do_not_optimize(drainBuildTreeFromEvents(SAME_SIZE_TREE_FIXTURE)); + }).gc('inner'); + + bench('buildTree(outline): same-size mixed (~8 KB)', () => { + do_not_optimize(drainBuildTreeFromOutline(SAME_SIZE_OUTLINE_TREE_FIXTURE)); + }).gc('inner'); +}); + +summary(() => { + bench('buildTree: synthetic article (~35-45 KB)', () => { + do_not_optimize(drainBuildTreeFromEvents(nextTreeBuildFixture())); + }).gc('inner'); + + bench('buildTree(outline): synthetic article (~35-45 KB)', () => { + do_not_optimize(drainBuildTreeFromOutline(nextOutlineTreeBuildFixture())); + }).gc('inner'); +}); + +await run(); \ No newline at end of file -- 2.51.2