Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_view_android.cc | 
| diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc | 
| index a1b4e264583b4b82157b4b99a51c5a9eb5e548cb..34ce54140a7d56048576b45828abd2063d4a3c16 100644 | 
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc | 
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc | 
| @@ -30,6 +30,7 @@ | 
| #include "content/browser/android/overscroll_glow.h" | 
| #include "content/browser/gpu/gpu_surface_tracker.h" | 
| #include "content/browser/renderer_host/compositor_impl_android.h" | 
| +#include "content/browser/renderer_host/compositor_observer.h" | 
| #include "content/browser/renderer_host/dip_util.h" | 
| #include "content/browser/renderer_host/generic_touch_gesture_android.h" | 
| #include "content/browser/renderer_host/image_transport_factory_android.h" | 
| @@ -120,9 +121,10 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 
| current_mailbox_output_surface_id_(kUndefinedOutputSurfaceId), | 
| weak_ptr_factory_(this), | 
| overscroll_effect_enabled_(true), | 
| - flush_input_requested_(false) { | 
| + flush_input_requested_(false), | 
| + compositor_(NULL) { | 
| if (!UsingDelegatedRenderer()) { | 
| - texture_layer_ = cc::TextureLayer::Create(this); | 
| + texture_layer_ = cc::TextureLayer::Create(NULL); | 
| layer_ = texture_layer_; | 
| } | 
| @@ -152,6 +154,10 @@ RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { | 
| if (texture_layer_.get()) | 
| texture_layer_->ClearClient(); | 
| + | 
| + if (compositor_) { | 
| 
 
aelias_OOO_until_Jul13
2013/10/19 03:43:27
nit: no {}.  Likewise in many other clauses with o
 
powei
2013/11/08 21:34:47
Done.
 
 | 
| + compositor_->RemoveObserver(this); | 
| + } | 
| } | 
| @@ -195,6 +201,10 @@ void RenderWidgetHostViewAndroid::WasShown() { | 
| return; | 
| host_->WasShown(); | 
| + | 
| + if (compositor_ && !compositor_->HasObserver(this)) { | 
| 
 
aelias_OOO_until_Jul13
2013/10/19 03:43:27
Please make the HasObserver check an early return
 
powei
2013/11/08 21:34:47
Done.
 
 | 
| + compositor_->AddObserver(this); | 
| + } | 
| } | 
| void RenderWidgetHostViewAndroid::WasHidden() { | 
| @@ -206,6 +216,10 @@ void RenderWidgetHostViewAndroid::WasHidden() { | 
| // Inform the renderer that we are being hidden so it can reduce its resource | 
| // utilization. | 
| host_->WasHidden(); | 
| + | 
| + if (compositor_) { | 
| + compositor_->RemoveObserver(this); | 
| + } | 
| } | 
| void RenderWidgetHostViewAndroid::WasResized() { | 
| @@ -699,7 +713,7 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame( | 
| frame_provider_ = new cc::DelegatedFrameProvider( | 
| resource_collection_.get(), frame_data.Pass()); | 
| delegated_renderer_layer_ = | 
| - cc::DelegatedRendererLayer::Create(this, frame_provider_); | 
| + cc::DelegatedRendererLayer::Create(NULL, frame_provider_); | 
| layer_ = delegated_renderer_layer_; | 
| if (are_layers_attached_) | 
| AttachLayers(); | 
| @@ -861,6 +875,7 @@ void RenderWidgetHostViewAndroid::BuffersSwapped( | 
| if (!texture_id_in_layer_) { | 
| texture_id_in_layer_ = factory->CreateTexture(); | 
| + texture_layer_->SetTextureId(texture_id_in_layer_); | 
| texture_layer_->SetIsDrawable(true); | 
| texture_layer_->SetContentsOpaque(true); | 
| } | 
| @@ -1246,6 +1261,21 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( | 
| AttachLayers(); | 
| } | 
| +void RenderWidgetHostViewAndroid::SetCompositor(Compositor* compositor) { | 
| + if (compositor_ == compositor) | 
| + return; | 
| + | 
| + if (compositor_) { | 
| + compositor_->RemoveObserver(this); | 
| 
 
David Trainor- moved to gerrit
2013/10/21 15:26:08
Is it safe to call RemoveObserver if it isn't adde
 
powei
2013/11/08 21:34:47
It is safe.  observer_list has an early out for re
 
 | 
| + } | 
| + | 
| + compositor_ = compositor; | 
| + | 
| + if (are_layers_attached_ && compositor_ && !compositor_->HasObserver(this)) { | 
| 
 
David Trainor- moved to gerrit
2013/10/21 15:26:08
Can remove HasObserver if you put it into AddObser
 
powei
2013/11/08 21:34:47
Done.
 
 | 
| + compositor_->AddObserver(this); | 
| + } | 
| +} | 
| + | 
| void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 
| while (!ack_callbacks_.empty()) { | 
| ack_callbacks_.front().Run(); | 
| @@ -1259,26 +1289,11 @@ void RenderWidgetHostViewAndroid::HasTouchEventHandlers( | 
| content_view_core_->HasTouchEventHandlers(need_touch_events); | 
| } | 
| -unsigned RenderWidgetHostViewAndroid::PrepareTexture() { | 
| - RunAckCallbacks(); | 
| - return texture_id_in_layer_; | 
| -} | 
| - | 
| -void RenderWidgetHostViewAndroid::DidCommitFrameData() { | 
| +void RenderWidgetHostViewAndroid::OnCompositingDidCommit( | 
| + Compositor* compositor) { | 
| RunAckCallbacks(); | 
| } | 
| -WebKit::WebGraphicsContext3D* RenderWidgetHostViewAndroid::Context3d() { | 
| - return ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); | 
| -} | 
| - | 
| -bool RenderWidgetHostViewAndroid::PrepareTextureMailbox( | 
| - cc::TextureMailbox* mailbox, | 
| - scoped_ptr<cc::SingleReleaseCallback>* release_callback, | 
| - bool use_shared_memory) { | 
| - return false; | 
| -} | 
| - | 
| void RenderWidgetHostViewAndroid::OnLostResources() { | 
| if (texture_layer_.get()) | 
| texture_layer_->SetIsDrawable(false); |