diff --git a/dom/canvas/WebGLContext.cpp b/dom/canvas/WebGLContext.cpp index b8e9159ca48be..765bf42d6be33 100644 --- a/dom/canvas/WebGLContext.cpp +++ b/dom/canvas/WebGLContext.cpp @@ -483,32 +483,46 @@ bool WebGLContext::CreateAndInitGL( flags |= gl::CreateContextFlags::REQUIRE_COMPAT_PROFILE; } - switch (mOptions.powerPreference) { - case dom::WebGLPowerPreference::Low_power: - break; - - case dom::WebGLPowerPreference::High_performance: - flags |= gl::CreateContextFlags::HIGH_POWER; - break; + { + bool highPower = false; + switch (mOptions.powerPreference) { + case dom::WebGLPowerPreference::Low_power: + highPower = false; + break; + + case dom::WebGLPowerPreference::High_performance: + highPower = true; + break; + + // Eventually add a heuristic, but for now default to high-performance. + // We can even make it dynamic by holding on to a + // ForceDiscreteGPUHelperCGL iff we decide it's a high-performance + // application: + // - Non-trivial canvas size + // - Many draw calls + // - Same origin with root page (try to stem bleeding from WebGL + // ads/trackers) + default: + highPower = true; + if (StaticPrefs::WebGLDefaultLowPower()) { + highPower = false; + } else if (!mCanvasElement->GetParentNode()) { + GenerateWarning( + "WebGLContextAttributes.powerPreference: 'default' when " + " has no parent Element defaults to 'low-power'."); + highPower = false; + } + break; + } - // Eventually add a heuristic, but for now default to high-performance. - // We can even make it dynamic by holding on to a - // ForceDiscreteGPUHelperCGL iff we decide it's a high-performance - // application: - // - Non-trivial canvas size - // - Many draw calls - // - Same origin with root page (try to stem bleeding from WebGL - // ads/trackers) - default: - if (!StaticPrefs::WebGLDefaultLowPower()) { - flags |= gl::CreateContextFlags::HIGH_POWER; - } - break; - } + // If "Use hardware acceleration when available" option is disabled: + if (!gfxConfig::IsEnabled(Feature::HW_COMPOSITING)) { + highPower = false; + } - // If "Use hardware acceleration when available" option is disabled: - if (!gfxConfig::IsEnabled(Feature::HW_COMPOSITING)) { - flags &= ~gl::CreateContextFlags::HIGH_POWER; + if (highPower) { + flags |= gl::CreateContextFlags::HIGH_POWER; + } } #ifdef XP_MACOSX