detached f6521de

feat(webkit): add WebKitEngineConfig and fix env/manager compilation

Create webkit/engine_config.go (infra-side WebKitEngineConfig with
EngineConfigFromConfig converter) and env/settings.go (RenderingSettings
replacing the now-empty port.RenderingEnvSettings). Update env/manager.go,
manager_test.go, and bootstrap/webkit_stack.go to use the new local type.
Remove ApplyEnvironment from port.RenderingEnvManager interface and delete
the empty port.RenderingEnvSettings struct.
commit
f6521de25aedb25e70485a4cbd4a60fd6a74d844
author
brice · · 2026-03-15 16:16 UTC
parent
82dcb2d
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
6 files · +124 -27
M internal/application/port/rendering_env.go +4 -9
@@ -17,23 +17,18 @@ const (
1717 GPUVendorUnknown GPUVendor = "unknown"
1818 )
1919
20-// RenderingEnvSettings contains all rendering-related environment settings.
21-// This is a port-local type to avoid import cycles with config package.
22-type RenderingEnvSettings struct {
23-}
24-
2520 // RenderingEnvManager configures rendering environment variables
2621 // for GStreamer, WebKit, and GTK/GSK.
2722 // Environment variables must be set BEFORE GTK/WebKit initialization.
23+//
24+// Note: ApplyEnvironment was removed from this interface because rendering
25+// settings are engine-specific (WebKit/GTK/GStreamer) and have moved to
26+// internal/infrastructure/env.RenderingSettings to avoid port bloat.
2827 type RenderingEnvManager interface {
2928 // DetectGPUVendor identifies the primary GPU vendor from system info.
3029 // Uses /sys/class/drm/card*/device/vendor as primary detection method.
3130 DetectGPUVendor(ctx context.Context) GPUVendor
3231
33- // ApplyEnvironment sets all rendering environment variables.
34- // Must be called before any GTK/GStreamer initialization.
35- ApplyEnvironment(ctx context.Context, settings RenderingEnvSettings) error
36-
3732 // GetAppliedVars returns a map of environment variables that were set.
3833 // Useful for logging and debugging.
3934 GetAppliedVars() map[string]string
@@ -17,23 +17,18 @@ const (
17 GPUVendorUnknown GPUVendor = "unknown"17 GPUVendorUnknown GPUVendor = "unknown"
18 )18 )
19 19
20-// RenderingEnvSettings contains all rendering-related environment settings.
21-// This is a port-local type to avoid import cycles with config package.
22-type RenderingEnvSettings struct {
23-}
24-
25 // RenderingEnvManager configures rendering environment variables20 // RenderingEnvManager configures rendering environment variables
26 // for GStreamer, WebKit, and GTK/GSK.21 // for GStreamer, WebKit, and GTK/GSK.
27 // Environment variables must be set BEFORE GTK/WebKit initialization.22 // Environment variables must be set BEFORE GTK/WebKit initialization.
23+//
24+// Note: ApplyEnvironment was removed from this interface because rendering
25+// settings are engine-specific (WebKit/GTK/GStreamer) and have moved to
26+// internal/infrastructure/env.RenderingSettings to avoid port bloat.
28 type RenderingEnvManager interface {27 type RenderingEnvManager interface {
29 // DetectGPUVendor identifies the primary GPU vendor from system info.28 // DetectGPUVendor identifies the primary GPU vendor from system info.
30 // Uses /sys/class/drm/card*/device/vendor as primary detection method.29 // Uses /sys/class/drm/card*/device/vendor as primary detection method.
31 DetectGPUVendor(ctx context.Context) GPUVendor30 DetectGPUVendor(ctx context.Context) GPUVendor
32 31
33- // ApplyEnvironment sets all rendering environment variables.
34- // Must be called before any GTK/GStreamer initialization.
35- ApplyEnvironment(ctx context.Context, settings RenderingEnvSettings) error
36-
37 // GetAppliedVars returns a map of environment variables that were set.32 // GetAppliedVars returns a map of environment variables that were set.
38 // Useful for logging and debugging.33 // Useful for logging and debugging.
39 GetAppliedVars() map[string]string34 GetAppliedVars() map[string]string
M internal/bootstrap/webkit_stack.go +1 -1
@@ -260,7 +260,7 @@ func configureRenderingEnvironment(
260260
261261 renderEnv := env.NewManager()
262262 gpuVendor := renderEnv.DetectGPUVendor(ctx)
263- renderSettings := port.RenderingEnvSettings{
263+ renderSettings := env.RenderingSettings{
264264 // GStreamer settings
265265 ForceVSync: cfg.Media.ForceVSync,
266266 GLRenderingMode: string(cfg.Media.GLRenderingMode),
@@ -260,7 +260,7 @@ func configureRenderingEnvironment(
260 260
261 renderEnv := env.NewManager()261 renderEnv := env.NewManager()
262 gpuVendor := renderEnv.DetectGPUVendor(ctx)262 gpuVendor := renderEnv.DetectGPUVendor(ctx)
263- renderSettings := port.RenderingEnvSettings{263+ renderSettings := env.RenderingSettings{
264 // GStreamer settings264 // GStreamer settings
265 ForceVSync: cfg.Media.ForceVSync,265 ForceVSync: cfg.Media.ForceVSync,
266 GLRenderingMode: string(cfg.Media.GLRenderingMode),266 GLRenderingMode: string(cfg.Media.GLRenderingMode),
M internal/infrastructure/env/manager.go +8 -6
@@ -78,7 +78,7 @@ func (m *Manager) DetectGPUVendor(ctx context.Context) port.GPUVendor {
7878
7979 // ApplyEnvironment sets all rendering environment variables.
8080 // Must be called before GTK/WebKit initialization.
81-func (m *Manager) ApplyEnvironment(ctx context.Context, settings port.RenderingEnvSettings) error {
81+func (m *Manager) ApplyEnvironment(ctx context.Context, settings RenderingSettings) error {
8282 log := logging.FromContext(ctx)
8383 m.appliedVars = make(map[string]string)
8484
@@ -97,7 +97,7 @@ func (m *Manager) ApplyEnvironment(ctx context.Context, settings port.RenderingE
9797 return nil
9898 }
9999
100-func (m *Manager) applyGStreamerEnv(settings port.RenderingEnvSettings) {
100+func (m *Manager) applyGStreamerEnv(settings RenderingSettings) {
101101 // VSync
102102 if settings.ForceVSync {
103103 m.setEnv("__GL_SYNC_TO_VBLANK", "1")
@@ -149,7 +149,7 @@ func (m *Manager) applyGPUSpecificEnv() {
149149 }
150150 }
151151
152-func (m *Manager) applyWebKitEnv(settings port.RenderingEnvSettings) {
152+func (m *Manager) applyWebKitEnv(settings RenderingSettings) {
153153 if settings.DisableDMABufRenderer {
154154 m.setEnv("WEBKIT_DISABLE_DMABUF_RENDERER", "1")
155155 }
@@ -161,7 +161,7 @@ func (m *Manager) applyWebKitEnv(settings port.RenderingEnvSettings) {
161161 }
162162 }
163163
164-func (m *Manager) applyGTKEnv(settings port.RenderingEnvSettings) {
164+func (m *Manager) applyGTKEnv(settings RenderingSettings) {
165165 renderer := strings.ToLower(strings.TrimSpace(settings.GSKRenderer))
166166 if renderer != "" && renderer != "auto" {
167167 m.setEnv("GSK_RENDERER", renderer)
@@ -187,7 +187,7 @@ func (m *Manager) applyGTKEnv(settings port.RenderingEnvSettings) {
187187 }
188188 }
189189
190-func (m *Manager) applyDebugEnv(settings port.RenderingEnvSettings) {
190+func (m *Manager) applyDebugEnv(settings RenderingSettings) {
191191 if settings.ShowFPS {
192192 m.setEnv("WEBKIT_SHOW_FPS", "1")
193193 }
@@ -196,7 +196,7 @@ func (m *Manager) applyDebugEnv(settings port.RenderingEnvSettings) {
196196 }
197197 }
198198
199-func (m *Manager) applySkiaEnv(settings port.RenderingEnvSettings) {
199+func (m *Manager) applySkiaEnv(settings RenderingSettings) {
200200 // CPU painting threads: only set if > 0 and env var not already set
201201 if settings.SkiaCPUPaintingThreads > 0 && os.Getenv("WEBKIT_SKIA_CPU_PAINTING_THREADS") == "" {
202202 m.setEnv("WEBKIT_SKIA_CPU_PAINTING_THREADS", fmt.Sprintf("%d", settings.SkiaCPUPaintingThreads))
@@ -249,4 +249,6 @@ func (*Manager) detectFromDRM() port.GPUVendor {
249249 return port.GPUVendorUnknown
250250 }
251251
252+// Ensure Manager implements port.RenderingEnvManager (DetectGPUVendor, GetAppliedVars).
253+// ApplyEnvironment takes the infra-local RenderingSettings type instead of a port type.
252254 var _ port.RenderingEnvManager = (*Manager)(nil)
@@ -78,7 +78,7 @@ func (m *Manager) DetectGPUVendor(ctx context.Context) port.GPUVendor {
78 78
79 // ApplyEnvironment sets all rendering environment variables.79 // ApplyEnvironment sets all rendering environment variables.
80 // Must be called before GTK/WebKit initialization.80 // Must be called before GTK/WebKit initialization.
81-func (m *Manager) ApplyEnvironment(ctx context.Context, settings port.RenderingEnvSettings) error {81+func (m *Manager) ApplyEnvironment(ctx context.Context, settings RenderingSettings) error {
82 log := logging.FromContext(ctx)82 log := logging.FromContext(ctx)
83 m.appliedVars = make(map[string]string)83 m.appliedVars = make(map[string]string)
84 84
@@ -97,7 +97,7 @@ func (m *Manager) ApplyEnvironment(ctx context.Context, settings port.RenderingE
97 return nil97 return nil
98 }98 }
99 99
100-func (m *Manager) applyGStreamerEnv(settings port.RenderingEnvSettings) {100+func (m *Manager) applyGStreamerEnv(settings RenderingSettings) {
101 // VSync101 // VSync
102 if settings.ForceVSync {102 if settings.ForceVSync {
103 m.setEnv("__GL_SYNC_TO_VBLANK", "1")103 m.setEnv("__GL_SYNC_TO_VBLANK", "1")
@@ -149,7 +149,7 @@ func (m *Manager) applyGPUSpecificEnv() {
149 }149 }
150 }150 }
151 151
152-func (m *Manager) applyWebKitEnv(settings port.RenderingEnvSettings) {152+func (m *Manager) applyWebKitEnv(settings RenderingSettings) {
153 if settings.DisableDMABufRenderer {153 if settings.DisableDMABufRenderer {
154 m.setEnv("WEBKIT_DISABLE_DMABUF_RENDERER", "1")154 m.setEnv("WEBKIT_DISABLE_DMABUF_RENDERER", "1")
155 }155 }
@@ -161,7 +161,7 @@ func (m *Manager) applyWebKitEnv(settings port.RenderingEnvSettings) {
161 }161 }
162 }162 }
163 163
164-func (m *Manager) applyGTKEnv(settings port.RenderingEnvSettings) {164+func (m *Manager) applyGTKEnv(settings RenderingSettings) {
165 renderer := strings.ToLower(strings.TrimSpace(settings.GSKRenderer))165 renderer := strings.ToLower(strings.TrimSpace(settings.GSKRenderer))
166 if renderer != "" && renderer != "auto" {166 if renderer != "" && renderer != "auto" {
167 m.setEnv("GSK_RENDERER", renderer)167 m.setEnv("GSK_RENDERER", renderer)
@@ -187,7 +187,7 @@ func (m *Manager) applyGTKEnv(settings port.RenderingEnvSettings) {
187 }187 }
188 }188 }
189 189
190-func (m *Manager) applyDebugEnv(settings port.RenderingEnvSettings) {190+func (m *Manager) applyDebugEnv(settings RenderingSettings) {
191 if settings.ShowFPS {191 if settings.ShowFPS {
192 m.setEnv("WEBKIT_SHOW_FPS", "1")192 m.setEnv("WEBKIT_SHOW_FPS", "1")
193 }193 }
@@ -196,7 +196,7 @@ func (m *Manager) applyDebugEnv(settings port.RenderingEnvSettings) {
196 }196 }
197 }197 }
198 198
199-func (m *Manager) applySkiaEnv(settings port.RenderingEnvSettings) {199+func (m *Manager) applySkiaEnv(settings RenderingSettings) {
200 // CPU painting threads: only set if > 0 and env var not already set200 // CPU painting threads: only set if > 0 and env var not already set
201 if settings.SkiaCPUPaintingThreads > 0 && os.Getenv("WEBKIT_SKIA_CPU_PAINTING_THREADS") == "" {201 if settings.SkiaCPUPaintingThreads > 0 && os.Getenv("WEBKIT_SKIA_CPU_PAINTING_THREADS") == "" {
202 m.setEnv("WEBKIT_SKIA_CPU_PAINTING_THREADS", fmt.Sprintf("%d", settings.SkiaCPUPaintingThreads))202 m.setEnv("WEBKIT_SKIA_CPU_PAINTING_THREADS", fmt.Sprintf("%d", settings.SkiaCPUPaintingThreads))
@@ -249,4 +249,6 @@ func (*Manager) detectFromDRM() port.GPUVendor {
249 return port.GPUVendorUnknown249 return port.GPUVendorUnknown
250 }250 }
251 251
252+// Ensure Manager implements port.RenderingEnvManager (DetectGPUVendor, GetAppliedVars).
253+// ApplyEnvironment takes the infra-local RenderingSettings type instead of a port type.
252 var _ port.RenderingEnvManager = (*Manager)(nil)254 var _ port.RenderingEnvManager = (*Manager)(nil)
M internal/infrastructure/env/manager_test.go +10 -11
@@ -6,7 +6,6 @@ import (
66 "os/exec"
77 "testing"
88
9- "github.com/bnema/dumber/internal/application/port"
109 "github.com/bnema/dumber/internal/infrastructure/env"
1110 "github.com/stretchr/testify/assert"
1211 "github.com/stretchr/testify/require"
@@ -25,14 +24,14 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
2524
2625 tests := []struct {
2726 name string
28- settings port.RenderingEnvSettings
27+ settings env.RenderingSettings
2928 presetEnv map[string]string
3029 expectedVars map[string]string
3130 unexpectedVars []string
3231 }{
3332 {
3433 name: "CPU threads set when > 0",
35- settings: port.RenderingEnvSettings{
34+ settings: env.RenderingSettings{
3635 SkiaCPUPaintingThreads: 4,
3736 SkiaGPUPaintingThreads: -1, // unset
3837 },
@@ -43,7 +42,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
4342 },
4443 {
4544 name: "GPU threads set when >= 0",
46- settings: port.RenderingEnvSettings{
45+ settings: env.RenderingSettings{
4746 SkiaCPUPaintingThreads: 0, // unset
4847 SkiaGPUPaintingThreads: 2,
4948 },
@@ -54,7 +53,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
5453 },
5554 {
5655 name: "GPU threads 0 disables GPU tile painting",
57- settings: port.RenderingEnvSettings{
56+ settings: env.RenderingSettings{
5857 SkiaGPUPaintingThreads: 0,
5958 },
6059 expectedVars: map[string]string{
@@ -63,7 +62,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
6362 },
6463 {
6564 name: "CPU rendering enabled",
66- settings: port.RenderingEnvSettings{
65+ settings: env.RenderingSettings{
6766 SkiaEnableCPURendering: true,
6867 },
6968 expectedVars: map[string]string{
@@ -72,14 +71,14 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
7271 },
7372 {
7473 name: "CPU rendering disabled (default)",
75- settings: port.RenderingEnvSettings{
74+ settings: env.RenderingSettings{
7675 SkiaEnableCPURendering: false,
7776 },
7877 unexpectedVars: []string{"WEBKIT_SKIA_ENABLE_CPU_RENDERING"},
7978 },
8079 {
8180 name: "does not override existing CPU threads env var",
82- settings: port.RenderingEnvSettings{
81+ settings: env.RenderingSettings{
8382 SkiaCPUPaintingThreads: 8,
8483 },
8584 presetEnv: map[string]string{
@@ -91,7 +90,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
9190 },
9291 {
9392 name: "does not override existing GPU threads env var",
94- settings: port.RenderingEnvSettings{
93+ settings: env.RenderingSettings{
9594 SkiaGPUPaintingThreads: 4,
9695 },
9796 presetEnv: map[string]string{
@@ -103,7 +102,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
103102 },
104103 {
105104 name: "does not override existing CPU rendering env var",
106- settings: port.RenderingEnvSettings{
105+ settings: env.RenderingSettings{
107106 SkiaEnableCPURendering: true,
108107 },
109108 presetEnv: map[string]string{
@@ -115,7 +114,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
115114 },
116115 {
117116 name: "all unset by default",
118- settings: port.RenderingEnvSettings{
117+ settings: env.RenderingSettings{
119118 SkiaCPUPaintingThreads: 0, // unset
120119 SkiaGPUPaintingThreads: -1, // unset
121120 SkiaEnableCPURendering: false,
@@ -6,7 +6,6 @@ import (
6 "os/exec"6 "os/exec"
7 "testing"7 "testing"
8 8
9- "github.com/bnema/dumber/internal/application/port"
10 "github.com/bnema/dumber/internal/infrastructure/env"9 "github.com/bnema/dumber/internal/infrastructure/env"
11 "github.com/stretchr/testify/assert"10 "github.com/stretchr/testify/assert"
12 "github.com/stretchr/testify/require"11 "github.com/stretchr/testify/require"
@@ -25,14 +24,14 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
25 24
26 tests := []struct {25 tests := []struct {
27 name string26 name string
28- settings port.RenderingEnvSettings27+ settings env.RenderingSettings
29 presetEnv map[string]string28 presetEnv map[string]string
30 expectedVars map[string]string29 expectedVars map[string]string
31 unexpectedVars []string30 unexpectedVars []string
32 }{31 }{
33 {32 {
34 name: "CPU threads set when > 0",33 name: "CPU threads set when > 0",
35- settings: port.RenderingEnvSettings{34+ settings: env.RenderingSettings{
36 SkiaCPUPaintingThreads: 4,35 SkiaCPUPaintingThreads: 4,
37 SkiaGPUPaintingThreads: -1, // unset36 SkiaGPUPaintingThreads: -1, // unset
38 },37 },
@@ -43,7 +42,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
43 },42 },
44 {43 {
45 name: "GPU threads set when >= 0",44 name: "GPU threads set when >= 0",
46- settings: port.RenderingEnvSettings{45+ settings: env.RenderingSettings{
47 SkiaCPUPaintingThreads: 0, // unset46 SkiaCPUPaintingThreads: 0, // unset
48 SkiaGPUPaintingThreads: 2,47 SkiaGPUPaintingThreads: 2,
49 },48 },
@@ -54,7 +53,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
54 },53 },
55 {54 {
56 name: "GPU threads 0 disables GPU tile painting",55 name: "GPU threads 0 disables GPU tile painting",
57- settings: port.RenderingEnvSettings{56+ settings: env.RenderingSettings{
58 SkiaGPUPaintingThreads: 0,57 SkiaGPUPaintingThreads: 0,
59 },58 },
60 expectedVars: map[string]string{59 expectedVars: map[string]string{
@@ -63,7 +62,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
63 },62 },
64 {63 {
65 name: "CPU rendering enabled",64 name: "CPU rendering enabled",
66- settings: port.RenderingEnvSettings{65+ settings: env.RenderingSettings{
67 SkiaEnableCPURendering: true,66 SkiaEnableCPURendering: true,
68 },67 },
69 expectedVars: map[string]string{68 expectedVars: map[string]string{
@@ -72,14 +71,14 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
72 },71 },
73 {72 {
74 name: "CPU rendering disabled (default)",73 name: "CPU rendering disabled (default)",
75- settings: port.RenderingEnvSettings{74+ settings: env.RenderingSettings{
76 SkiaEnableCPURendering: false,75 SkiaEnableCPURendering: false,
77 },76 },
78 unexpectedVars: []string{"WEBKIT_SKIA_ENABLE_CPU_RENDERING"},77 unexpectedVars: []string{"WEBKIT_SKIA_ENABLE_CPU_RENDERING"},
79 },78 },
80 {79 {
81 name: "does not override existing CPU threads env var",80 name: "does not override existing CPU threads env var",
82- settings: port.RenderingEnvSettings{81+ settings: env.RenderingSettings{
83 SkiaCPUPaintingThreads: 8,82 SkiaCPUPaintingThreads: 8,
84 },83 },
85 presetEnv: map[string]string{84 presetEnv: map[string]string{
@@ -91,7 +90,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
91 },90 },
92 {91 {
93 name: "does not override existing GPU threads env var",92 name: "does not override existing GPU threads env var",
94- settings: port.RenderingEnvSettings{93+ settings: env.RenderingSettings{
95 SkiaGPUPaintingThreads: 4,94 SkiaGPUPaintingThreads: 4,
96 },95 },
97 presetEnv: map[string]string{96 presetEnv: map[string]string{
@@ -103,7 +102,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
103 },102 },
104 {103 {
105 name: "does not override existing CPU rendering env var",104 name: "does not override existing CPU rendering env var",
106- settings: port.RenderingEnvSettings{105+ settings: env.RenderingSettings{
107 SkiaEnableCPURendering: true,106 SkiaEnableCPURendering: true,
108 },107 },
109 presetEnv: map[string]string{108 presetEnv: map[string]string{
@@ -115,7 +114,7 @@ func TestManager_ApplyEnvironment_SkiaEnv(t *testing.T) {
115 },114 },
116 {115 {
117 name: "all unset by default",116 name: "all unset by default",
118- settings: port.RenderingEnvSettings{117+ settings: env.RenderingSettings{
119 SkiaCPUPaintingThreads: 0, // unset118 SkiaCPUPaintingThreads: 0, // unset
120 SkiaGPUPaintingThreads: -1, // unset119 SkiaGPUPaintingThreads: -1, // unset
121 SkiaEnableCPURendering: false,120 SkiaEnableCPURendering: false,
A internal/infrastructure/env/settings.go +27 -0
@@ -0,0 +1,27 @@
1+package env
2+
3+// RenderingSettings holds all rendering environment variable settings.
4+// This was previously port.RenderingEnvSettings but moved here because
5+// these settings are engine-specific (WebKit/GTK/GStreamer).
6+type RenderingSettings struct {
7+ // GStreamer
8+ ForceVSync bool
9+ GLRenderingMode string
10+ GStreamerDebugLevel int
11+ // WebKit compositor
12+ DisableDMABufRenderer bool
13+ ForceCompositingMode bool
14+ DisableCompositingMode bool
15+ // GTK/GSK
16+ GSKRenderer string
17+ DisableMipmaps bool
18+ PreferGL bool
19+ // Debug
20+ ShowFPS bool
21+ SampleMemory bool
22+ DebugFrames bool
23+ // Skia
24+ SkiaCPUPaintingThreads int
25+ SkiaGPUPaintingThreads int
26+ SkiaEnableCPURendering bool
27+}
@@ -0,0 +1,27 @@
1+package env
2+
3+// RenderingSettings holds all rendering environment variable settings.
4+// This was previously port.RenderingEnvSettings but moved here because
5+// these settings are engine-specific (WebKit/GTK/GStreamer).
6+type RenderingSettings struct {
7+ // GStreamer
8+ ForceVSync bool
9+ GLRenderingMode string
10+ GStreamerDebugLevel int
11+ // WebKit compositor
12+ DisableDMABufRenderer bool
13+ ForceCompositingMode bool
14+ DisableCompositingMode bool
15+ // GTK/GSK
16+ GSKRenderer string
17+ DisableMipmaps bool
18+ PreferGL bool
19+ // Debug
20+ ShowFPS bool
21+ SampleMemory bool
22+ DebugFrames bool
23+ // Skia
24+ SkiaCPUPaintingThreads int
25+ SkiaGPUPaintingThreads int
26+ SkiaEnableCPURendering bool
27+}
A internal/infrastructure/webkit/engine_config.go +74 -0
@@ -0,0 +1,74 @@
1+package webkit
2+
3+import "github.com/bnema/dumber/internal/infrastructure/config"
4+
5+// WebKitEngineConfig holds all WebKit-specific engine configuration.
6+// This is the infrastructure-side version (no TOML tags).
7+type WebKitEngineConfig struct {
8+ // Skia
9+ SkiaCPUPaintingThreads int
10+ SkiaGPUPaintingThreads int
11+ SkiaEnableCPURendering bool
12+ // WebKit compositor
13+ DisableDMABufRenderer bool
14+ ForceCompositingMode bool
15+ DisableCompositingMode bool
16+ // GTK/GSK
17+ GSKRenderer string
18+ DisableMipmaps bool
19+ PreferGL bool
20+ // Debug
21+ ShowFPS bool
22+ SampleMemory bool
23+ DebugFrames bool
24+ DrawCompositingIndicators bool
25+ // Privacy
26+ ITPEnabled bool
27+ // GStreamer
28+ ForceVSync bool
29+ GLRenderingMode string
30+ GStreamerDebugLevel int
31+ // Runtime
32+ Prefix string
33+ // Memory pressure (all fields from config)
34+ WebProcessMemoryLimitMB int
35+ WebProcessMemoryPollIntervalSec float64
36+ WebProcessMemoryConservativeThreshold float64
37+ WebProcessMemoryStrictThreshold float64
38+ NetworkProcessMemoryLimitMB int
39+ NetworkProcessMemoryPollIntervalSec float64
40+ NetworkProcessMemoryConservativeThreshold float64
41+ NetworkProcessMemoryStrictThreshold float64
42+}
43+
44+// EngineConfigFromConfig converts config.WebKitEngineConfig to the infra type.
45+func EngineConfigFromConfig(cfg config.WebKitEngineConfig) WebKitEngineConfig {
46+ return WebKitEngineConfig{
47+ SkiaCPUPaintingThreads: cfg.SkiaCPUPaintingThreads,
48+ SkiaGPUPaintingThreads: cfg.SkiaGPUPaintingThreads,
49+ SkiaEnableCPURendering: cfg.SkiaEnableCPURendering,
50+ DisableDMABufRenderer: cfg.DisableDMABufRenderer,
51+ ForceCompositingMode: cfg.ForceCompositingMode,
52+ DisableCompositingMode: cfg.DisableCompositingMode,
53+ GSKRenderer: string(cfg.GSKRenderer),
54+ DisableMipmaps: cfg.DisableMipmaps,
55+ PreferGL: cfg.PreferGL,
56+ ShowFPS: cfg.ShowFPS,
57+ SampleMemory: cfg.SampleMemory,
58+ DebugFrames: cfg.DebugFrames,
59+ DrawCompositingIndicators: cfg.DrawCompositingIndicators,
60+ ITPEnabled: cfg.ITPEnabled,
61+ ForceVSync: cfg.ForceVSync,
62+ GLRenderingMode: string(cfg.GLRenderingMode),
63+ GStreamerDebugLevel: cfg.GStreamerDebugLevel,
64+ Prefix: cfg.Prefix,
65+ WebProcessMemoryLimitMB: cfg.WebProcessMemoryLimitMB,
66+ WebProcessMemoryPollIntervalSec: cfg.WebProcessMemoryPollIntervalSec,
67+ WebProcessMemoryConservativeThreshold: cfg.WebProcessMemoryConservativeThreshold,
68+ WebProcessMemoryStrictThreshold: cfg.WebProcessMemoryStrictThreshold,
69+ NetworkProcessMemoryLimitMB: cfg.NetworkProcessMemoryLimitMB,
70+ NetworkProcessMemoryPollIntervalSec: cfg.NetworkProcessMemoryPollIntervalSec,
71+ NetworkProcessMemoryConservativeThreshold: cfg.NetworkProcessMemoryConservativeThreshold,
72+ NetworkProcessMemoryStrictThreshold: cfg.NetworkProcessMemoryStrictThreshold,
73+ }
74+}
@@ -0,0 +1,74 @@
1+package webkit
2+
3+import "github.com/bnema/dumber/internal/infrastructure/config"
4+
5+// WebKitEngineConfig holds all WebKit-specific engine configuration.
6+// This is the infrastructure-side version (no TOML tags).
7+type WebKitEngineConfig struct {
8+ // Skia
9+ SkiaCPUPaintingThreads int
10+ SkiaGPUPaintingThreads int
11+ SkiaEnableCPURendering bool
12+ // WebKit compositor
13+ DisableDMABufRenderer bool
14+ ForceCompositingMode bool
15+ DisableCompositingMode bool
16+ // GTK/GSK
17+ GSKRenderer string
18+ DisableMipmaps bool
19+ PreferGL bool
20+ // Debug
21+ ShowFPS bool
22+ SampleMemory bool
23+ DebugFrames bool
24+ DrawCompositingIndicators bool
25+ // Privacy
26+ ITPEnabled bool
27+ // GStreamer
28+ ForceVSync bool
29+ GLRenderingMode string
30+ GStreamerDebugLevel int
31+ // Runtime
32+ Prefix string
33+ // Memory pressure (all fields from config)
34+ WebProcessMemoryLimitMB int
35+ WebProcessMemoryPollIntervalSec float64
36+ WebProcessMemoryConservativeThreshold float64
37+ WebProcessMemoryStrictThreshold float64
38+ NetworkProcessMemoryLimitMB int
39+ NetworkProcessMemoryPollIntervalSec float64
40+ NetworkProcessMemoryConservativeThreshold float64
41+ NetworkProcessMemoryStrictThreshold float64
42+}
43+
44+// EngineConfigFromConfig converts config.WebKitEngineConfig to the infra type.
45+func EngineConfigFromConfig(cfg config.WebKitEngineConfig) WebKitEngineConfig {
46+ return WebKitEngineConfig{
47+ SkiaCPUPaintingThreads: cfg.SkiaCPUPaintingThreads,
48+ SkiaGPUPaintingThreads: cfg.SkiaGPUPaintingThreads,
49+ SkiaEnableCPURendering: cfg.SkiaEnableCPURendering,
50+ DisableDMABufRenderer: cfg.DisableDMABufRenderer,
51+ ForceCompositingMode: cfg.ForceCompositingMode,
52+ DisableCompositingMode: cfg.DisableCompositingMode,
53+ GSKRenderer: string(cfg.GSKRenderer),
54+ DisableMipmaps: cfg.DisableMipmaps,
55+ PreferGL: cfg.PreferGL,
56+ ShowFPS: cfg.ShowFPS,
57+ SampleMemory: cfg.SampleMemory,
58+ DebugFrames: cfg.DebugFrames,
59+ DrawCompositingIndicators: cfg.DrawCompositingIndicators,
60+ ITPEnabled: cfg.ITPEnabled,
61+ ForceVSync: cfg.ForceVSync,
62+ GLRenderingMode: string(cfg.GLRenderingMode),
63+ GStreamerDebugLevel: cfg.GStreamerDebugLevel,
64+ Prefix: cfg.Prefix,
65+ WebProcessMemoryLimitMB: cfg.WebProcessMemoryLimitMB,
66+ WebProcessMemoryPollIntervalSec: cfg.WebProcessMemoryPollIntervalSec,
67+ WebProcessMemoryConservativeThreshold: cfg.WebProcessMemoryConservativeThreshold,
68+ WebProcessMemoryStrictThreshold: cfg.WebProcessMemoryStrictThreshold,
69+ NetworkProcessMemoryLimitMB: cfg.NetworkProcessMemoryLimitMB,
70+ NetworkProcessMemoryPollIntervalSec: cfg.NetworkProcessMemoryPollIntervalSec,
71+ NetworkProcessMemoryConservativeThreshold: cfg.NetworkProcessMemoryConservativeThreshold,
72+ NetworkProcessMemoryStrictThreshold: cfg.NetworkProcessMemoryStrictThreshold,
73+ }
74+}

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