detached 8db9a6a

docs: document performance profiles and tuning options

commit
8db9a6a902371598568c61c37c3862a82e90808c
author
brice · · 2025-12-28 17:55 UTC
committer
brice · · 2025-12-29 17:28 UTC
parent
74a67e9
signature
unsigned
1 file · +90 -0
M docs/CONFIG.md +90 -0
@@ -491,6 +491,96 @@ dumber config migrate
491491 dumber config migrate --yes
492492 ```
493493
494+## Performance Profiles
495+
496+Performance profiles provide preset configurations for WebKitGTK tuning. These settings affect Skia rendering threads, memory pressure handling, and WebView pool behavior.
497+
498+> **Note:** Performance settings are applied at browser startup. Changes require a restart to take effect.
499+
500+| Key | Type | Default | Valid Values | Description |
501+|-----|------|---------|--------------|-------------|
502+| `performance.profile` | string | `"default"` | `default`, `lite`, `max`, `custom` | Performance profile selection |
503+
504+### Profiles
505+
506+| Profile | Description | Use Case |
507+|---------|-------------|----------|
508+| `default` | No tuning, uses WebKit defaults | Normal browsing, most users |
509+| `lite` | Reduced resource usage | Low-RAM systems (< 4GB), battery saving |
510+| `max` | Maximum responsiveness | Heavy pages (GitHub PRs, complex SPAs), high-end systems |
511+| `custom` | Manual control over all settings | Advanced users who want fine-grained control |
512+
513+### Profile Settings Matrix
514+
515+| Setting | default | lite | max |
516+|---------|---------|------|-----|
517+| Skia CPU threads | unset | 2 | `NumCPU()/2` (min 4) |
518+| Skia GPU threads | unset | unset | 2 |
519+| Web process memory (MB) | unset | 512 | 2048 |
520+| Network process memory (MB) | unset | 256 | 512 |
521+| Conservative threshold | unset | 0.25 | 0.5 |
522+| Strict threshold | unset | 0.4 | 0.7 |
523+| Kill threshold | unset | 0.8 | unset (never) |
524+| WebView pool prewarm | 4 | 2 | 8 |
525+
526+**Example:**
527+```toml
528+[performance]
529+profile = "default" # Most users - no tuning needed
530+
531+# For low-RAM systems:
532+# profile = "lite"
533+
534+# For heavy pages (GitHub PRs, complex web apps):
535+# profile = "max"
536+
537+# For manual control:
538+# profile = "custom"
539+```
540+
541+### Custom Profile Settings
542+
543+When `profile = "custom"`, you can configure individual tuning options:
544+
545+| Key | Type | Default | Description |
546+|-----|------|---------|-------------|
547+| `performance.skia_cpu_painting_threads` | int | `0` | Skia CPU rendering threads (0=unset) |
548+| `performance.skia_gpu_painting_threads` | int | `-1` | Skia GPU rendering threads (-1=unset, 0=disable) |
549+| `performance.skia_enable_cpu_rendering` | bool | `false` | Force CPU rendering |
550+| `performance.web_process_memory_limit_mb` | int | `0` | Web process memory limit in MB (0=unset) |
551+| `performance.web_process_memory_poll_interval_sec` | float | `0` | Memory check interval (0=WebKit default: 30s) |
552+| `performance.web_process_memory_conservative_threshold` | float | `0` | Conservative cleanup threshold (0=unset) |
553+| `performance.web_process_memory_strict_threshold` | float | `0` | Strict cleanup threshold (0=unset) |
554+| `performance.web_process_memory_kill_threshold` | float | `-1` | Process kill threshold (-1=unset, 0=never kill) |
555+| `performance.network_process_memory_limit_mb` | int | `0` | Network process memory limit in MB |
556+| `performance.network_process_memory_poll_interval_sec` | float | `0` | Network memory check interval |
557+| `performance.network_process_memory_conservative_threshold` | float | `0` | Network conservative threshold |
558+| `performance.network_process_memory_strict_threshold` | float | `0` | Network strict threshold |
559+| `performance.network_process_memory_kill_threshold` | float | `-1` | Network process kill threshold |
560+| `performance.webview_pool_prewarm_count` | int | `4` | WebViews to pre-create at startup |
561+| `performance.zoom_cache_size` | int | `256` | Domain zoom levels to cache |
562+
563+**Custom profile example:**
564+```toml
565+[performance]
566+profile = "custom"
567+
568+# Skia threading - tune for your CPU
569+skia_cpu_painting_threads = 4
570+skia_gpu_painting_threads = 2
571+
572+# Web process memory pressure
573+web_process_memory_limit_mb = 1024
574+web_process_memory_conservative_threshold = 0.4
575+web_process_memory_strict_threshold = 0.6
576+web_process_memory_kill_threshold = -1 # Never kill
577+
578+# WebView pool
579+webview_pool_prewarm_count = 6
580+```
581+
582+> **Important:** Individual tuning fields are ignored unless `profile = "custom"`. Setting individual fields with any other profile will produce a validation warning.
583+
494584 ## Environment Variables
495585
496586 All config values can be overridden via environment variables with the prefix `DUMBER_`:
@@ -491,6 +491,96 @@ dumber config migrate
491 dumber config migrate --yes491 dumber config migrate --yes
492 ```492 ```
493 493
494+## Performance Profiles
495+
496+Performance profiles provide preset configurations for WebKitGTK tuning. These settings affect Skia rendering threads, memory pressure handling, and WebView pool behavior.
497+
498+> **Note:** Performance settings are applied at browser startup. Changes require a restart to take effect.
499+
500+| Key | Type | Default | Valid Values | Description |
501+|-----|------|---------|--------------|-------------|
502+| `performance.profile` | string | `"default"` | `default`, `lite`, `max`, `custom` | Performance profile selection |
503+
504+### Profiles
505+
506+| Profile | Description | Use Case |
507+|---------|-------------|----------|
508+| `default` | No tuning, uses WebKit defaults | Normal browsing, most users |
509+| `lite` | Reduced resource usage | Low-RAM systems (< 4GB), battery saving |
510+| `max` | Maximum responsiveness | Heavy pages (GitHub PRs, complex SPAs), high-end systems |
511+| `custom` | Manual control over all settings | Advanced users who want fine-grained control |
512+
513+### Profile Settings Matrix
514+
515+| Setting | default | lite | max |
516+|---------|---------|------|-----|
517+| Skia CPU threads | unset | 2 | `NumCPU()/2` (min 4) |
518+| Skia GPU threads | unset | unset | 2 |
519+| Web process memory (MB) | unset | 512 | 2048 |
520+| Network process memory (MB) | unset | 256 | 512 |
521+| Conservative threshold | unset | 0.25 | 0.5 |
522+| Strict threshold | unset | 0.4 | 0.7 |
523+| Kill threshold | unset | 0.8 | unset (never) |
524+| WebView pool prewarm | 4 | 2 | 8 |
525+
526+**Example:**
527+```toml
528+[performance]
529+profile = "default" # Most users - no tuning needed
530+
531+# For low-RAM systems:
532+# profile = "lite"
533+
534+# For heavy pages (GitHub PRs, complex web apps):
535+# profile = "max"
536+
537+# For manual control:
538+# profile = "custom"
539+```
540+
541+### Custom Profile Settings
542+
543+When `profile = "custom"`, you can configure individual tuning options:
544+
545+| Key | Type | Default | Description |
546+|-----|------|---------|-------------|
547+| `performance.skia_cpu_painting_threads` | int | `0` | Skia CPU rendering threads (0=unset) |
548+| `performance.skia_gpu_painting_threads` | int | `-1` | Skia GPU rendering threads (-1=unset, 0=disable) |
549+| `performance.skia_enable_cpu_rendering` | bool | `false` | Force CPU rendering |
550+| `performance.web_process_memory_limit_mb` | int | `0` | Web process memory limit in MB (0=unset) |
551+| `performance.web_process_memory_poll_interval_sec` | float | `0` | Memory check interval (0=WebKit default: 30s) |
552+| `performance.web_process_memory_conservative_threshold` | float | `0` | Conservative cleanup threshold (0=unset) |
553+| `performance.web_process_memory_strict_threshold` | float | `0` | Strict cleanup threshold (0=unset) |
554+| `performance.web_process_memory_kill_threshold` | float | `-1` | Process kill threshold (-1=unset, 0=never kill) |
555+| `performance.network_process_memory_limit_mb` | int | `0` | Network process memory limit in MB |
556+| `performance.network_process_memory_poll_interval_sec` | float | `0` | Network memory check interval |
557+| `performance.network_process_memory_conservative_threshold` | float | `0` | Network conservative threshold |
558+| `performance.network_process_memory_strict_threshold` | float | `0` | Network strict threshold |
559+| `performance.network_process_memory_kill_threshold` | float | `-1` | Network process kill threshold |
560+| `performance.webview_pool_prewarm_count` | int | `4` | WebViews to pre-create at startup |
561+| `performance.zoom_cache_size` | int | `256` | Domain zoom levels to cache |
562+
563+**Custom profile example:**
564+```toml
565+[performance]
566+profile = "custom"
567+
568+# Skia threading - tune for your CPU
569+skia_cpu_painting_threads = 4
570+skia_gpu_painting_threads = 2
571+
572+# Web process memory pressure
573+web_process_memory_limit_mb = 1024
574+web_process_memory_conservative_threshold = 0.4
575+web_process_memory_strict_threshold = 0.6
576+web_process_memory_kill_threshold = -1 # Never kill
577+
578+# WebView pool
579+webview_pool_prewarm_count = 6
580+```
581+
582+> **Important:** Individual tuning fields are ignored unless `profile = "custom"`. Setting individual fields with any other profile will produce a validation warning.
583+
494 ## Environment Variables584 ## Environment Variables
495 585
496 All config values can be overridden via environment variables with the prefix `DUMBER_`:586 All config values can be overridden via environment variables with the prefix `DUMBER_`:

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