Index: android_webview/browser/shared_renderer_state.cc |
diff --git a/android_webview/browser/shared_renderer_state.cc b/android_webview/browser/shared_renderer_state.cc |
index 2286fcfdda4f07c90551c6009dd7fc1de6db03d2..6ecbf923e048682efc8d147b5e0b543ce38ef186 100644 |
--- a/android_webview/browser/shared_renderer_state.cc |
+++ b/android_webview/browser/shared_renderer_state.cc |
@@ -79,7 +79,8 @@ SharedRendererState::SharedRendererState( |
: ui_loop_(ui_loop), |
client_on_ui_(client), |
inside_hardware_release_(false), |
- weak_factory_on_ui_thread_(this){ |
+ needs_force_invalidate_on_next_draw_gl_(false), |
+ weak_factory_on_ui_thread_(this) { |
DCHECK(ui_loop_->BelongsToCurrentThread()); |
DCHECK(client_on_ui_); |
ui_thread_weak_ptr_ = weak_factory_on_ui_thread_.GetWeakPtr(); |
@@ -150,21 +151,27 @@ scoped_ptr<DrawGLInput> SharedRendererState::PassDrawGLInput() { |
return draw_gl_input_.Pass(); |
} |
-void SharedRendererState::UpdateDrawConstraints( |
+bool SharedRendererState::UpdateDrawConstraints( |
const ParentCompositorDrawConstraints& parent_draw_constraints) { |
base::AutoLock lock(lock_); |
- parent_draw_constraints_ = parent_draw_constraints; |
+ if (needs_force_invalidate_on_next_draw_gl_ || |
+ !parent_draw_constraints_.Equals(parent_draw_constraints)) { |
+ parent_draw_constraints_ = parent_draw_constraints; |
+ return true; |
+ } |
+ |
+ return false; |
} |
void SharedRendererState::PostExternalDrawConstraintsToChildCompositor( |
const ParentCompositorDrawConstraints& parent_draw_constraints) { |
- UpdateDrawConstraints(parent_draw_constraints); |
- |
- // No need to hold the lock_ during the post task. |
- ui_loop_->PostTask( |
- FROM_HERE, |
- base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUIThread, |
- ui_thread_weak_ptr_)); |
+ if (UpdateDrawConstraints(parent_draw_constraints)) { |
+ // No need to hold the lock_ during the post task. |
+ ui_loop_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&SharedRendererState::UpdateParentDrawConstraintsOnUIThread, |
+ ui_thread_weak_ptr_)); |
+ } |
} |
const ParentCompositorDrawConstraints |
@@ -173,6 +180,18 @@ SharedRendererState::ParentDrawConstraints() const { |
return parent_draw_constraints_; |
} |
+void SharedRendererState::SetForceInvalidateOnNextDrawGL( |
+ bool needs_force_invalidate_on_next_draw_gl) { |
+ base::AutoLock lock(lock_); |
+ needs_force_invalidate_on_next_draw_gl_ = |
+ needs_force_invalidate_on_next_draw_gl; |
+} |
+ |
+bool SharedRendererState::NeedsForceInvalidateOnNextDrawGL() const { |
+ base::AutoLock lock(lock_); |
+ return needs_force_invalidate_on_next_draw_gl_; |
+} |
+ |
void SharedRendererState::SetInsideHardwareRelease(bool inside) { |
base::AutoLock lock(lock_); |
inside_hardware_release_ = inside; |