Index: android_webview/browser/browser_view_renderer.cc |
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc |
index 2fc80229d695b718382f778f1c84ef7e48e0432e..cad7c5b96b7b331180b02aa2f79af3e91eff5daf 100644 |
--- a/android_webview/browser/browser_view_renderer.cc |
+++ b/android_webview/browser/browser_view_renderer.cc |
@@ -664,7 +664,10 @@ void BrowserViewRenderer::EnsureContinuousInvalidation(bool force_invalidate) { |
if (throttle_fallback_tick) |
return; |
- block_invalidates_ = compositor_needs_continuous_invalidate_; |
+ { |
+ base::AutoLock lock(render_thread_lock_); |
+ block_invalidates_ = compositor_needs_continuous_invalidate_; |
+ } |
// Unretained here is safe because the callback is cancelled when |
// |fallback_tick_| is destroyed. |
@@ -713,8 +716,21 @@ bool BrowserViewRenderer::CompositeSW(SkCanvas* canvas) { |
} |
void BrowserViewRenderer::DidComposite(bool force_invalidate) { |
+ { |
+ base::AutoLock lock(render_thread_lock_); |
+ block_invalidates_ = false; |
+ } |
+ |
+ if (!ui_task_runner_->BelongsToCurrentThread()) { |
+ ui_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&BrowserViewRenderer::EnsureContinuousInvalidation, |
+ ui_thread_weak_ptr_, |
+ force_invalidate)); |
+ return; |
+ } |
+ |
fallback_tick_.Cancel(); |
- block_invalidates_ = false; |
EnsureContinuousInvalidation(force_invalidate); |
} |