feat/data-dnd e05cb15

README.md RawHistoryFolder

Headless frame-cost bench

bench.sh measures NeferWL's CPU time and voluntary context switches per presented frame on a 5120x2160 headless output while chromium animates a small part of a page.

Requires go, chromium and python3. Frames are counted from the renderer's frame debug entries, which the script turns on.

tools/bench/bench.sh spin60.html 15   # CSS spinner, 60 fps
tools/bench/bench.sh gif.html 15      # 32x32 GIF, 20 fps

Environment: BENCH_X11=1 runs chromium through XWayland, BENCH_DEBUG=<categories> adds --debug categories, BENCH_KEEP=1 leaves the processes running, BENCH_PPROF=<addr> sets the pprof address (default localhost:6061).

idle.html is a static page: run it with BENCH_IDLE=1 tools/bench/bench.sh idle.html 15 (no frame is required). The output also reports cs/s and, for the thread with the most voluntary switches (usually the Go runtime's sysmon), its scheduler wakes per second (top_wakes/s, schedstat field 3). BENCH_ROOT=<worktree> builds neferwl from another worktree for A/B runs.

source
1# Headless frame-cost bench
2
3`bench.sh` measures NeferWL's CPU time and voluntary context switches per presented frame on a 5120x2160 headless output while chromium animates a small part of a page.
4
5Requires `go`, `chromium` and `python3`. Frames are counted from the renderer's `frame` debug entries, which the script turns on.
6
7    tools/bench/bench.sh spin60.html 15   # CSS spinner, 60 fps
8    tools/bench/bench.sh gif.html 15      # 32x32 GIF, 20 fps
9
10Environment: `BENCH_X11=1` runs chromium through XWayland, `BENCH_DEBUG=<categories>` adds `--debug` categories, `BENCH_KEEP=1` leaves the processes running, `BENCH_PPROF=<addr>` sets the pprof address (default `localhost:6061`).
11
12`idle.html` is a static page: run it with `BENCH_IDLE=1 tools/bench/bench.sh idle.html 15` (no frame is required). The output also reports `cs/s` and, for the thread with the most voluntary switches (usually the Go runtime's sysmon), its scheduler wakes per second (`top_wakes/s`, schedstat field 3). `BENCH_ROOT=<worktree>` builds neferwl from another worktree for A/B runs.

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 25

Tags 10

↑↓ moveenter openesc close