Update: the -cef-force-gpu workaround I posted earlier turns out not to fix this on a fresh boot. CEF still hits Disabling GPU acceleration: Disabled/RuntimeDetect after the first BPM close, and BPM cycle 2 still falls back to mode:
▎ System. Reproduced on the same machine after a reboot, with -cef-force-gpu confirmed in argv (the steamwebhelper child shows --ignore-gpu-blocklist as expected).
▎
▎ Concrete log timeline from this attempt:
▎
▎ 18:49:41 GPU process started: start count: 0
▎ 18:49:49 SP BPM_uid0: Created window … mode: OpenGL ← cycle 1
▎ 18:51:18 SP BPM_uid0-'Steam Big ': Applying safe browser shutdown workaround
▎ 18:51:43 Disabling GPU acceleration: Disabled/RuntimeDetect ← fires anyway
▎ 18:52:12 SP BPM_uid0: Created window … mode: System ← cycle 2, laggy
▎
▎ So the runtime feature-disable path is independent of the static GPU blocklist that --ignore-gpu-blocklist controls. The RuntimeDetect code path itself is what needs investigating — it disables GPU acceleration without logging a
▎ reason. The only working workaround on Linux remains a full Steam restart between BPM uses.
Nothing extracted yet.
Affected version
1779918128Chrome/126.0.6478.183, ANGLE commit5d4df51d1d7d126 be621ea04206d8fae23952783d1d588d6ce0d9b31779486452(same logs).System
noble/zena)6.17.0-29-generic(PREEMPT_DYNAMIC, x86_64)x11(not Wayland)1002:73bf)amdgpukernel driver, Mesa25.2.8-0ubuntu0.24.04.1, LLVM 20.1.2/home/philipp/.steam/debian-installation/GL implementation parts: (gl=egl-angle, angle=opengl)— i.e. ANGLE on top of desktop OpenGL via Mesa. Vulkan path isdisabled_off.Summary
On Linux, opening Big Picture Mode (BPM) for the first time after launching Steam works smoothly. After closing BPM and reopening it, the second and subsequent BPM windows are extremly laggy, and the lag gets worse on each successive open/close cycle.
Logs show that this is not a progressive resource leak; it is a discrete state change inside
steamwebhelper/CEF: somewhere between closing the first BPM window and opening the second, Steam's CEF GPU process is shut down and its renderer is permanently switched from hardware-accelerated rendering (mode: OpenGL) to software rendering (mode: System). The compositor never recovers within the same Steam session — the only fix is to fully restart Steam.The GPU itself is healthy and idle at the time of the failure (16 GB VRAM free, no driver errors in dmesg, no shader-related issues).
Reproduction
steamwebhelperis started).steam://open/bigpicture). Observe smooth UI.100% reproducible on this system. The only known workaround is a full Steam client restart.
Concrete observations from logs (single Steam session, today)
All times are local. Logs are from
~/.steam/debian-installation/logs/.Cycle 1 — first open after Steam start (smooth)
webhelper.txt:→ Window mode is
OpenGL(hardware-accelerated CEF compositor).Cycle 1 close
GPU process disabled between cycles
webhelper_gpu.txt:There is no preceding error in
webhelper_gpu.txt— no GL error, no driver crash, nocontext lost, noGPU process crashed, nothing indmesg, no entry in/tmp/dumps. The runtime simply decides to disable GPU acceleration ~50 seconds after BPM is closed.Cycle 2 — second open (laggy)
→ Window mode is now
Systeminstead ofOpenGL: the BPM browser has fallen back to CPU/software compositing for a 1280×800 (logical, 2× HiDPI) full-window surface that animates at the display refresh rate. This matches the user-visible lag exactly.Cycle 3 — third open (laggy again)
Still
mode: System. TheDisabling GPU acceleration: Disabled/RuntimeDetectdecision is sticky for the rest of the session.Renderer process is never released
Process 5872 (the CEF renderer zygote that hosts BPM) remains alive across all three BPM cycles with:
VmPeak: 57,795,736 kB(≈55 GiB virtual address space; resident is ~820 MiB)This is consistent with each BPM open reattaching to the same renderer rather than spawning a fresh GPU-backed one.
This is not a one-off — it has happened repeatedly
Searching the rotating webhelper logs:
14 occurrences in the last 8 days, each one preceded by one or more
BPM_uid0: Created window … mode: OpenGLand followed by subsequentBPM_uid0: Created window … mode: Systemuntil Steam is restarted. Examples of the OpenGL → System transition pattern:Every transition from
OpenGLtoSystemforBPM_uid0lines up with aDisabling GPU acceleration: Disabled/RuntimeDetectevent inwebhelper_gpu.txt, and everyOpenGLreappearance corresponds to a new Steam process tree (i.e. a Steam restart).Suspected cause
Some interaction between BPM tear-down (the
Applying safe browser shutdown workaroundpath on the BPM CEF browser) and CEF's GPU process watchdog / runtime feature detection trips theRuntimeDetectpath that disables GPU compositing for the rest of thesteamwebhelperlifetime. Concrete clues:exit_on_context_lost(problems[9]: "Some drivers can't recover after OUT_OF_MEM and context lost"). It is enabled. If BPM shutdown triggers anything that CEF interprets as "context lost,"exit_on_context_lostwould terminate the GPU process; combined with whatever heuristic emitsDisabled/RuntimeDetect, that would prevent CEF from spinning up a fresh GPU process for the next BPM open.Valve Steam Gamepadand the fixed window nameSP BPM_uid0, suggesting BPM uses a single dedicated CEF browser that is destroyed and recreated rather than being kept alive across cycles. The shutdown of that browser appears to be what perturbs the GPU process.loseContextOnOutOfMemory: enabledis set, anddirect_rendering_display_compositor: disabled_off_ok, which is the typical CEF/Linux configuration on AMD/Mesa. Vulkan isdisabled_off.I'm not in a position to pinpoint the exact trigger inside
steamwebhelper, but the externally visible state machine is unambiguous: BPM open → BPM close → CEF GPU disabled → BPM reopens in software.Why it presents as "gets worse with each open"
Returning a speculative framewarnings on the BPM browser at10:25:24after the renderer was reattached).MainMenu_uidNN,QuickAccess_uidNN,notificationtoasts_uidNN,gamepadoverlay_uidNN) — the uid counter monotonically increases — which the software path has to composite together. This matches the observation that lag accumulates with each cycle rather than being constant after the first regression.Expected behavior
mode: OpenGLwindow every time within a single Steam session.steamwebhelperdecides to disable GPU acceleration at runtime, it should log the actual reason (which GL/EGL error, which watchdog timeout, which heuristic) so users and Valve can act on it, and it should attempt to re-enable GPU acceleration when reopening BPM (instead of silently falling back tomode: Systemfor the rest of the session).Workaround
Launching the Steam client with the
-cef-force-gpuflag fully avoids the regression in this session. With it set:mode: OpenGLwindow inwebhelper.txt.Disabling GPU acceleration: Disabled/RuntimeDetectevent is emitted between cycles.Comparison from a test run on this system:
Disabling GPU accelerationevent?mode: OpenGLmode: System(laggy)mode: System(still laggy)-cef-force-gpumode: OpenGLmode: OpenGLmode: OpenGLSince the regression turns hardware compositing off and the flag prevents that, the most plausible interpretation is that BPM teardown trips the runtime feature-disable path, and
-cef-force-gpuoverrides it (or at least overrides the parts of it that gatemode: OpenGLwindow creation). Either way, this is a strong signal that the right place to fix the bug is whichever heuristic insteamwebhelper's GPU process management decides to flip GPU off after BPM tear-down.Note: a
~/.steam/steam/steam_dev.cfgwith@cef_command_line_args …was tested and produced no observable change — the only Steam-recognized GPU-related switches in this build are the seven-cef-*flags hard-coded into the Steam launcher binary (-cef-disable-gpu,-cef-disable-gpu-sandbox,-cef-disable-sandbox,-cef-disable-seccomp-sandbox,-cef-force-accessibility,-cef-force-gpu,-no-cef-sandbox). There does not appear to be a generic CEF command-line passthrough exposed in the public Steam Linux build.Restarting Steam without the flag is also a valid workaround, but only on a per-cycle basis.
Useful files I can attach if needed
~/.steam/debian-installation/logs/webhelper.txt(and.previous.txt) — BPM window create/destroy lifecycle, mode changes~/.steam/debian-installation/logs/webhelper_gpu.txt—Disabling GPU acceleration: Disabled/RuntimeDetectevents, full GPU info report~/.steam/debian-installation/logs/webhelper_js.txt~/.steam/debian-installation/logs/cef_log.txt— CEF/Chromium internals,Returning a speculative framewarnings during BPM reopens~/.steam/debian-installation/logs/console-linux.txt~/.steam/debian-installation/logs/controller_ui.txtI'd be happy to capture a fresh trace with
steamwebhelperstarted under--enable-logging --vmodule=*gpu*=2,*compositor*=2(or whatever flag set you'd like) — just let me know.