photocraft/docs
Tanish Manku b09aeae2e2
Low-Latency Drawing preference (vsync off, opt-in), plus present-mode overrides for testers (#1343) (#5274)
* PHOTOCRAFT_PRESENT_MODE / PHOTOCRAFT_FRAME_LATENCY launch overrides for latency A/B tests (#1343)

Linux traces put the remaining stroke latency in presentation queueing (the app's frame fits
in one refresh; the rest waits on the swap chain), and an NVIDIA user cured it by forcing
vsync off. Testers can now compare without rebuilding: PHOTOCRAFT_PRESENT_MODE (fifo,
mailbox, immediate, autovsync, autonovsync) and PHOTOCRAFT_FRAME_LATENCY (1-3), applied over
the platform default. Bad values are logged and ignored. The active mode is logged at start,
kept in GpuInfo.present and shown in every stroke trace line.

RTX 5090, Vulkan, 120 Hz: default autovsync/latency 1 waits 6 ms per 8.3 ms frame; mailbox
renders every 2.3 ms with 0.2 ms wait, so each vsync shows the newest frame.

* docs: present mode and frame latency overrides

* Present mode overrides never request a mode the driver may lack (Mailbox crashed on X11/NVIDIA)

* Preferences › Performance › Low-Latency Drawing, on by default: no vsync wait while drawing (#1343)

Testers' traces put the ~50 ms stroke lag in the swap chain's vsync wait. With vsync off it
disappears (X11/NVIDIA; Windows/NVIDIA via the driver), and a shorter queue doesn't help. The
surface now presents with AutoNoVsync by default: wgpu picks Immediate, else Mailbox, else
Fifo by what the driver offers, so no unsupported mode is ever requested. Turning the
preference off brings vsync back (smooth, but late). It applies at the next launch, like the
other graphics settings. Where only Immediate exists the canvas may tear while it changes;
frames render as fast as input arrives during a stroke and stop when idle.

* Runtime and launch controls: ui.set strokeTrace, --stroke-trace, --present-mode, --frame-latency

The retro's remaining gap: the stroke trace and the presentation overrides were env-only. The trace now switches at runtime over the control channel (ui.set {"strokeTrace": true|false|"stderr"|path}) and with --stroke-trace; --present-mode / --frame-latency sit beside their env vars and win over them. Bad values are reported and ignored; none fails a launch.

* docs: strokeTrace beside the other ui.set fields

* docs: regenerate the scorecard after rebasing onto main

* Low-Latency Drawing: frames capped at 240 fps without vsync (after #4472); ui.set strokeTrace takes on/off only (a CSV path is launch-only); tearing documented as usual (Immediate); pref hidden on web; doc comment order

* stroke_trace: from_value doc says ui.set passes only on or off

* Low-Latency Drawing ships off (opt-in), per the owner's decision

* docs: present mode default is vsync (Low-Latency Drawing ships off)
2026-10-15 15:23:47 -07:00
..
brand Licensing: MIT OR Apache-2.0 files, NOTICE, ArtCraft brand terms, attribution 2026-10-04 10:06:17 -04:00
images PSD text fill: keep the fix and its tests, drop the proof-only screenshots and example 2026-10-09 01:57:17 +07:00
architecture.md CI: fix the tests that keep main red, and ship the wasm as compressed parts (#5926, #5302) (#5941) 2026-10-15 09:21:30 +02:00
batch-naming.md Add filename templates to Batch export (#4466) 2026-10-13 13:03:02 -04:00
brush-parity.md fix(ui): show brush tip thumbnails while dragging presets (#5203) 2026-10-14 13:08:05 -04:00
camera-raw-histogram.md Camera Raw: read and write settings as a live PSD Smart Filter (part of #215) (#459) 2026-10-07 17:59:16 -04:00
camera-raw-zoom.md Rework Camera Raw filter preview and navigation (#781) 2026-10-07 18:40:24 -04:00
color-picker.md Type Color Picker opens the full Color Picker; screen eyedropper with a pixel loupe (#1232) 2026-10-09 00:30:50 -04:00
context-menu-inventory.md Zoom and Hand tools: right-click the canvas for the view menu (#3242) (#3255) 2026-10-11 12:50:01 -04:00
context-menu-parity.md Layers: right-clicking a layer-mask thumbnail opens the mask menu (fixes #4575) (#4605) 2026-10-13 01:15:13 -04:00
contributing.md Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#2696) 2026-10-10 15:09:04 -04:00
contributors.md About: contributor and model credits compiled in (grab bag + table, self-submitted names) (#898) 2026-10-07 21:22:11 -04:00
control-protocol.md Low-Latency Drawing preference (vsync off, opt-in), plus present-mode overrides for testers (#1343) (#5274) 2026-10-15 15:23:47 -07:00
decisions.md Keep duplicated Smart Objects linked to shared contents (#2222) 2026-10-10 05:05:56 -04:00
development.md Low-Latency Drawing preference (vsync off, opt-in), plus present-mode overrides for testers (#1343) (#5274) 2026-10-15 15:23:47 -07:00
file-format-parity.md File > Save As / Save a Copy / CLI can write PDF (#3401) (#3441) 2026-10-15 01:03:27 -04:00
five-algorithm-performance.json Five exact-output speedups: dense Extrude 160s to 0.39s (#2685) 2026-10-11 10:50:45 -04:00
five-algorithm-performance.md Five exact-output speedups: dense Extrude 160s to 0.39s (#2685) 2026-10-11 10:50:45 -04:00
font-resolution.md fix(type): missing-font checks follow layout's PostScript resolution; split hyphenless style suffixes (#608) 2026-10-13 12:48:09 -04:00
gaps.md File > Save As / Save a Copy / CLI can write PDF (#3401) (#3441) 2026-10-15 01:03:27 -04:00
gpu-composite-reuse.md feat(gpu): composite Blend If on the GPU (#4395) (#4541) 2026-10-13 02:11:23 -04:00
hardware-parity.md Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#2696) 2026-10-10 15:09:04 -04:00
iris-blur-performance.md Speed up Iris Blur without changing output (#2578) 2026-10-10 14:00:53 -04:00
kra.md Add Krita (.kra) import (#4388) 2026-10-12 22:41:38 -04:00
localization-es.md i18n(es): complete dynamic UI translations (#4306) 2026-10-14 15:36:32 -04:00
localization-it.md Italian: native-speaker review of the UI catalog (#4290) 2026-10-12 19:38:55 -04:00
localization-ko.md Improve Korean terminology and dynamic UI translation coverage (#604) 2026-10-07 16:32:47 -04:00
localization-parity.md i18n(es): complete dynamic UI translations (#4306) 2026-10-14 15:36:32 -04:00
localization-zh-hans.md i18n: complete Simplified Chinese catalog and localize brush sections (#359) 2026-10-07 07:46:52 -04:00
localization.md i18n(sr): add a Serbian (Latin, Ekavian) UI catalog (#4436) 2026-10-12 22:50:20 -04:00
mcp.md Docs: document the engine.commands reply shape (#3684) (#3750) 2026-10-13 12:47:32 -04:00
nikon-nef-development.md Keep fitted Camera Raw colour during tuning and crop Nikon D5100 borders (#3201) 2026-10-11 19:12:19 -04:00
octagonal-mask-performance.md Compute exact octagonal mask shifts with bounded workspace (#2154) 2026-10-10 06:46:06 -04:00
ora.md OpenRaster: never overwrite an .ora with less than the document has (#3806) (#3881) 2026-10-13 02:04:02 -04:00
parity-checklist.md Type menu: Anti-Alias › None first and checked; checks follow the edited layer (#2983) (#2984) 2026-10-11 11:35:38 -04:00
pdn.md Add native layered Paint.NET (.pdn) import (#1998) 2026-10-09 21:05:00 -04:00
pixelate-performance.json Pixelate: CMYK Facet 13.7x faster, Lab halftone 5.0x faster (#2588) 2026-10-10 14:03:03 -04:00
pixelate-performance.md Pixelate: CMYK Facet 13.7x faster, Lab halftone 5.0x faster (#2588) 2026-10-10 14:03:03 -04:00
plugins.md Plug-ins: keep the originating error across parallel bands (#1654) 2026-10-09 09:11:00 -04:00
proximity-match-performance.md Proximity Match: 1.5-3.8x faster stroke searches, smaller mask tables (#2101) 2026-10-09 19:34:26 -04:00
quick-selection-performance.md Quick Selection: 3.5x faster CPU strokes with hybrid graph cuts (#2436) 2026-10-10 14:17:48 -04:00
radial-blur-performance.md Optimize Radial Blur sampling without changing output (#1499) 2026-10-09 14:41:52 -04:00
release-playbook.md docs: stop linking readers to the private craftrules repo (#493) (#779) 2026-10-08 15:04:21 -04:00
releasing.md CI: fix the tests that keep main red, and ship the wasm as compressed parts (#5926, #5302) (#5941) 2026-10-15 09:21:30 +02:00
roadmap.md Speed up large-radius Unsharp Mask with guarded FFT convolution (#2987) 2026-10-13 13:23:55 -04:00
scorecard.md Low-Latency Drawing preference (vsync off, opt-in), plus present-mode overrides for testers (#1343) (#5274) 2026-10-15 15:23:47 -07:00
selection-distance-performance.md Selection distance transforms: 7.6-10.6x faster and correct past 4K (#2093) 2026-10-09 19:28:33 -04:00
shape-strokes.md Fix Shape Stroke controls, popup interactions and paint colours (#3019) 2026-10-11 09:46:44 -04:00
target-app-parity.md Shapes: on-canvas corner radius widgets for live rectangles (TOOL-214-12) (#5276) 2026-10-14 15:14:49 -04:00
tilt-shift-performance.md Speed up Tilt-Shift with existing per-level halo trimming (#2880) 2026-10-11 11:58:04 -04:00
ui-design.md Channels: load the targeted layer mask as selection (#5562) 2026-10-14 23:49:15 -04:00
ui-dialogs.md Shortcuts: ⌥⇧⌘N makes a new layer without the dialog (#4794) (#4807) 2026-10-13 12:11:37 -04:00
ui-parity.md Pen: Auto Add/Delete on the path being drawn (#6140) (#6172) 2026-10-15 13:12:35 -06:00
unsharp-mask-performance.md Speed up large-radius Unsharp Mask with guarded FFT convolution (#2987) 2026-10-13 13:23:55 -04:00