Chromium Code Reviews| 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 8845b761cd252c16592d4480003288e53b07de09..f68a4b1517d033205b0852fd41f2053ad8371c30 100644 |
| --- a/android_webview/browser/shared_renderer_state.cc |
| +++ b/android_webview/browser/shared_renderer_state.cc |
| @@ -7,6 +7,8 @@ |
| #include "android_webview/browser/browser_view_renderer_client.h" |
| #include "base/bind.h" |
| #include "base/location.h" |
| +#include "cc/output/compositor_frame.h" |
| +#include "content/public/browser/android/synchronous_compositor.h" |
| namespace android_webview { |
| @@ -24,6 +26,7 @@ SharedRendererState::SharedRendererState( |
| weak_factory_on_ui_thread_(this), |
| ui_thread_weak_ptr_(weak_factory_on_ui_thread_.GetWeakPtr()), |
| hardware_allowed_(false), |
| + parent_draw_constraints_dirty_(false), |
| share_context_(NULL) { |
| DCHECK(ui_loop_->BelongsToCurrentThread()); |
| DCHECK(client_on_ui_); |
| @@ -51,6 +54,22 @@ void SharedRendererState::ClientRequestDrawGLOnUIThread() { |
| } |
| } |
| +void SharedRendererState::ClientPostInvalidate() { |
| + if (ui_loop_->BelongsToCurrentThread()) { |
| + ClientPostInvalidateOnUIThread(); |
| + } else { |
| + ui_loop_->PostTask( |
| + FROM_HERE, |
| + base::Bind(&SharedRendererState::ClientPostInvalidateOnUIThread, |
| + ui_thread_weak_ptr_)); |
| + } |
| +} |
| + |
| +void SharedRendererState::ClientPostInvalidateOnUIThread() { |
| + DCHECK(ui_loop_->BelongsToCurrentThread()); |
| + client_on_ui_->PostInvalidate(); |
|
boliu
2014/07/16 17:25:10
I'd like all invalidates should go through EnsureC
hush (inactive)
2014/07/16 20:45:32
Yeah, I will address Alex's comments about the pos
|
| +} |
| + |
| void SharedRendererState::SetDrawGLInput(scoped_ptr<DrawGLInput> input) { |
| base::AutoLock lock(lock_); |
| DCHECK(!draw_gl_input_.get()); |
| @@ -62,6 +81,37 @@ scoped_ptr<DrawGLInput> SharedRendererState::PassDrawGLInput() { |
| return draw_gl_input_.Pass(); |
| } |
| +bool SharedRendererState::IsParentDrawConstraintsDirty() { |
| + base::AutoLock lock(lock_); |
| + return parent_draw_constraints_dirty_; |
| +} |
| + |
| +void SharedRendererState::SetParentDrawConstraintsDirty(bool dirty) { |
| + base::AutoLock lock(lock_); |
| + parent_draw_constraints_dirty_ = dirty; |
| +} |
| + |
| +void SharedRendererState::PostExternalDrawConstraintsToChildCompositor( |
| + const gfx::Rect& clip, |
| + const gfx::Transform& transform) { |
| + base::AutoLock lock(lock_); |
| + parent_transform_ = transform; |
| + parent_clip_ = clip; |
| + parent_draw_constraints_dirty_ = true; |
| + |
| + ClientPostInvalidate(); |
| +} |
| + |
| +const gfx::Rect& SharedRendererState::ParentClip() const { |
| + base::AutoLock lock(lock_); |
| + return parent_clip_; |
| +} |
| + |
| +const gfx::Transform& SharedRendererState::ParentTransform() const { |
| + base::AutoLock lock(lock_); |
| + return parent_transform_; |
| +} |
| + |
| void SharedRendererState::SetHardwareAllowed(bool allowed) { |
| base::AutoLock lock(lock_); |
| hardware_allowed_ = allowed; |