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:
process_entryconfig_completecef_library_load_begin(immediately beforeInitWithApp)cef_initializedbrowser_create_requestedfirst_accelerated_paint_receivedfirst_dmabuf_texture_swap(afterGtkPicture.SetPaintablesucceeds)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.