summaryrefslogtreecommitdiffstats
path: root/android_webview/browser/in_process_view_renderer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'android_webview/browser/in_process_view_renderer.cc')
-rw-r--r--android_webview/browser/in_process_view_renderer.cc24
1 files changed, 18 insertions, 6 deletions
diff --git a/android_webview/browser/in_process_view_renderer.cc b/android_webview/browser/in_process_view_renderer.cc
index d9f8232..3f935ff 100644
--- a/android_webview/browser/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_view_renderer.cc
@@ -171,6 +171,21 @@ bool ScopedAllowGL::allow_gl = false;
base::LazyInstance<GLViewRendererManager>::Leaky g_view_renderer_manager;
+void RequestProcessGLOnUIThread() {
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE, base::Bind(&RequestProcessGLOnUIThread));
+ return;
+ }
+
+ InProcessViewRenderer* renderer = static_cast<InProcessViewRenderer*>(
+ g_view_renderer_manager.Get().GetMostRecentlyDrawn());
+ if (!renderer || !renderer->RequestProcessGL()) {
+ LOG(ERROR) << "Failed to request GL process. Deadlock likely: "
+ << !!renderer;
+ }
+}
+
} // namespace
// Called from different threads!
@@ -178,11 +193,7 @@ static void ScheduleGpuWork() {
if (ScopedAllowGL::IsAllowed()) {
gpu::InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread();
} else {
- InProcessViewRenderer* renderer = static_cast<InProcessViewRenderer*>(
- g_view_renderer_manager.Get().GetMostRecentlyDrawn());
- if (!renderer || !renderer->RequestProcessGL()) {
- LOG(ERROR) << "Failed to request DrawGL. Probably going to deadlock.";
- }
+ RequestProcessGLOnUIThread();
}
}
@@ -772,7 +783,8 @@ void InProcessViewRenderer::EnsureContinuousInvalidation(
// ticked. This can happen if this is reached because
// invalidate_ignore_compositor is true.
if (compositor_needs_continuous_invalidate_) {
- base::MessageLoop::current()->PostDelayedTask(
+ BrowserThread::PostDelayedTask(
+ BrowserThread::UI,
FROM_HERE,
fallback_tick_.callback(),
base::TimeDelta::FromMilliseconds(