tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 325f49b8e7b4d48b57a877b5473bbb6737ca69dc
parent d8b0e17751fae70394c3c6196baaad346930db4d
Author: Markus Stange <mstange.moz@gmail.com>
Date:   Wed, 17 Dec 2025 21:01:38 +0000

Bug 2005820 - Don't start warming up shaders until the first NewRenderer task is done (i.e. until EnsureConnected in the parent has completed). r=jnicol

Differential Revision: https://phabricator.services.mozilla.com/D276740

Diffstat:
Mgfx/webrender_bindings/RenderThread.cpp | 12++++++------
Mgfx/webrender_bindings/RenderThread.h | 2++
Mgfx/webrender_bindings/WebRenderAPI.cpp | 4++++
3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/gfx/webrender_bindings/RenderThread.cpp b/gfx/webrender_bindings/RenderThread.cpp @@ -1279,12 +1279,6 @@ void RenderThread::InitDeviceTask() { // lazy initialization to happen now. SingletonGL(); - if (mShaders) { - // Kick off shader warmup, outside the InitDeviceTask so that this thread - // becomes available to handle other messages from the Compositor. - PostResumeShaderWarmupRunnable(); - } - const auto maxDurationMs = 3 * 1000; const auto end = TimeStamp::Now(); const auto durationMs = static_cast<uint32_t>((end - start).ToMilliseconds()); @@ -1294,6 +1288,12 @@ void RenderThread::InitDeviceTask() { } } +void RenderThread::BeginShaderWarmupIfNeeded() { + if (mShaders) { + PostResumeShaderWarmupRunnable(); + } +} + void RenderThread::PostResumeShaderWarmupRunnable() { RefPtr<Runnable> runnable = NewRunnableMethod("RenderThread::ResumeShaderWarmup", this, diff --git a/gfx/webrender_bindings/RenderThread.h b/gfx/webrender_bindings/RenderThread.h @@ -360,6 +360,8 @@ class RenderThread final { void SetBatteryInfo(const hal::BatteryInformation& aBatteryInfo); bool GetPowerIsCharging(); + void BeginShaderWarmupIfNeeded(); + private: static size_t sRendererCount; static size_t sActiveRendererCount; diff --git a/gfx/webrender_bindings/WebRenderAPI.cpp b/gfx/webrender_bindings/WebRenderAPI.cpp @@ -191,6 +191,10 @@ class NewRenderer : public RendererEvent { } aRenderThread.AddRenderer(aWindowId, std::move(renderer)); + + // Kick off shader warmup, outside this NewRenderer task so that any + // threads which block on the NewRenderer work can proceed immediately. + aRenderThread.BeginShaderWarmupIfNeeded(); } const char* Name() override { return "NewRenderer"; }