detached a925684

test(daemon): include fixture setup in benchmark calibration

commit
a925684351372157ea88050536be6c906f60e256
author
brice · · 2026-07-24 04:46 UTC
parent
7538f61
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +8 -7
M internal/usecase/daemon/performance_benchmark_test.go +8 -7
@@ -540,15 +540,16 @@ func benchmarkIncrementalSnapshotRepository(b *testing.B, scenario snapshotBench
540540 b.ResetTimer()
541541 for operation := 0; b.Loop(); operation++ {
542542 func() {
543- // A new fixture is deliberately outside the timed region. It gives every
544- // iteration the same filesystem state: initial has no generation,
545- // unchanged/visible/tail/sealed begin after one persisted generation.
546- // Reusing one fixture would eventually turn a tail into a sealed chunk
547- // and dilute initial-write bytes over later idempotent publications.
548- b.StopTimer()
543+ // A new fixture gives every iteration the same filesystem state: initial
544+ // has no generation, while changed scenarios begin after one persisted
545+ // generation. Keep its expensive 10k-row construction timed so benchmark
546+ // calibration accounts for real wall time instead of scheduling thousands
547+ // of hidden setup iterations.
548+ //
549549 // b.Cleanup retains callbacks until the sub-benchmark ends; deferring an
550- // explicit close avoids retaining every 10k-row fixture and OOM.
550+ // explicit close avoids retaining every fixture and OOM.
551551 fixture := newPerformanceFixtureWithCleanup(b, performanceConfig{size: scenario.size, panes: 1, historyRows: scenario.historyRows}, false)
552+ b.StopTimer()
552553 defer func() {
553554 b.StopTimer()
554555 if err := fixture.close(); err != nil {
@@ -540,15 +540,16 @@ func benchmarkIncrementalSnapshotRepository(b *testing.B, scenario snapshotBench
540 b.ResetTimer()540 b.ResetTimer()
541 for operation := 0; b.Loop(); operation++ {541 for operation := 0; b.Loop(); operation++ {
542 func() {542 func() {
543- // A new fixture is deliberately outside the timed region. It gives every543+ // A new fixture gives every iteration the same filesystem state: initial
544- // iteration the same filesystem state: initial has no generation,544+ // has no generation, while changed scenarios begin after one persisted
545- // unchanged/visible/tail/sealed begin after one persisted generation.545+ // generation. Keep its expensive 10k-row construction timed so benchmark
546- // Reusing one fixture would eventually turn a tail into a sealed chunk546+ // calibration accounts for real wall time instead of scheduling thousands
547- // and dilute initial-write bytes over later idempotent publications.547+ // of hidden setup iterations.
548- b.StopTimer()548+ //
549 // b.Cleanup retains callbacks until the sub-benchmark ends; deferring an549 // b.Cleanup retains callbacks until the sub-benchmark ends; deferring an
550- // explicit close avoids retaining every 10k-row fixture and OOM.550+ // explicit close avoids retaining every fixture and OOM.
551 fixture := newPerformanceFixtureWithCleanup(b, performanceConfig{size: scenario.size, panes: 1, historyRows: scenario.historyRows}, false)551 fixture := newPerformanceFixtureWithCleanup(b, performanceConfig{size: scenario.size, panes: 1, historyRows: scenario.historyRows}, false)
552+ b.StopTimer()
552 defer func() {553 defer func() {
553 b.StopTimer()554 b.StopTimer()
554 if err := fixture.close(); err != nil {555 if err := fixture.close(); err != nil {

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 13

↑↓ moveenter openesc close