Skip to content

perf: harden runtime performance and diagnostics - #410

Merged
jongio merged 3 commits into
mainfrom
perf/performance-hardening
Aug 17, 2026
Merged

jongio merged 3 commits into
mainfrom
perf/performance-hardening

Conversation

@jongio

@jongio jongio commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Summary

  • move file-tree and preview loading off the Bubble Tea update path with stale-result protection
  • cache repeated chat and panel rendering while preserving invalidation behavior
  • bound word-diff work, toast timers, profiling lifecycle, and heap diagnostics
  • expand performance benchmarks and regression coverage
  • update the Go toolchain requirement to 1.26.6

Validation

  • mage preflight
  • Windows and WSL test suites
  • race detector
  • Windows and Linux lint
  • vulnerability scan
  • benchmark regression checks
  • install verification

jongio added 2 commits August 17, 2026 07:57
Add shared regression workloads, bound runtime resources, remove quadratic and repeated rendering work, move blocking panel operations off the update path, and strengthen profiling and leak diagnostics.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 68e8c4bf-5916-4bd0-bc26-b7b1aeb2a834
Retain the audit manifest locally while excluding the unpublished tool name from the pull request.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 68e8c4bf-5916-4bd0-bc26-b7b1aeb2a834
@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: linux-amd64

📊 Results vs main (same-runner) , click to expand
goos: linux
goarch: amd64
pkg: github.com/jongio/grut/internal/ai
cpu: AMD EPYC 7763 64-Core Processor                
                                       │ bench-baseline.txt │          bench-current.txt          │
                                       │       sec/op       │    sec/op     vs base               │
RedactContent/small_500B-4                      211.1µ ± 1%   118.0µ ± 52%  -44.10% (p=0.002 n=6)
RedactContent/medium_5KB-4                      3.563m ± 2%   1.568m ±  1%  -56.00% (p=0.002 n=6)
RedactContent/large_50KB-4                      38.82m ± 5%   17.08m ±  1%  -55.99% (p=0.002 n=6)
RedactContent_NoMatch/small_500B-4              239.7µ ± 3%   163.2µ ±  6%  -31.90% (p=0.002 n=6)
RedactContent_NoMatch/medium_5KB-4              2.720m ± 2%   1.892m ±  3%  -30.46% (p=0.002 n=6)
RedactContent_NoMatch/large_50KB-4              29.13m ± 1%   20.98m ±  4%  -27.96% (p=0.002 n=6)
ShouldExcludeFile/match_builtin-4               68.02n ± 1%   68.62n ±  1%        ~ (p=0.558 n=6)
ShouldExcludeFile/match_user_pattern-4          2.896µ ± 0%   2.897µ ±  0%        ~ (p=0.736 n=6)
ShouldExcludeFile/no_match-4                    2.013µ ± 2%   2.008µ ±  0%        ~ (p=0.190 n=6)
NewRedactor-4                                116274.5n ± 1%   799.5n ±  1%  -99.31% (p=0.002 n=6)
geomean                                         174.1µ        76.12µ        -56.27%

                                       │ bench-baseline.txt │             bench-current.txt             │
                                       │        B/op        │     B/op       vs base                    │
RedactContent/small_500B-4                 5.936Ki ±   0%     2.880Ki ±  0%   -51.47% (p=0.002 n=6)
RedactContent/medium_5KB-4                122.56Ki ±   0%     36.29Ki ±  0%   -70.39% (p=0.002 n=6)
RedactContent/large_50KB-4                1607.5Ki ±   0%     370.2Ki ±  0%   -76.97% (p=0.002 n=6)
RedactContent_NoMatch/small_500B-4           7.000 ±    ?       0.000 ±   ?  -100.00% (p=0.026 n=6)
RedactContent_NoMatch/medium_5KB-4           51.50 ± 257%       76.00 ± 99%         ~ (p=0.900 n=6)
RedactContent_NoMatch/large_50KB-4           97.00 ±  87%      123.00 ± 93%         ~ (p=0.396 n=6)
ShouldExcludeFile/match_builtin-4            0.000 ±   0%       0.000 ±  0%         ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_user_pattern-4       0.000 ±   0%       0.000 ±  0%         ~ (p=1.000 n=6) ¹
ShouldExcludeFile/no_match-4                 0.000 ±   0%       0.000 ±  0%         ~ (p=1.000 n=6) ¹
NewRedactor-4                            153.570Ki ±   0%     1.320Ki ±  0%   -99.14% (p=0.002 n=6)
geomean                                                   ²                  ?                      ² ³
¹ all samples are equal
² summaries must be >0 to compute geomean
³ ratios must be >0 to compute geomean

                                       │ bench-baseline.txt │          bench-current.txt          │
                                       │     allocs/op      │ allocs/op   vs base                 │
RedactContent/small_500B-4                     25.00 ± 0%     12.00 ± 0%  -52.00% (p=0.002 n=6)
RedactContent/medium_5KB-4                    104.00 ± 0%     60.00 ± 0%  -42.31% (p=0.002 n=6)
RedactContent/large_50KB-4                     585.0 ± 1%     483.0 ± 0%  -17.44% (p=0.002 n=6)
RedactContent_NoMatch/small_500B-4             0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
RedactContent_NoMatch/medium_5KB-4             0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
RedactContent_NoMatch/large_50KB-4             0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_builtin-4              0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_user_pattern-4         0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/no_match-4                   0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
NewRedactor-4                                914.000 ± 0%     5.000 ± 0%  -99.45% (p=0.002 n=6)
geomean                                                   ²               -48.75%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/config
                                   │ bench-baseline.txt │         bench-current.txt         │
                                   │       sec/op       │   sec/op     vs base              │
Validate/valid_defaults-4                   2.397µ ± 1%   2.389µ ± 5%       ~ (p=0.669 n=6)
Validate/with_arrays-4                      9.374µ ± 2%   9.411µ ± 1%       ~ (p=1.000 n=6)
Validate/invalid_multi_error-4              5.300µ ± 1%   5.271µ ± 0%  -0.55% (p=0.026 n=6)
ParseDefaultsTOML-4                         33.78µ ± 0%   33.89µ ± 1%       ~ (p=0.180 n=6)
RejectEmbeddedKeys/clean_config-4           1.583µ ± 2%   1.558µ ± 3%  -1.55% (p=0.041 n=6)
RejectEmbeddedKeys/with_patterns-4          9.597µ ± 2%   9.743µ ± 3%       ~ (p=0.394 n=6)
AppendEnumErr/match_first-4                 34.00n ± 1%   33.73n ± 0%  -0.79% (p=0.002 n=6)
AppendEnumErr/match_last-4                  34.48n ± 1%   34.24n ± 1%       ~ (p=0.310 n=6)
AppendEnumErr/no_match-4                    889.7n ± 1%   885.5n ± 1%       ~ (p=0.258 n=6)
geomean                                     1.587µ        1.583µ       -0.24%

                                   │ bench-baseline.txt │          bench-current.txt           │
                                   │        B/op        │     B/op      vs base                │
Validate/valid_defaults-4                  868.0 ± 0%       867.5 ± 0%       ~ (p=0.675 n=6)
Validate/with_arrays-4                     867.0 ± 0%       867.5 ± 0%       ~ (p=0.576 n=6)
Validate/invalid_multi_error-4           2.038Ki ± 0%     2.038Ki ± 0%       ~ (p=1.000 n=6)
ParseDefaultsTOML-4                      1.836Ki ± 0%     1.836Ki ± 0%       ~ (p=1.000 n=6)
RejectEmbeddedKeys/clean_config-4          0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/with_patterns-4         0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_first-4                48.00 ± 0%       48.00 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_last-4                 48.00 ± 0%       48.00 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/no_match-4                   346.0 ± 0%       346.0 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                               ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                   │ bench-baseline.txt │         bench-current.txt          │
                                   │     allocs/op      │ allocs/op   vs base                │
Validate/valid_defaults-4                  18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
Validate/with_arrays-4                     18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
Validate/invalid_multi_error-4             58.00 ± 0%     58.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseDefaultsTOML-4                        52.00 ± 0%     52.00 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/clean_config-4          0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/with_patterns-4         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_first-4                1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_last-4                 1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/no_match-4                   12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                               ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/crashlog
                                 │ bench-baseline.txt │         bench-current.txt         │
                                 │       sec/op       │   sec/op     vs base              │
ScrubPII/small_100B-4                     12.87µ ± 2%   12.87µ ± 1%       ~ (p=0.937 n=6)
ScrubPII/medium_1KB-4                     226.2µ ± 1%   225.8µ ± 7%       ~ (p=0.699 n=6)
ScrubPII/large_10KB-4                     3.050m ± 1%   3.062m ± 1%       ~ (p=0.394 n=6)
ScrubPII_NoSecrets/100B-4                 23.75µ ± 3%   23.67µ ± 1%       ~ (p=0.065 n=6)
ScrubPII_NoSecrets/1KB-4                  234.1µ ± 0%   233.5µ ± 0%       ~ (p=0.065 n=6)
ScrubPII_NoSecrets/10KB-4                 2.909m ± 1%   2.904m ± 1%       ~ (p=0.937 n=6)
ScrubLogTail/10_entries-4                 129.2µ ± 2%   129.6µ ± 0%       ~ (p=0.818 n=6)
ScrubLogTail/50_entries-4                 647.7µ ± 0%   646.5µ ± 1%       ~ (p=0.818 n=6)
ScrubLogTail/100_entries_mixed-4          10.80m ± 1%   10.80m ± 1%       ~ (p=0.699 n=6)
geomean                                   370.0µ        369.8µ       -0.04%

                                 │ bench-baseline.txt │         bench-current.txt          │
                                 │        B/op        │     B/op      vs base              │
ScrubPII/small_100B-4                      913.0 ± 0%     914.0 ± 0%       ~ (p=0.197 n=6)
ScrubPII/medium_1KB-4                    11.89Ki ± 0%   11.89Ki ± 0%       ~ (p=0.284 n=6)
ScrubPII/large_10KB-4                    228.3Ki ± 0%   228.4Ki ± 0%       ~ (p=0.818 n=6)
ScrubPII_NoSecrets/100B-4                1.173Ki ± 0%   1.174Ki ± 0%       ~ (p=0.374 n=6)
ScrubPII_NoSecrets/1KB-4                 10.09Ki ± 0%   10.09Ki ± 0%       ~ (p=0.859 n=6)
ScrubPII_NoSecrets/10KB-4                101.0Ki ± 0%   101.0Ki ± 0%       ~ (p=0.937 n=6)
ScrubLogTail/10_entries-4                9.083Ki ± 0%   9.085Ki ± 0%       ~ (p=0.883 n=6)
ScrubLogTail/50_entries-4                45.50Ki ± 0%   45.49Ki ± 0%       ~ (p=0.608 n=6)
ScrubLogTail/100_entries_mixed-4         545.7Ki ± 0%   545.5Ki ± 0%       ~ (p=0.249 n=6)
geomean                                  20.55Ki        20.55Ki       +0.02%

                                 │ bench-baseline.txt │          bench-current.txt          │
                                 │     allocs/op      │  allocs/op   vs base                │
ScrubPII/small_100B-4                      17.00 ± 0%    17.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII/medium_1KB-4                      27.00 ± 0%    27.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII/large_10KB-4                      79.50 ± 1%    79.50 ± 1%       ~ (p=1.000 n=6)
ScrubPII_NoSecrets/100B-4                  15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII_NoSecrets/1KB-4                   15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII_NoSecrets/10KB-4                  15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/10_entries-4                  171.0 ± 0%    171.0 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/50_entries-4                  851.0 ± 0%    851.0 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/100_entries_mixed-4          1.909k ± 0%   1.909k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                    68.73         68.73       +0.00%
¹ all samples are equal

pkg: github.com/jongio/grut/internal/git
                               │ bench-baseline.txt │         bench-current.txt         │
                               │       sec/op       │   sec/op     vs base              │
ParseStatus/10_files-4                  1.816µ ± 1%   1.810µ ± 1%       ~ (p=0.288 n=6)
ParseStatus/100_files-4                 15.75µ ± 5%   15.64µ ± 8%       ~ (p=0.310 n=6)
ParseStatus/500_files-4                 75.78µ ± 1%   76.26µ ± 1%       ~ (p=0.132 n=6)
ParseStatus/100_renamed-4               23.12µ ± 0%   23.66µ ± 2%  +2.31% (p=0.002 n=6)
ParseStatusBranch-4                     1.668µ ± 1%   1.694µ ± 1%  +1.53% (p=0.009 n=6)
ParseDiff/10_lines-4                    1.047µ ± 1%   1.073µ ± 2%  +2.53% (p=0.002 n=6)
ParseDiff/100_lines-4                   6.676µ ± 0%   6.711µ ± 1%       ~ (p=0.093 n=6)
ParseDiff/1000_lines-4                  67.81µ ± 1%   67.26µ ± 1%       ~ (p=0.065 n=6)
ParseHunkHeader/simple-4                98.13n ± 0%   98.56n ± 0%  +0.43% (p=0.009 n=6)
ParseHunkHeader/with_context-4          103.8n ± 0%   104.5n ± 0%  +0.67% (p=0.002 n=6)
ParseHunkHeader/large_range-4           115.5n ± 0%   116.2n ± 0%  +0.61% (p=0.002 n=6)
UndoStack/record_50-4                   20.45µ ± 2%   20.50µ ± 1%       ~ (p=0.420 n=6)
UndoStack/record_overflow-4             81.01µ ± 1%   81.26µ ± 1%       ~ (p=0.180 n=6)
UndoStack/peek_undo-4                   8.551n ± 2%   8.543n ± 0%       ~ (p=0.329 n=6)
UndoStack/can_undo_redo-4               11.61n ± 0%   11.60n ± 0%  -0.13% (p=0.028 n=6)
JoinPaths-4                             1.215µ ± 0%   1.226µ ± 1%  +0.91% (p=0.009 n=6)
SplitPaths-4                            2.301µ ± 2%   2.365µ ± 1%  +2.80% (p=0.002 n=6)
geomean                                 1.798µ        1.810µ       +0.67%

                               │ bench-baseline.txt │          bench-current.txt           │
                               │        B/op        │     B/op      vs base                │
ParseStatus/10_files-4               2.641Ki ± 0%     2.641Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_files-4              24.66Ki ± 0%     24.66Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/500_files-4              111.9Ki ± 0%     111.9Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_renamed-4            32.16Ki ± 0%     32.16Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatusBranch-4                    928.0 ± 0%       928.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/10_lines-4                 1.703Ki ± 0%     1.703Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/100_lines-4                11.02Ki ± 0%     11.02Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/1000_lines-4               116.5Ki ± 0%     116.5Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/simple-4               32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/with_context-4         32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/large_range-4          32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_50-4                22.91Ki ± 0%     22.91Ki ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_overflow-4          87.27Ki ± 0%     87.27Ki ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/peek_undo-4                  0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/can_undo_redo-4              0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
JoinPaths-4                          2.625Ki ± 0%     2.625Ki ± 0%       ~ (p=1.000 n=6) ¹
SplitPaths-4                         6.062Ki ± 0%     6.062Ki ± 0%       ~ (p=1.000 n=6) ¹
geomean                                           ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                               │ bench-baseline.txt │         bench-current.txt          │
                               │     allocs/op      │ allocs/op   vs base                │
ParseStatus/10_files-4                 14.00 ± 0%     14.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_files-4                89.00 ± 0%     89.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/500_files-4                411.0 ± 0%     411.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_renamed-4              209.0 ± 0%     209.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatusBranch-4                    2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/10_lines-4                   9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/100_lines-4                  46.00 ± 0%     46.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/1000_lines-4                 448.0 ± 0%     448.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/simple-4               1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/with_context-4         1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/large_range-4          1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_50-4                  208.0 ± 0%     208.0 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_overflow-4            811.0 ± 0%     811.0 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/peek_undo-4                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/can_undo_redo-4              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
JoinPaths-4                            1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
SplitPaths-4                           7.000 ± 0%     7.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                           ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/markdown
                                   │ bench-baseline.txt │          bench-current.txt          │
                                   │       sec/op       │   sec/op     vs base                │
RenderStaticCached/same_width-4             535.0µ ± 7%   544.2µ ± 5%       ~ (p=0.065 n=6)
RenderStaticCached/varying_width-4          615.2µ ± 1%   616.5µ ± 1%       ~ (p=0.589 n=6)
RenderStaticMemoryGrowth-4                  466.1µ ± 0%
RenderStaticCold-4                                        558.6µ ± 1%
geomean                                     535.3µ        572.2µ       +0.96%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                   │ bench-baseline.txt │          bench-current.txt           │
                                   │        B/op        │     B/op      vs base                │
RenderStaticCached/same_width-4            122.0Ki ± 0%   122.1Ki ± 0%       ~ (p=0.372 n=6)
RenderStaticCached/varying_width-4         144.3Ki ± 0%   144.2Ki ± 0%       ~ (p=0.589 n=6)
RenderStaticMemoryGrowth-4                 105.3Ki ± 0%
RenderStaticCold-4                                        161.0Ki ± 0%
geomean                                    122.8Ki        141.5Ki       +0.02%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                   │ bench-baseline.txt │          bench-current.txt          │
                                   │     allocs/op      │  allocs/op   vs base                │
RenderStaticCached/same_width-4             12.18k ± 0%   12.18k ± 0%       ~ (p=1.000 n=6) ¹
RenderStaticCached/varying_width-4          13.76k ± 0%   13.76k ± 0%       ~ (p=1.000 n=6)
RenderStaticMemoryGrowth-4                  5.231k ± 0%
RenderStaticCold-4                                        5.822k ± 0%
geomean                                     9.570k        9.918k       +0.00%               ²
¹ all samples are equal
² benchmark set differs from baseline; geomeans may not be comparable

                           │ bench-baseline.txt │
                           │    gc-cycles/op    │
RenderStaticMemoryGrowth-4          65.76m ± 2%

                           │ bench-baseline.txt │
                           │  heap-inuse-b/op   │
RenderStaticMemoryGrowth-4          91.66 ± 82%

pkg: github.com/jongio/grut/internal/notify
                           │ bench-baseline.txt │         bench-current.txt          │
                           │       sec/op       │   sec/op     vs base               │
NotifyToastChurn-4                  506.7n ± 6%   329.0n ± 0%  -35.07% (p=0.002 n=6)
NotifyInlineCap-4                   1.016µ ± 0%   1.013µ ± 0%   -0.30% (p=0.039 n=6)
NotifyToastLifecycleCold-4                        677.0n ± 4%
geomean                             717.3n        608.7n       -19.54%

                           │ bench-baseline.txt │          bench-current.txt          │
                           │        B/op        │    B/op     vs base                 │
NotifyToastChurn-4                   647.5 ± 5%   144.0 ± 0%  -77.76% (p=0.002 n=6)
NotifyInlineCap-4                    104.0 ± 0%   104.0 ± 0%        ~ (p=1.000 n=6) ¹
NotifyToastLifecycleCold-4                        848.0 ± 0%
geomean                              259.5        233.3       -52.84%
¹ all samples are equal

                           │ bench-baseline.txt │          bench-current.txt          │
                           │     allocs/op      │ allocs/op   vs base                 │
NotifyToastChurn-4                   5.000 ± 0%   2.000 ± 0%  -60.00% (p=0.002 n=6)
NotifyInlineCap-4                    2.000 ± 0%   2.000 ± 0%        ~ (p=1.000 n=6) ¹
NotifyToastLifecycleCold-4                        10.00 ± 0%
geomean                              3.162        3.420       -36.75%
¹ all samples are equal

                  │ bench-baseline.txt │
                  │  heap-inuse-b/op   │
NotifyInlineCap-4         86.02m ± 24%

pkg: github.com/jongio/grut/internal/panels/filetree
                                               │ bench-baseline.txt │          bench-current.txt          │
                                               │       sec/op       │   sec/op     vs base                │
TreeRebuildVisible/flat_50_files-4                     184.6n ±  1%   183.9n ± 1%       ~ (p=0.214 n=6)
TreeRebuildVisible/nested_5_deep_200_nodes-4           2.197µ ± 13%
TreeRebuildVisible/large_1000_nodes-4                  3.857µ ±  3%   3.831µ ± 0%  -0.66% (p=0.037 n=6)
RenderLine/file_node-4                                 4.649µ ±  0%   4.661µ ± 1%       ~ (p=0.106 n=6)
RenderLine/dir_node_cursor-4                           6.020µ ±  1%   6.067µ ± 0%  +0.78% (p=0.024 n=6)
RenderLine/with_icons-4                                4.589µ ±  0%   4.599µ ± 1%  +0.21% (p=0.004 n=6)
LazyLoad/50_entries-4                                  138.3µ ±  0%
LazyLoad/200_entries_nested-4                          67.56µ ±  0%
DisplayWidth/ascii-4                                   67.81n ±  1%   68.86n ± 0%  +1.55% (p=0.002 n=6)
DisplayWidth/mixed_unicode-4                           306.4n ±  0%   318.6n ± 0%  +4.00% (p=0.002 n=6)
TruncateToWidth/no_truncation-4                        20.91n ±  1%   21.98n ± 0%  +5.12% (p=0.002 n=6)
TruncateToWidth/needs_truncation-4                     860.6n ±  1%   829.7n ± 0%  -3.58% (p=0.002 n=6)
TreeRebuildVisible/nested_5_levels_461_nodes-4                        2.251µ ± 1%
DetachedLazyLoad/50_entries-4                                         146.7µ ± 1%
DetachedLazyLoad/23_root_entries-4                                    65.34µ ± 1%
geomean                                                1.726µ         1.744µ       +0.78%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                               │ bench-baseline.txt │           bench-current.txt            │
                                               │        B/op        │     B/op      vs base                  │
TreeRebuildVisible/flat_50_files-4                     0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_deep_200_nodes-4           0.000 ± 0%
TreeRebuildVisible/large_1000_nodes-4                  0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/file_node-4                                 392.0 ± 0%       392.0 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/dir_node_cursor-4                           624.0 ± 0%       624.0 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/with_icons-4                                392.0 ± 0%       392.0 ± 0%       ~ (p=1.000 n=6) ¹
LazyLoad/50_entries-4                                28.52Ki ± 0%
LazyLoad/200_entries_nested-4                        13.85Ki ± 0%
DisplayWidth/ascii-4                                   0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
DisplayWidth/mixed_unicode-4                           0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/no_truncation-4                        0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/needs_truncation-4                     544.0 ± 0%       544.0 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_levels_461_nodes-4                          0.000 ± 0%
DetachedLazyLoad/50_entries-4                                         34.12Ki ± 0%
DetachedLazyLoad/23_root_entries-4                                    14.77Ki ± 0%
geomean                                                           ²                 +0.00%               ³ ²
¹ all samples are equal
² summaries must be >0 to compute geomean
³ benchmark set differs from baseline; geomeans may not be comparable

                                               │ bench-baseline.txt │          bench-current.txt           │
                                               │     allocs/op      │ allocs/op   vs base                  │
TreeRebuildVisible/flat_50_files-4                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_deep_200_nodes-4           0.000 ± 0%
TreeRebuildVisible/large_1000_nodes-4                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/file_node-4                                 12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/dir_node_cursor-4                           18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/with_icons-4                                12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
LazyLoad/50_entries-4                                  312.0 ± 0%
LazyLoad/200_entries_nested-4                          149.0 ± 0%
DisplayWidth/ascii-4                                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
DisplayWidth/mixed_unicode-4                           0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/no_truncation-4                        0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/needs_truncation-4                     3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_levels_461_nodes-4                        0.000 ± 0%
DetachedLazyLoad/50_entries-4                                         363.0 ± 0%
DetachedLazyLoad/23_root_entries-4                                    164.0 ± 0%
geomean                                                           ²               +0.00%               ³ ²
¹ all samples are equal
² summaries must be >0 to compute geomean
³ benchmark set differs from baseline; geomeans may not be comparable

pkg: github.com/jongio/grut/internal/panels/gitdiff
                                                   │ bench-baseline.txt │          bench-current.txt          │
                                                   │       sec/op       │   sec/op     vs base                │
InlineDiffRender/10_lines-4                                 46.46µ ± 1%
InlineDiffRender/100_lines-4                                394.7µ ± 1%
InlineDiffRender/1000_lines-4                               3.877m ± 1%
SideBySideDiffRender/10_lines-4                             85.06µ ± 1%
SideBySideDiffRender/100_lines-4                            747.0µ ± 1%
SideBySideDiffRender/1000_lines-4                           7.122m ± 1%
PairDiffLines/20_lines_mixed-4                              304.3n ± 1%   306.1n ± 1%       ~ (p=0.370 n=6)
PairDiffLines/200_lines_mixed-4                             2.004µ ± 1%   2.035µ ± 1%  +1.55% (p=0.024 n=6)
RenderViewport/small-4                                      4.297µ ± 0%
RenderViewport/large_scrolled-4                             4.427µ ± 0%
MemoryGrowth/inline_100_lines-4                             395.4µ ± 1%
MemoryGrowth/inline_1000_lines-4                            3.867m ± 0%
MemoryGrowth/sidebyside_100_lines-4                         745.5µ ± 1%
MemoryGrowth/sidebyside_1000_lines-4                        7.102m ± 0%
InlineDiffRenderExact/10_lines-4                                          46.55µ ± 2%
InlineDiffRenderExact/100_lines-4                                         403.7µ ± 1%
InlineDiffRenderExact/1000_lines-4                                        4.034m ± 0%
InlineDiffRenderCold-4                                                    400.3µ ± 1%
SideBySideDiffRenderExact/10_lines-4                                      83.59µ ± 1%
SideBySideDiffRenderExact/100_lines-4                                     747.7µ ± 1%
SideBySideDiffRenderExact/1000_lines-4                                    7.531m ± 0%
SideBySideDiffRenderCold-4                                                769.9µ ± 0%
RenderViewportWithStats/small-4                                           5.426µ ± 0%
RenderViewportWithStats/large_scrolled-4                                  5.724µ ± 1%
DiffWordsBoundedAllocations/50_tokens-4                                   30.51µ ± 0%
DiffWordsBoundedAllocations/200_tokens-4                                  452.0µ ± 0%
DiffWordsBoundedAllocations/400_tokens-4                                  1.780m ± 1%
DiffWordsBoundedAllocations/over_cap_tokens-4                             5.180µ ± 2%
DiffWordsBoundedAllocations/one_mib_over_cap-4                            5.106µ ± 2%
DiffWordsBoundedAllocations/one_mib_single_token-4                        9.833m ± 0%
geomean                                                     150.4µ        101.7µ       +1.05%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                                   │ bench-baseline.txt │          bench-current.txt           │
                                                   │        B/op        │     B/op      vs base                │
InlineDiffRender/10_lines-4                                4.016Ki ± 0%
InlineDiffRender/100_lines-4                               33.07Ki ± 0%
InlineDiffRender/1000_lines-4                              322.4Ki ± 0%
SideBySideDiffRender/10_lines-4                            15.50Ki ± 0%
SideBySideDiffRender/100_lines-4                           142.6Ki ± 0%
SideBySideDiffRender/1000_lines-4                          1.333Mi ± 0%
PairDiffLines/20_lines_mixed-4                               416.0 ± 0%     416.0 ± 0%       ~ (p=1.000 n=6) ¹
PairDiffLines/200_lines_mixed-4                            3.469Ki ± 0%   3.469Ki ± 0%       ~ (p=1.000 n=6) ¹
RenderViewport/small-4                                     6.142Ki ± 0%
RenderViewport/large_scrolled-4                            6.142Ki ± 0%
MemoryGrowth/inline_100_lines-4                            33.07Ki ± 0%
MemoryGrowth/inline_1000_lines-4                           322.2Ki ± 0%
MemoryGrowth/sidebyside_100_lines-4                        142.6Ki ± 0%
MemoryGrowth/sidebyside_1000_lines-4                       1.333Mi ± 0%
InlineDiffRenderExact/10_lines-4                                          4.016Ki ± 0%
InlineDiffRenderExact/100_lines-4                                         33.47Ki ± 0%
InlineDiffRenderExact/1000_lines-4                                        334.7Ki ± 0%
InlineDiffRenderCold-4                                                    37.97Ki ± 0%
SideBySideDiffRenderExact/10_lines-4                                      15.50Ki ± 0%
SideBySideDiffRenderExact/100_lines-4                                     144.3Ki ± 0%
SideBySideDiffRenderExact/1000_lines-4                                    1.410Mi ± 0%
SideBySideDiffRenderCold-4                                                148.8Ki ± 0%
RenderViewportWithStats/small-4                                           6.368Ki ± 0%
RenderViewportWithStats/large_scrolled-4                                  6.376Ki ± 0%
DiffWordsBoundedAllocations/50_tokens-4                                   4.125Ki ± 0%
DiffWordsBoundedAllocations/200_tokens-4                                  18.12Ki ± 0%
DiffWordsBoundedAllocations/400_tokens-4                                  36.62Ki ± 0%
DiffWordsBoundedAllocations/over_cap_tokens-4                             18.12Ki ± 0%
DiffWordsBoundedAllocations/one_mib_over_cap-4                            18.12Ki ± 0%
DiffWordsBoundedAllocations/one_mib_single_token-4                          896.0 ± 0%
geomean                                                    38.23Ki        17.94Ki       +0.00%               ²
¹ all samples are equal
² benchmark set differs from baseline; geomeans may not be comparable

                                                   │ bench-baseline.txt │          bench-current.txt          │
                                                   │     allocs/op      │  allocs/op   vs base                │
InlineDiffRender/10_lines-4                                  122.0 ± 0%
InlineDiffRender/100_lines-4                                1.071k ± 0%
InlineDiffRender/1000_lines-4                               10.44k ± 0%
SideBySideDiffRender/10_lines-4                              217.0 ± 0%
SideBySideDiffRender/100_lines-4                            2.013k ± 0%
SideBySideDiffRender/1000_lines-4                           19.17k ± 0%
PairDiffLines/20_lines_mixed-4                               3.000 ± 0%    3.000 ± 0%       ~ (p=1.000 n=6) ¹
PairDiffLines/200_lines_mixed-4                              3.000 ± 0%    3.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderViewport/small-4                                       11.00 ± 0%
RenderViewport/large_scrolled-4                              12.00 ± 0%
MemoryGrowth/inline_100_lines-4                             1.071k ± 0%
MemoryGrowth/inline_1000_lines-4                            10.44k ± 0%
MemoryGrowth/sidebyside_100_lines-4                         2.013k ± 0%
MemoryGrowth/sidebyside_1000_lines-4                        19.17k ± 0%
InlineDiffRenderExact/10_lines-4                                           122.0 ± 0%
InlineDiffRenderExact/100_lines-4                                         1.096k ± 0%
InlineDiffRenderExact/1000_lines-4                                        10.96k ± 0%
InlineDiffRenderCold-4                                                    1.110k ± 0%
SideBySideDiffRenderExact/10_lines-4                                       217.0 ± 0%
SideBySideDiffRenderExact/100_lines-4                                     2.044k ± 0%
SideBySideDiffRenderExact/1000_lines-4                                    20.44k ± 0%
SideBySideDiffRenderCold-4                                                2.058k ± 0%
RenderViewportWithStats/small-4                                            18.00 ± 0%
RenderViewportWithStats/large_scrolled-4                                   19.00 ± 0%
DiffWordsBoundedAllocations/50_tokens-4                                    8.000 ± 0%
DiffWordsBoundedAllocations/200_tokens-4                                   12.00 ± 0%
DiffWordsBoundedAllocations/400_tokens-4                                   14.00 ± 0%
DiffWordsBoundedAllocations/over_cap_tokens-4                              6.000 ± 0%
DiffWordsBoundedAllocations/one_mib_over_cap-4                             6.000 ± 0%
DiffWordsBoundedAllocations/one_mib_single_token-4                         4.000 ± 0%
geomean                                                      422.9         80.02       +0.00%               ²
¹ all samples are equal
² benchmark set differs from baseline; geomeans may not be comparable

                                     │ bench-baseline.txt │
                                     │    gc-cycles/op    │
MemoryGrowth/inline_100_lines-4               9.728m ± 1%
MemoryGrowth/inline_1000_lines-4              100.4m ± 2%
MemoryGrowth/sidebyside_100_lines-4           42.73m ± 1%
MemoryGrowth/sidebyside_1000_lines-4          446.4m ± 1%
geomean                                       65.71m

                                     │ bench-baseline.txt │
                                     │  heap-inuse-b/op   │
MemoryGrowth/inline_100_lines-4            -21.98 ± -0%
MemoryGrowth/inline_1000_lines-4          -1.090k ± -0%
MemoryGrowth/sidebyside_100_lines-4        -41.25 ± -1%
MemoryGrowth/sidebyside_1000_lines-4      -2.658k ± -1%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

Note

No significant regressions on linux-amd64 (threshold: 15%, same-runner comparison).

@github-actions

github-actions Bot commented Aug 17, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: darwin-arm64

📊 Results vs main (same-runner) , click to expand
goos: darwin
goarch: arm64
pkg: github.com/jongio/grut/internal/ai
cpu: Apple M1 (Virtual)
                                       │ bench-baseline.txt │         bench-current.txt          │
                                       │       sec/op       │   sec/op     vs base               │
RedactContent/small_500B-3                     205.1µ ± 19%   103.7µ ± 7%  -49.44% (p=0.002 n=6)
RedactContent/medium_5KB-3                     3.294m ± 27%   1.201m ± 8%  -63.54% (p=0.002 n=6)
RedactContent/large_50KB-3                     40.52m ± 21%   12.21m ± 5%  -69.86% (p=0.002 n=6)
RedactContent_NoMatch/small_500B-3             282.1µ ± 19%   133.7µ ± 5%  -52.62% (p=0.002 n=6)
RedactContent_NoMatch/medium_5KB-3             2.298m ± 14%   1.421m ± 4%  -38.15% (p=0.002 n=6)
RedactContent_NoMatch/large_50KB-3             21.72m ±  8%   15.09m ± 4%  -30.53% (p=0.002 n=6)
ShouldExcludeFile/match_builtin-3              60.73n ± 11%   62.34n ± 8%        ~ (p=0.699 n=6)
ShouldExcludeFile/match_user_pattern-3         2.295µ ±  6%   2.342µ ± 8%        ~ (p=1.000 n=6)
ShouldExcludeFile/no_match-3                   1.591µ ±  2%   1.525µ ± 6%        ~ (p=0.065 n=6)
NewRedactor-3                                79661.0n ± 27%   596.2n ± 8%  -99.25% (p=0.002 n=6)
geomean                                        152.5µ         59.74µ       -60.83%

                                       │ bench-baseline.txt  │            bench-current.txt             │
                                       │        B/op         │      B/op        vs base                 │
RedactContent/small_500B-3                 5.932Ki ±    0%     2.876Ki ±    0%  -51.51% (p=0.002 n=6)
RedactContent/medium_5KB-3                122.65Ki ±    0%     36.33Ki ±    0%  -70.38% (p=0.002 n=6)
RedactContent/large_50KB-3                1607.3Ki ±    0%     370.2Ki ±    0%  -76.97% (p=0.002 n=6)
RedactContent_NoMatch/small_500B-3           8.000 ±     ?       4.000 ±     ?        ~ (p=0.154 n=6)
RedactContent_NoMatch/medium_5KB-3           84.50 ±   99%       21.00 ±     ?        ~ (p=0.197 n=6)
RedactContent_NoMatch/large_50KB-3           7.500 ± 1753%       4.000 ± 2125%        ~ (p=0.117 n=6)
ShouldExcludeFile/match_builtin-3            0.000 ±    0%       0.000 ±    0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_user_pattern-3       0.000 ±    0%       0.000 ±    0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/no_match-3                 0.000 ±    0%       0.000 ±    0%        ~ (p=1.000 n=6) ¹
NewRedactor-3                            153.570Ki ±    0%     1.320Ki ±    0%  -99.14% (p=0.002 n=6)
geomean                                                    ²                    -66.31%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                       │ bench-baseline.txt │          bench-current.txt          │
                                       │     allocs/op      │ allocs/op   vs base                 │
RedactContent/small_500B-3                     25.00 ± 0%     12.00 ± 0%  -52.00% (p=0.002 n=6)
RedactContent/medium_5KB-3                    104.00 ± 0%     60.00 ± 0%  -42.31% (p=0.002 n=6)
RedactContent/large_50KB-3                     584.5 ± 0%     483.0 ± 0%  -17.37% (p=0.002 n=6)
RedactContent_NoMatch/small_500B-3             0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
RedactContent_NoMatch/medium_5KB-3             0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
RedactContent_NoMatch/large_50KB-3             0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_builtin-3              0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/match_user_pattern-3         0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
ShouldExcludeFile/no_match-3                   0.000 ± 0%     0.000 ± 0%        ~ (p=1.000 n=6) ¹
NewRedactor-3                                914.000 ± 0%     5.000 ± 0%  -99.45% (p=0.002 n=6)
geomean                                                   ²               -48.74%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/config
                                   │ bench-baseline.txt │         bench-current.txt          │
                                   │       sec/op       │    sec/op     vs base              │
Validate/valid_defaults-3                  1.869µ ± 11%   1.710µ ±  8%       ~ (p=0.240 n=6)
Validate/with_arrays-3                     6.131µ ±  8%   6.196µ ±  3%       ~ (p=1.000 n=6)
Validate/invalid_multi_error-3             3.691µ ±  8%   3.449µ ± 26%       ~ (p=0.485 n=6)
ParseDefaultsTOML-3                        22.32µ ± 15%   21.38µ ± 20%       ~ (p=0.699 n=6)
RejectEmbeddedKeys/clean_config-3          1.110µ ±  5%   1.134µ ±  5%       ~ (p=0.310 n=6)
RejectEmbeddedKeys/with_patterns-3         6.860µ ± 10%   6.861µ ±  8%       ~ (p=1.000 n=6)
AppendEnumErr/match_first-3                26.83n ± 17%   23.56n ± 13%       ~ (p=0.240 n=6)
AppendEnumErr/match_last-3                 23.80n ±  9%   25.32n ± 24%       ~ (p=0.065 n=6)
AppendEnumErr/no_match-3                   558.1n ± 14%   588.8n ±  6%       ~ (p=0.937 n=6)
geomean                                    1.110µ         1.088µ        -1.99%

                                   │ bench-baseline.txt │          bench-current.txt           │
                                   │        B/op        │     B/op      vs base                │
Validate/valid_defaults-3                  867.0 ± 0%       867.0 ± 0%       ~ (p=1.000 n=6)
Validate/with_arrays-3                     867.0 ± 0%       866.0 ± 0%       ~ (p=0.242 n=6)
Validate/invalid_multi_error-3           2.035Ki ± 0%     2.035Ki ± 0%       ~ (p=0.426 n=6)
ParseDefaultsTOML-3                      1.836Ki ± 0%     1.836Ki ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/clean_config-3          0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/with_patterns-3         0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_first-3                48.00 ± 0%       48.00 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_last-3                 48.00 ± 0%       48.00 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/no_match-3                   345.5 ± 0%       345.0 ± 0%       ~ (p=0.545 n=6)
geomean                                               ²                 -0.03%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                   │ bench-baseline.txt │         bench-current.txt          │
                                   │     allocs/op      │ allocs/op   vs base                │
Validate/valid_defaults-3                  18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
Validate/with_arrays-3                     18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
Validate/invalid_multi_error-3             58.00 ± 0%     58.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseDefaultsTOML-3                        52.00 ± 0%     52.00 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/clean_config-3          0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RejectEmbeddedKeys/with_patterns-3         0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_first-3                1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/match_last-3                 1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
AppendEnumErr/no_match-3                   12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                               ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/crashlog
                                 │ bench-baseline.txt │          bench-current.txt           │
                                 │       sec/op       │    sec/op      vs base               │
ScrubPII/small_100B-3                    9.250µ ±  3%   10.386µ ± 11%  +12.28% (p=0.002 n=6)
ScrubPII/medium_1KB-3                    162.3µ ±  5%    186.4µ ±  5%  +14.89% (p=0.002 n=6)
ScrubPII/large_10KB-3                    2.170m ±  7%    2.551m ± 10%  +17.54% (p=0.002 n=6)
ScrubPII_NoSecrets/100B-3                16.97µ ± 11%    21.38µ ± 43%  +26.04% (p=0.002 n=6)
ScrubPII_NoSecrets/1KB-3                 166.9µ ±  4%    193.3µ ±  5%  +15.82% (p=0.002 n=6)
ScrubPII_NoSecrets/10KB-3                2.054m ±  2%    2.441m ± 14%  +18.81% (p=0.002 n=6)
ScrubLogTail/10_entries-3                97.40µ ±  6%   104.52µ ± 11%   +7.30% (p=0.002 n=6)
ScrubLogTail/50_entries-3                469.6µ ±  4%    534.7µ ±  5%  +13.88% (p=0.002 n=6)
ScrubLogTail/100_entries_mixed-3         7.600m ±  2%    8.862m ±  4%  +16.59% (p=0.002 n=6)
geomean                                  265.6µ          307.6µ        +15.81%

                                 │ bench-baseline.txt │         bench-current.txt          │
                                 │        B/op        │     B/op      vs base              │
ScrubPII/small_100B-3                      913.0 ± 0%     913.5 ± 0%       ~ (p=1.000 n=6)
ScrubPII/medium_1KB-3                    11.89Ki ± 0%   11.90Ki ± 0%       ~ (p=0.331 n=6)
ScrubPII/large_10KB-3                    228.0Ki ± 0%   228.0Ki ± 0%       ~ (p=1.000 n=6)
ScrubPII_NoSecrets/100B-3                1.173Ki ± 0%   1.174Ki ± 0%       ~ (p=0.067 n=6)
ScrubPII_NoSecrets/1KB-3                 10.09Ki ± 0%   10.09Ki ± 0%       ~ (p=0.165 n=6)
ScrubPII_NoSecrets/10KB-3                101.0Ki ± 0%   100.9Ki ± 0%       ~ (p=0.589 n=6)
ScrubLogTail/10_entries-3                9.075Ki ± 0%   9.078Ki ± 0%       ~ (p=0.286 n=6)
ScrubLogTail/50_entries-3                45.48Ki ± 0%   45.45Ki ± 0%       ~ (p=0.167 n=6)
ScrubLogTail/100_entries_mixed-3         545.4Ki ± 0%   545.5Ki ± 0%       ~ (p=0.589 n=6)
geomean                                  20.54Ki        20.54Ki       +0.01%

                                 │ bench-baseline.txt │          bench-current.txt          │
                                 │     allocs/op      │  allocs/op   vs base                │
ScrubPII/small_100B-3                      17.00 ± 0%    17.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII/medium_1KB-3                      27.00 ± 0%    27.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII/large_10KB-3                      79.00 ± 1%    79.00 ± 1%       ~ (p=1.000 n=6)
ScrubPII_NoSecrets/100B-3                  15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII_NoSecrets/1KB-3                   15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubPII_NoSecrets/10KB-3                  15.00 ± 0%    15.00 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/10_entries-3                  171.0 ± 0%    171.0 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/50_entries-3                  851.0 ± 0%    851.0 ± 0%       ~ (p=1.000 n=6) ¹
ScrubLogTail/100_entries_mixed-3          1.909k ± 0%   1.909k ± 0%       ~ (p=1.000 n=6) ¹
geomean                                    68.68         68.68       +0.00%
¹ all samples are equal

pkg: github.com/jongio/grut/internal/git
                               │ bench-baseline.txt │          bench-current.txt          │
                               │       sec/op       │    sec/op     vs base               │
ParseStatus/10_files-3                 1.536µ ±  7%   1.865µ ±  9%  +21.42% (p=0.002 n=6)
ParseStatus/100_files-3                13.95µ ±  8%   16.81µ ±  7%  +20.51% (p=0.002 n=6)
ParseStatus/500_files-3                69.49µ ±  6%   81.65µ ±  7%  +17.49% (p=0.002 n=6)
ParseStatus/100_renamed-3              19.79µ ±  8%   23.79µ ±  6%  +20.21% (p=0.002 n=6)
ParseStatusBranch-3                    1.299µ ±  2%   1.535µ ±  4%  +18.17% (p=0.002 n=6)
ParseDiff/10_lines-3                   738.0n ±  4%   897.8n ± 11%  +21.67% (p=0.002 n=6)
ParseDiff/100_lines-3                  5.071µ ± 29%   6.161µ ±  5%        ~ (p=0.065 n=6)
ParseDiff/1000_lines-3                 63.51µ ± 33%   60.83µ ±  4%        ~ (p=0.132 n=6)
ParseHunkHeader/simple-3               78.42n ±  9%   73.50n ±  2%        ~ (p=0.132 n=6)
ParseHunkHeader/with_context-3         97.86n ± 12%   84.97n ±  6%  -13.17% (p=0.002 n=6)
ParseHunkHeader/large_range-3         105.35n ±  7%   92.39n ±  2%  -12.31% (p=0.002 n=6)
UndoStack/record_50-3                  17.85µ ± 12%   13.90µ ± 27%  -22.11% (p=0.015 n=6)
UndoStack/record_overflow-3            81.26µ ± 14%   55.58µ ± 23%  -31.60% (p=0.002 n=6)
UndoStack/peek_undo-3                  16.70n ±  6%   15.49n ±  3%   -7.19% (p=0.009 n=6)
UndoStack/can_undo_redo-3              32.06n ±  7%   31.99n ±  5%        ~ (p=0.699 n=6)
JoinPaths-3                            1.300µ ± 17%   1.105µ ±  5%  -15.04% (p=0.002 n=6)
SplitPaths-3                           3.112µ ±  3%   2.463µ ± 13%  -20.84% (p=0.002 n=6)
geomean                                1.806µ         1.785µ         -1.17%

                               │ bench-baseline.txt │          bench-current.txt           │
                               │        B/op        │     B/op      vs base                │
ParseStatus/10_files-3               2.641Ki ± 0%     2.641Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_files-3              24.66Ki ± 0%     24.66Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/500_files-3              111.9Ki ± 0%     111.9Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_renamed-3            32.16Ki ± 0%     32.16Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseStatusBranch-3                    928.0 ± 0%       928.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/10_lines-3                 1.703Ki ± 0%     1.703Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/100_lines-3                11.02Ki ± 0%     11.02Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/1000_lines-3               116.5Ki ± 0%     116.5Ki ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/simple-3               32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/with_context-3         32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/large_range-3          32.00 ± 0%       32.00 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_50-3                22.91Ki ± 0%     22.91Ki ± 0%       ~ (p=0.182 n=6)
UndoStack/record_overflow-3          87.26Ki ± 0%     87.26Ki ± 0%       ~ (p=0.141 n=6)
UndoStack/peek_undo-3                  0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/can_undo_redo-3              0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
JoinPaths-3                          2.625Ki ± 0%     2.625Ki ± 0%       ~ (p=1.000 n=6) ¹
SplitPaths-3                         6.062Ki ± 0%     6.062Ki ± 0%       ~ (p=1.000 n=6) ¹
geomean                                           ²                 +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                               │ bench-baseline.txt │         bench-current.txt          │
                               │     allocs/op      │ allocs/op   vs base                │
ParseStatus/10_files-3                 14.00 ± 0%     14.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_files-3                89.00 ± 0%     89.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/500_files-3                411.0 ± 0%     411.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatus/100_renamed-3              209.0 ± 0%     209.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseStatusBranch-3                    2.000 ± 0%     2.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/10_lines-3                   9.000 ± 0%     9.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/100_lines-3                  46.00 ± 0%     46.00 ± 0%       ~ (p=1.000 n=6) ¹
ParseDiff/1000_lines-3                 448.0 ± 0%     448.0 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/simple-3               1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/with_context-3         1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseHunkHeader/large_range-3          1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_50-3                  208.0 ± 0%     208.0 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/record_overflow-3            811.0 ± 0%     811.0 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/peek_undo-3                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
UndoStack/can_undo_redo-3              0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
JoinPaths-3                            1.000 ± 0%     1.000 ± 0%       ~ (p=1.000 n=6) ¹
SplitPaths-3                           7.000 ± 0%     7.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                                           ²               +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

pkg: github.com/jongio/grut/internal/markdown
                                   │ bench-baseline.txt │           bench-current.txt           │
                                   │       sec/op       │    sec/op     vs base                 │
RenderStaticCached/same_width-3            471.2µ ± 20%   369.8µ ± 13%  -21.52% (p=0.002 n=6)
RenderStaticCached/varying_width-3         544.4µ ±  6%   411.2µ ± 37%        ~ (p=0.180 n=6)
RenderStaticMemoryGrowth-3                 416.9µ ± 19%
RenderStaticCold-3                                        350.2µ ±  7%
geomean                                    474.7µ         376.2µ        -23.01%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                   │ bench-baseline.txt │          bench-current.txt           │
                                   │        B/op        │     B/op      vs base                │
RenderStaticCached/same_width-3            121.6Ki ± 0%   121.4Ki ± 0%       ~ (p=0.093 n=6)
RenderStaticCached/varying_width-3         143.9Ki ± 0%   143.8Ki ± 0%       ~ (p=1.000 n=6)
RenderStaticMemoryGrowth-3                 103.0Ki ± 1%
RenderStaticCold-3                                        159.3Ki ± 1%
geomean                                    121.7Ki        140.6Ki       -0.12%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                   │ bench-baseline.txt │          bench-current.txt          │
                                   │     allocs/op      │  allocs/op   vs base                │
RenderStaticCached/same_width-3             12.18k ± 0%   12.18k ± 0%       ~ (p=1.000 n=6) ¹
RenderStaticCached/varying_width-3          13.76k ± 0%   13.76k ± 0%       ~ (p=0.688 n=6)
RenderStaticMemoryGrowth-3                  5.228k ± 0%
RenderStaticCold-3                                        5.823k ± 0%
geomean                                     9.569k        9.919k       +0.00%               ²
¹ all samples are equal
² benchmark set differs from baseline; geomeans may not be comparable

                           │ bench-baseline.txt │
                           │    gc-cycles/op    │
RenderStaticMemoryGrowth-3          59.99m ± 2%

                           │ bench-baseline.txt │
                           │  heap-inuse-b/op   │
RenderStaticMemoryGrowth-3            69.09 ± ?

pkg: github.com/jongio/grut/internal/notify
                           │ bench-baseline.txt │          bench-current.txt          │
                           │       sec/op       │    sec/op     vs base               │
NotifyToastChurn-3                 423.9n ± 43%   270.8n ±  9%  -36.12% (p=0.002 n=6)
NotifyInlineCap-3                  984.6n ± 18%   778.3n ±  3%  -20.95% (p=0.002 n=6)
NotifyToastLifecycleCold-3                        512.4n ± 18%
geomean                            646.1n         476.2n        -28.94%

                           │ bench-baseline.txt │          bench-current.txt          │
                           │        B/op        │    B/op     vs base                 │
NotifyToastChurn-3                   622.0 ± 7%   144.0 ± 0%  -76.85% (p=0.002 n=6)
NotifyInlineCap-3                    104.0 ± 0%   104.0 ± 0%        ~ (p=1.000 n=6) ¹
NotifyToastLifecycleCold-3                        848.0 ± 0%
geomean                              254.3        233.3       -51.88%
¹ all samples are equal

                           │ bench-baseline.txt │          bench-current.txt          │
                           │     allocs/op      │ allocs/op   vs base                 │
NotifyToastChurn-3                   5.000 ± 0%   2.000 ± 0%  -60.00% (p=0.002 n=6)
NotifyInlineCap-3                    2.000 ± 0%   2.000 ± 0%        ~ (p=1.000 n=6) ¹
NotifyToastLifecycleCold-3                        10.00 ± 0%
geomean                              3.162        3.420       -36.75%
¹ all samples are equal

                  │ bench-baseline.txt │
                  │  heap-inuse-b/op   │
NotifyInlineCap-3         26.59m ± 54%

pkg: github.com/jongio/grut/internal/panels/filetree
                                               │ bench-baseline.txt │           bench-current.txt            │
                                               │       sec/op       │    sec/op      vs base                 │
TreeRebuildVisible/flat_50_files-3                     194.8n ±  5%    179.6n ±  5%   -7.83% (p=0.009 n=6)
TreeRebuildVisible/nested_5_deep_200_nodes-3           2.539µ ± 28%
TreeRebuildVisible/large_1000_nodes-3                  4.547µ ± 22%    3.965µ ± 11%  -12.81% (p=0.015 n=6)
RenderLine/file_node-3                                 4.070µ ± 23%    3.498µ ±  9%  -14.05% (p=0.009 n=6)
RenderLine/dir_node_cursor-3                           4.881µ ± 13%    4.319µ ±  6%  -11.52% (p=0.002 n=6)
RenderLine/with_icons-3                                3.796µ ±  8%    3.300µ ±  6%  -13.09% (p=0.002 n=6)
LazyLoad/50_entries-3                                  233.9µ ±  5%
LazyLoad/200_entries_nested-3                          104.6µ ± 21%
DisplayWidth/ascii-3                                   69.31n ±  8%    67.20n ± 11%        ~ (p=0.132 n=6)
DisplayWidth/mixed_unicode-3                           225.8n ±  6%    275.2n ± 13%  +21.93% (p=0.002 n=6)
TruncateToWidth/no_truncation-3                        17.56n ± 28%    20.04n ± 29%        ~ (p=0.132 n=6)
TruncateToWidth/needs_truncation-3                     932.6n ± 17%   1038.5n ± 10%  +11.35% (p=0.026 n=6)
TreeRebuildVisible/nested_5_levels_461_nodes-3                         2.096µ ± 12%
DetachedLazyLoad/50_entries-3                                          161.3µ ± 28%
DetachedLazyLoad/23_root_entries-3                                     72.59µ ±  8%
geomean                                                1.787µ          1.624µ         -2.47%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                               │ bench-baseline.txt │           bench-current.txt            │
                                               │        B/op        │     B/op      vs base                  │
TreeRebuildVisible/flat_50_files-3                     0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_deep_200_nodes-3           0.000 ± 0%
TreeRebuildVisible/large_1000_nodes-3                  0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/file_node-3                                 392.0 ± 0%       392.0 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/dir_node_cursor-3                           624.0 ± 0%       624.0 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/with_icons-3                                392.0 ± 0%       392.0 ± 0%       ~ (p=1.000 n=6) ¹
LazyLoad/50_entries-3                                34.32Ki ± 0%
LazyLoad/200_entries_nested-3                        16.83Ki ± 2%
DisplayWidth/ascii-3                                   0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
DisplayWidth/mixed_unicode-3                           0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/no_truncation-3                        0.000 ± 0%       0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/needs_truncation-3                     544.0 ± 0%       544.0 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_levels_461_nodes-3                          0.000 ± 0%
DetachedLazyLoad/50_entries-3                                         39.91Ki ± 0%
DetachedLazyLoad/23_root_entries-3                                    18.81Ki ± 0%
geomean                                                           ²                 +0.00%               ³ ²
¹ all samples are equal
² summaries must be >0 to compute geomean
³ benchmark set differs from baseline; geomeans may not be comparable

                                               │ bench-baseline.txt │          bench-current.txt           │
                                               │     allocs/op      │ allocs/op   vs base                  │
TreeRebuildVisible/flat_50_files-3                     0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_deep_200_nodes-3           0.000 ± 0%
TreeRebuildVisible/large_1000_nodes-3                  0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/file_node-3                                 12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/dir_node_cursor-3                           18.00 ± 0%     18.00 ± 0%       ~ (p=1.000 n=6) ¹
RenderLine/with_icons-3                                12.00 ± 0%     12.00 ± 0%       ~ (p=1.000 n=6) ¹
LazyLoad/50_entries-3                                  314.0 ± 0%
LazyLoad/200_entries_nested-3                          151.0 ± 0%
DisplayWidth/ascii-3                                   0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
DisplayWidth/mixed_unicode-3                           0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/no_truncation-3                        0.000 ± 0%     0.000 ± 0%       ~ (p=1.000 n=6) ¹
TruncateToWidth/needs_truncation-3                     3.000 ± 0%     3.000 ± 0%       ~ (p=1.000 n=6) ¹
TreeRebuildVisible/nested_5_levels_461_nodes-3                        0.000 ± 0%
DetachedLazyLoad/50_entries-3                                         365.0 ± 0%
DetachedLazyLoad/23_root_entries-3                                    166.0 ± 0%
geomean                                                           ²               +0.00%               ³ ²
¹ all samples are equal
² summaries must be >0 to compute geomean
³ benchmark set differs from baseline; geomeans may not be comparable

pkg: github.com/jongio/grut/internal/panels/gitdiff
                                                   │ bench-baseline.txt │          bench-current.txt           │
                                                   │       sec/op       │    sec/op     vs base                │
InlineDiffRender/10_lines-3                                37.20µ ±  5%
InlineDiffRender/100_lines-3                               316.1µ ±  4%
InlineDiffRender/1000_lines-3                              3.187m ± 11%
SideBySideDiffRender/10_lines-3                            64.67µ ±  5%
SideBySideDiffRender/100_lines-3                           574.3µ ±  7%
SideBySideDiffRender/1000_lines-3                          5.422m ± 13%
PairDiffLines/20_lines_mixed-3                             245.3n ± 24%   226.8n ± 25%       ~ (p=0.699 n=6)
PairDiffLines/200_lines_mixed-3                            1.484µ ± 26%   1.513µ ± 20%       ~ (p=0.818 n=6)
RenderViewport/small-3                                     4.246µ ±  2%
RenderViewport/large_scrolled-3                            4.413µ ± 23%
MemoryGrowth/inline_100_lines-3                            328.8µ ±  6%
MemoryGrowth/inline_1000_lines-3                           3.378m ±  8%
MemoryGrowth/sidebyside_100_lines-3                        604.7µ ±  5%
MemoryGrowth/sidebyside_1000_lines-3                       5.849m ±  6%
InlineDiffRenderExact/10_lines-3                                          39.64µ ± 28%
InlineDiffRenderExact/100_lines-3                                         320.2µ ±  7%
InlineDiffRenderExact/1000_lines-3                                        3.151m ±  9%
InlineDiffRenderCold-3                                                    297.5µ ±  9%
SideBySideDiffRenderExact/10_lines-3                                      65.10µ ±  5%
SideBySideDiffRenderExact/100_lines-3                                     507.6µ ± 15%
SideBySideDiffRenderExact/1000_lines-3                                    5.673m ±  8%
SideBySideDiffRenderCold-3                                                591.3µ ±  7%
RenderViewportWithStats/small-3                                           4.827µ ± 11%
RenderViewportWithStats/large_scrolled-3                                  4.134µ ± 13%
DiffWordsBoundedAllocations/50_tokens-3                                   15.56µ ±  9%
DiffWordsBoundedAllocations/200_tokens-3                                  210.8µ ±  3%
DiffWordsBoundedAllocations/400_tokens-3                                  837.1µ ±  3%
DiffWordsBoundedAllocations/over_cap_tokens-3                             3.894µ ± 11%
DiffWordsBoundedAllocations/one_mib_over_cap-3                            3.906µ ±  4%
DiffWordsBoundedAllocations/one_mib_single_token-3                        6.210m ±  3%
geomean                                                    124.0µ         71.43µ        -2.94%               ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                                   │ bench-baseline.txt │          bench-current.txt           │
                                                   │        B/op        │     B/op      vs base                │
InlineDiffRender/10_lines-3                                4.016Ki ± 0%
InlineDiffRender/100_lines-3                               33.07Ki ± 0%
InlineDiffRender/1000_lines-3                              322.4Ki ± 0%
SideBySideDiffRender/10_lines-3                            15.50Ki ± 0%
SideBySideDiffRender/100_lines-3                           142.5Ki ± 0%
SideBySideDiffRender/1000_lines-3                          1.333Mi ± 0%
PairDiffLines/20_lines_mixed-3                               416.0 ± 0%     416.0 ± 0%       ~ (p=1.000 n=6) ¹
PairDiffLines/200_lines_mixed-3                            3.469Ki ± 0%   3.469Ki ± 0%       ~ (p=1.000 n=6) ¹
RenderViewport/small-3                                     6.141Ki ± 0%
RenderViewport/large_scrolled-3                            6.141Ki ± 0%
MemoryGrowth/inline_100_lines-3                            33.07Ki ± 0%
MemoryGrowth/inline_1000_lines-3                           322.2Ki ± 0%
MemoryGrowth/sidebyside_100_lines-3                        142.5Ki ± 0%
MemoryGrowth/sidebyside_1000_lines-3                       1.333Mi ± 0%
InlineDiffRenderExact/10_lines-3                                          4.016Ki ± 0%
InlineDiffRenderExact/100_lines-3                                         33.47Ki ± 0%
InlineDiffRenderExact/1000_lines-3                                        334.7Ki ± 0%
InlineDiffRenderCold-3                                                    37.97Ki ± 0%
SideBySideDiffRenderExact/10_lines-3                                      15.50Ki ± 0%
SideBySideDiffRenderExact/100_lines-3                                     144.3Ki ± 0%
SideBySideDiffRenderExact/1000_lines-3                                    1.410Mi ± 0%
SideBySideDiffRenderCold-3                                                148.8Ki ± 0%
RenderViewportWithStats/small-3                                           6.367Ki ± 0%
RenderViewportWithStats/large_scrolled-3                                  6.375Ki ± 0%
DiffWordsBoundedAllocations/50_tokens-3                                   4.125Ki ± 0%
DiffWordsBoundedAllocations/200_tokens-3                                  18.12Ki ± 0%
DiffWordsBoundedAllocations/400_tokens-3                                  36.62Ki ± 0%
DiffWordsBoundedAllocations/over_cap_tokens-3                             18.12Ki ± 0%
DiffWordsBoundedAllocations/one_mib_over_cap-3                            18.12Ki ± 0%
DiffWordsBoundedAllocations/one_mib_single_token-3                          896.0 ± 0%
geomean                                                    38.23Ki        17.94Ki       +0.00%               ²
¹ all samples are equal
² benchmark set differs from baseline; geomeans may not be comparable

                                                   │ bench-baseline.txt │          bench-current.txt          │
                                                   │     allocs/op      │  allocs/op   vs base                │
InlineDiffRender/10_lines-3                                  122.0 ± 0%
InlineDiffRender/100_lines-3                                1.071k ± 0%
InlineDiffRender/1000_lines-3                               10.44k ± 0%
SideBySideDiffRender/10_lines-3                              217.0 ± 0%
SideBySideDiffRender/100_lines-3                            2.013k ± 0%
SideBySideDiffRender/1000_lines-3                           19.17k ± 0%
PairDiffLines/20_lines_mixed-3                               3.000 ± 0%    3.000 ± 0%       ~ (p=1.000 n=6) ¹
PairDiffLines/200_lines_mixed-3                              3.000 ± 0%    3.000 ± 0%       ~ (p=1.000 n=6) ¹
RenderViewport/small-3                                       11.00 ± 0%
RenderViewport/large_scrolled-3                              12.00 ± 0%
MemoryGrowth/inline_100_lines-3                             1.071k ± 0%
MemoryGrowth/inline_1000_lines-3                            10.44k ± 0%
MemoryGrowth/sidebyside_100_lines-3                         2.013k ± 0%
MemoryGrowth/sidebyside_1000_lines-3                        19.17k ± 0%
InlineDiffRenderExact/10_lines-3                                           122.0 ± 0%
InlineDiffRenderExact/100_lines-3                                         1.096k ± 0%
InlineDiffRenderExact/1000_lines-3                                        10.96k ± 0%
InlineDiffRenderCold-3                                                    1.110k ± 0%
SideBySideDiffRenderExact/10_lines-3                                       217.0 ± 0%
SideBySideDiffRenderExact/100_lines-3                                     2.044k ± 0%
SideBySideDiffRenderExact/1000_lines-3                                    20.44k ± 0%
SideBySideDiffRenderCold-3                                                2.058k ± 0%
RenderViewportWithStats/small-3                                            18.00 ± 0%
RenderViewportWithStats/large_scrolled-3                                   19.00 ± 0%
DiffWordsBoundedAllocations/50_tokens-3                                    8.000 ± 0%
DiffWordsBoundedAllocations/200_tokens-3                                   12.00 ± 0%
DiffWordsBoundedAllocations/400_tokens-3                                   14.00 ± 0%
DiffWordsBoundedAllocations/over_cap_tokens-3                              6.000 ± 0%
DiffWordsBoundedAllocations/one_mib_over_cap-3                             6.000 ± 0%
DiffWordsBoundedAllocations/one_mib_single_token-3                         4.000 ± 0%
geomean                                                      422.9         80.02       +0.00%               ²
¹ all samples are equal
² benchmark set differs from baseline; geomeans may not be comparable

                                     │ bench-baseline.txt │
                                     │    gc-cycles/op    │
MemoryGrowth/inline_100_lines-3               9.655m ± 2%
MemoryGrowth/inline_1000_lines-3              98.45m ± 2%
MemoryGrowth/sidebyside_100_lines-3           44.31m ± 1%
MemoryGrowth/sidebyside_1000_lines-3          464.3m ± 1%
geomean                                       66.50m

                                     │ bench-baseline.txt │
                                     │  heap-inuse-b/op   │
MemoryGrowth/inline_100_lines-3            -17.80 ± -5%
MemoryGrowth/inline_1000_lines-3           -878.1 ± -6%
MemoryGrowth/sidebyside_100_lines-3        -32.24 ± -7%
MemoryGrowth/sidebyside_1000_lines-3      -2.240k ± -4%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

Note

No significant regressions on darwin-arm64 (threshold: 40%, same-runner comparison).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 68e8c4bf-5916-4bd0-bc26-b7b1aeb2a834
@jongio
jongio merged commit 8d37c91 into main Aug 17, 2026
12 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant