v0.31.0 bf0756b

first-presentation.md RawHistoryFolder

CEF accelerated first-presentation startup trace

Dumber records this cold-start timeline only for the accelerated CEF → DMABUF → GTK path. It is not a backend-neutral startup metric: the WebKit backend does not add milestones to this trace and never emits this CEF summary.

For a selected CEF GUI process, Dumber captures neutral process_entry and config_complete timestamps, then activates and seeds this CEF-owned trace only after configuration selects CEF. CEF helper processes, WebKit GUI startup, the standalone omnibox, and CLI commands never initialize this trace, record its milestones, or emit its summary. A selected CEF GUI trace accepts these one-shot milestones only in order:

  1. process_entry
  2. config_complete
  3. cef_library_load_begin (immediately before InitWithApp)
  4. cef_initialized
  5. browser_create_requested
  6. first_accelerated_paint_received
  7. first_dmabuf_texture_swap (after GtkPicture.SetPaintable succeeds)
  8. first_gtk_presentation (the subsequent GTK frame-clock after-paint)

The CEF-to-GTK bridge owns the native accelerated-paint, DMABUF texture-swap, and GTK presentation boundaries. Dumber records the bridge's ordered callbacks; it does not synthesize them for another engine or rendering path. CEF library-load completion is intentionally not recorded: InitWithApp is an opaque operation. Duplicate, unknown, and out-of-order transitions are rejected. At the last milestone Dumber emits exactly one normal-level JSON summary (startup_trace: first presentation) with the selected CEF render backend, an incomplete_reason, total milliseconds, and monotonic milestones.

A non-DMABUF CEF backend or a missing accelerated callback does not produce a complete summary and is not comparable with this measurement. In particular, WebKit startup must be measured with a separately defined WebKit-specific contract rather than this CEF trace.

Reproducible collection

Build the candidate, then run:

DUMBER_FIRST_PRESENTATION_BIN="$PWD/dist/dumber" \
DUMBER_MACHINE_GPU_PROFILE=integrated-gpu \
  scripts/collect_first_presentation.sh

The collector is for the accelerated CEF/DMABUF/GTK contract above. By default each collection is a fresh directory below $XDG_STATE_HOME/dumber/roadmap-evidence (or $HOME/.local/state/dumber/roadmap-evidence when XDG_STATE_HOME is unset), not in the repository. DUMBER_FIRST_PRESENTATION_OUTPUT may override it only with a new absolute directory below an existing non-symlink parent. The collector never clears or reuses a caller-supplied path.

The script requires the current display and the CEF 147 runtime at ~/.local/share/cef-147-runtime (override with DUMBER_CEF_DIR). It performs exactly five bounded launches with fresh XDG homes and CEF root cache, fixes the DMABUF/Vulkan renderer, and writes exactly metadata.json, run-01.json through run-05.json, and baseline.json. Metadata includes only coarse, comparison-safe OS/architecture, display protocol, and machine/GPU profile labels. Set DUMBER_MACHINE_GPU_PROFILE to one of generic-gpu, integrated-gpu, discrete-gpu, hybrid-gpu, virtual-gpu, or unknown-gpu; do not use a device model or other identifier. Publish only the seven reviewed JSON files to an external Gist. Raw logs and temporary XDG homes are removed and must not be published. metadata.json derives the selected github.com/bnema/purego-cef2gtk pseudo-version and its full immutable Git origin hash from Go module metadata; branch selectors or missing origin metadata fail collection. A missing or incomplete timeline, non-DMABUF backend, or invalid run also fails collection.

source
1# CEF accelerated first-presentation startup trace
2
3Dumber records this cold-start timeline **only for the accelerated CEF → DMABUF
4→ GTK path**. It is not a backend-neutral startup metric: the WebKit backend
5does not add milestones to this trace and never emits this CEF summary.
6
7For a selected CEF GUI process, Dumber captures neutral `process_entry` and
8`config_complete` timestamps, then activates and seeds this CEF-owned trace only
9after configuration selects CEF. CEF helper processes, WebKit GUI startup, the
10standalone omnibox, and CLI commands never initialize this trace, record its
11milestones, or emit its summary. A selected CEF GUI trace accepts these one-shot
12milestones only in order:
13
141. `process_entry`
152. `config_complete`
163. `cef_library_load_begin` (immediately before `InitWithApp`)
174. `cef_initialized`
185. `browser_create_requested`
196. `first_accelerated_paint_received`
207. `first_dmabuf_texture_swap` (after `GtkPicture.SetPaintable` succeeds)
218. `first_gtk_presentation` (the subsequent GTK frame-clock after-paint)
22
23The CEF-to-GTK bridge owns the native accelerated-paint, DMABUF texture-swap,
24and GTK presentation boundaries. Dumber records the bridge's ordered callbacks;
25it does not synthesize them for another engine or rendering path. CEF
26library-load completion is intentionally not recorded: `InitWithApp` is an
27opaque operation. Duplicate, unknown, and out-of-order transitions are
28rejected. At the last milestone Dumber emits exactly one normal-level JSON
29summary (`startup_trace: first presentation`) with the selected CEF render
30backend, an `incomplete_reason`, total milliseconds, and monotonic milestones.
31
32A non-DMABUF CEF backend or a missing accelerated callback does not produce a
33complete summary and is not comparable with this measurement. In particular,
34WebKit startup must be measured with a separately defined WebKit-specific
35contract rather than this CEF trace.
36
37## Reproducible collection
38
39Build the candidate, then run:
40
41```bash
42DUMBER_FIRST_PRESENTATION_BIN="$PWD/dist/dumber" \
43DUMBER_MACHINE_GPU_PROFILE=integrated-gpu \
44  scripts/collect_first_presentation.sh
45```
46
47The collector is for the accelerated CEF/DMABUF/GTK contract above. By default
48each collection is a fresh directory below
49`$XDG_STATE_HOME/dumber/roadmap-evidence` (or
50`$HOME/.local/state/dumber/roadmap-evidence` when `XDG_STATE_HOME` is unset),
51not in the repository. `DUMBER_FIRST_PRESENTATION_OUTPUT` may override it only
52with a new absolute directory below an existing non-symlink parent. The
53collector never clears or reuses a caller-supplied path.
54
55The script requires the current display and the CEF 147 runtime at
56`~/.local/share/cef-147-runtime` (override with `DUMBER_CEF_DIR`). It performs
57exactly five bounded launches with fresh XDG homes and CEF root cache, fixes the
58DMABUF/Vulkan renderer, and writes exactly `metadata.json`, `run-01.json`
59through `run-05.json`, and `baseline.json`. Metadata includes only coarse,
60comparison-safe OS/architecture, display protocol, and machine/GPU profile
61labels. Set `DUMBER_MACHINE_GPU_PROFILE` to one of `generic-gpu`,
62`integrated-gpu`, `discrete-gpu`, `hybrid-gpu`, `virtual-gpu`, or `unknown-gpu`;
63do not use a device model or other identifier. Publish only the seven reviewed
64JSON files to an external Gist. Raw logs and temporary XDG homes are removed and
65must not be published. `metadata.json` derives the selected
66`github.com/bnema/purego-cef2gtk` pseudo-version and its full immutable Git
67origin hash from Go module metadata; branch selectors or missing origin metadata
68fail collection. A missing or incomplete timeline, non-DMABUF backend, or invalid
69run also fails collection.

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 8

Tags 42

↑↓ moveenter openesc close