| Index: android_webview/browser/in_process_view_renderer.cc
|
| diff --git a/android_webview/browser/in_process_view_renderer.cc b/android_webview/browser/in_process_view_renderer.cc
|
| index 39f88378692f1cbf4ea4a53304630eb81720eba7..55b8201d2a72eca66f61cf0b75c4bf92b3a89acc 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();
|
| }
|
| }
|
|
|
| @@ -783,7 +794,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(
|
|
|