diff options
author | Jüri Valdmann <juri.valdmann@qt.io> | 2020-06-26 13:24:01 +0200 |
---|---|---|
committer | Jüri Valdmann <juri.valdmann@qt.io> | 2020-08-26 13:18:46 +0200 |
commit | 7aa99d8d5b0dbf024019e70bf39b7d15796e1080 (patch) | |
tree | 643f2eb8c185c06263f76f6119248d71dc2f43a9 | |
parent | 6deddc5ecd6155c567aecd0338c53c63fa465bfd (diff) |
Fix ScopedGLContextChecker with QTWEBENGINE_DISABLE_GPU_THREAD=1
The ScopedGLContextChecker, which deactivates the current
QOpenGLContext when executing Chromium tasks, is currently enabled
only if QOpenGLContext::supportsThreadedOpenGL() is false. But the gpu
thread can nowadays be disabled also with an environment variable and
ScopedGLContextChecker needs to take this into account.
Change-Id: I012524538b49b033ed053dbc41ed4350db916542
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
(cherry picked from commit 5988cec1a1b59aa163042a419c4c2e978bb814bb)
-rw-r--r-- | src/core/browser_main_parts_qt.cpp | 2 | ||||
-rw-r--r-- | src/core/web_engine_context.cpp | 23 | ||||
-rw-r--r-- | src/core/web_engine_context.h | 4 | ||||
-rw-r--r-- | src/core/web_engine_context_threads.cpp | 4 |
4 files changed, 18 insertions, 15 deletions
diff --git a/src/core/browser_main_parts_qt.cpp b/src/core/browser_main_parts_qt.cpp index 925c18664..45056fec2 100644 --- a/src/core/browser_main_parts_qt.cpp +++ b/src/core/browser_main_parts_qt.cpp @@ -190,7 +190,7 @@ private: } private: - bool m_enabled = !QOpenGLContext::supportsThreadedOpenGL(); + bool m_enabled = WebEngineContext::isGpuServiceOnUIThread(); #endif // QT_CONFIG(opengl) }; diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 7cc84eae7..11692c2d1 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -496,6 +496,17 @@ const static char kChromiumFlagsEnv[] = "QTWEBENGINE_CHROMIUM_FLAGS"; const static char kDisableSandboxEnv[] = "QTWEBENGINE_DISABLE_SANDBOX"; const static char kDisableInProcGpuThread[] = "QTWEBENGINE_DISABLE_GPU_THREAD"; +// static +bool WebEngineContext::isGpuServiceOnUIThread() +{ + static bool threadedGpu = +#if QT_CONFIG(opengl) && !defined(Q_OS_MACOS) + QOpenGLContext::supportsThreadedOpenGL() && +#endif + !qEnvironmentVariableIsSet(kDisableInProcGpuThread); + return !threadedGpu; +} + static void appendToFeatureList(std::string &featureList, const char *feature) { if (featureList.empty()) @@ -606,16 +617,6 @@ WebEngineContext::WebEngineContext() if (isDesktopGLOrSoftware || isGLES2Context) parsedCommandLine->AppendSwitch(switches::kDisableES3GLContext); #endif - bool threadedGpu = false; -#if QT_CONFIG(opengl) - threadedGpu = QOpenGLContext::supportsThreadedOpenGL(); -#if defined(Q_OS_MACOS) - // QtBase disabled it when building on 10.14+, unfortunately we still need it - // until we have fixed single-threaded viz-display-compositor. - threadedGpu = true; -#endif -#endif - threadedGpu = threadedGpu && !qEnvironmentVariableIsSet(kDisableInProcGpuThread); bool enableViz = !parsedCommandLine->HasSwitch("disable-viz-display-compositor"); parsedCommandLine->RemoveSwitch("disable-viz-display-compositor"); @@ -774,7 +775,7 @@ WebEngineContext::WebEngineContext() parsedCommandLine->AppendSwitch(switches::kDisableGpu); } - registerMainThreadFactories(threadedGpu); + registerMainThreadFactories(); SetContentClient(new ContentClientQt); diff --git a/src/core/web_engine_context.h b/src/core/web_engine_context.h index 6cbd5c8e5..e2190f8a2 100644 --- a/src/core/web_engine_context.h +++ b/src/core/web_engine_context.h @@ -123,13 +123,15 @@ public: static gpu::SyncPointManager *syncPointManager(); + static bool isGpuServiceOnUIThread(); + private: friend class base::RefCounted<WebEngineContext>; friend class ProfileAdapter; WebEngineContext(); ~WebEngineContext(); - static void registerMainThreadFactories(bool threaded); + static void registerMainThreadFactories(); static void destroyGpuProcess(); std::unique_ptr<base::RunLoop> m_runLoop; diff --git a/src/core/web_engine_context_threads.cpp b/src/core/web_engine_context_threads.cpp index ba3e18499..5f9e345f7 100644 --- a/src/core/web_engine_context_threads.cpp +++ b/src/core/web_engine_context_threads.cpp @@ -125,11 +125,11 @@ void WebEngineContext::destroyGpuProcess() } // static -void WebEngineContext::registerMainThreadFactories(bool threaded) +void WebEngineContext::registerMainThreadFactories() { content::UtilityProcessHost::RegisterUtilityMainThreadFactory(content::CreateInProcessUtilityThread); content::RenderProcessHostImpl::RegisterRendererMainThreadFactory(content::CreateInProcessRendererThread); - if (threaded) + if (!isGpuServiceOnUIThread()) content::RegisterGpuMainThreadFactory(content::CreateInProcessGpuThread); else content::RegisterGpuMainThreadFactory(createGpuThreadController); |