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 6933cd161ccea094477fdb5dc3b6dc50375c4d3b..67f9463184598932b1098492d10e7779cac15c36 100644 | 
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc | 
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc | 
| @@ -40,6 +40,8 @@ | 
| #include "content/common/gpu/gpu_messages.h" | 
| #include "content/common/input_messages.h" | 
| #include "content/common/view_messages.h" | 
| +#include "content/public/browser/android/compositor_observer.h" | 
| +#include "content/public/browser/android/compositor_provider.h" | 
| #include "content/public/common/content_switches.h" | 
| #include "gpu/config/gpu_driver_bug_workaround_type.h" | 
| #include "skia/ext/image_operations.h" | 
| @@ -101,7 +103,8 @@ bool UsingDelegatedRenderer() { | 
| RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 
| RenderWidgetHostImpl* widget_host, | 
| - ContentViewCoreImpl* content_view_core) | 
| + ContentViewCoreImpl* content_view_core, | 
| + CompositorProvider* compositor_provider) | 
| : host_(widget_host), | 
| needs_begin_frame_(false), | 
| are_layers_attached_(true), | 
| @@ -113,9 +116,10 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 
| weak_ptr_factory_(this), | 
| overscroll_effect_enabled_(true), | 
| flush_input_requested_(false), | 
| - accelerated_surface_route_id_(0) { | 
| + accelerated_surface_route_id_(0), | 
| + compositor_provider_(NULL) { | 
| 
 
no sievers
2013/11/08 22:14:04
nit: init to |compositor_provider| here
 
powei
2013/11/08 22:51:16
Done.
 
 | 
| if (!UsingDelegatedRenderer()) { | 
| - texture_layer_ = cc::TextureLayer::Create(this); | 
| + texture_layer_ = cc::TextureLayer::Create(NULL); | 
| layer_ = texture_layer_; | 
| } | 
| @@ -131,6 +135,7 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 
| host_->SetView(this); | 
| SetContentViewCore(content_view_core); | 
| + SetCompositorProvider(compositor_provider); | 
| ImageTransportFactoryAndroid::AddObserver(this); | 
| } | 
| @@ -148,6 +153,8 @@ RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { | 
| if (resource_collection_.get()) | 
| resource_collection_->SetClient(NULL); | 
| + | 
| + UnobserveCompositor(GetCompositor()); | 
| } | 
| @@ -191,6 +198,8 @@ void RenderWidgetHostViewAndroid::WasShown() { | 
| return; | 
| host_->WasShown(); | 
| + | 
| + ObserveCompositor(GetCompositor()); | 
| } | 
| void RenderWidgetHostViewAndroid::WasHidden() { | 
| @@ -202,6 +211,8 @@ void RenderWidgetHostViewAndroid::WasHidden() { | 
| // Inform the renderer that we are being hidden so it can reduce its resource | 
| // utilization. | 
| host_->WasHidden(); | 
| + | 
| + UnobserveCompositor(GetCompositor()); | 
| } | 
| void RenderWidgetHostViewAndroid::WasResized() { | 
| @@ -700,7 +711,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(); | 
| @@ -838,6 +849,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); | 
| } | 
| @@ -1244,6 +1256,39 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( | 
| AttachLayers(); | 
| } | 
| +void RenderWidgetHostViewAndroid::SetCompositorProvider( | 
| + CompositorProvider* compositor_provider) { | 
| + compositor_provider_ = compositor_provider; | 
| + if (compositor_provider_) { | 
| + compositor_provider_->AddCompositorProviderClient(this); | 
| + ObserveCompositor(GetCompositor()); | 
| + } | 
| +} | 
| + | 
| +void RenderWidgetHostViewAndroid::ChangeCompositor(Compositor* new_compositor) { | 
| + UnobserveCompositor(GetCompositor()); | 
| + ObserveCompositor(new_compositor); | 
| +} | 
| + | 
| +Compositor* RenderWidgetHostViewAndroid::GetCompositor() { | 
| + if (!compositor_provider_) | 
| + return NULL; | 
| + Compositor* comp = compositor_provider_->GetCompositor(); | 
| + return comp; | 
| +} | 
| + | 
| +void RenderWidgetHostViewAndroid::UnobserveCompositor( | 
| 
 
no sievers
2013/11/08 22:14:04
No need for an extra function. And then it avoids
 
powei
2013/11/08 22:51:16
Done.
 
 | 
| + Compositor* compositor) { | 
| + if (compositor) | 
| + compositor->RemoveObserver(this); | 
| +} | 
| + | 
| +void RenderWidgetHostViewAndroid::ObserveCompositor( | 
| + Compositor* compositor) { | 
| + if (compositor) | 
| + compositor->AddObserver(this); | 
| +} | 
| + | 
| void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 
| while (!ack_callbacks_.empty()) { | 
| ack_callbacks_.front().Run(); | 
| @@ -1257,20 +1302,9 @@ void RenderWidgetHostViewAndroid::HasTouchEventHandlers( | 
| content_view_core_->HasTouchEventHandlers(need_touch_events); | 
| } | 
| -unsigned RenderWidgetHostViewAndroid::PrepareTexture() { | 
| +void RenderWidgetHostViewAndroid::OnCompositingDidCommit( | 
| + Compositor* compositor) { | 
| RunAckCallbacks(); | 
| - return texture_id_in_layer_; | 
| -} | 
| - | 
| -void RenderWidgetHostViewAndroid::DidCommitFrameData() { | 
| - RunAckCallbacks(); | 
| -} | 
| - | 
| -bool RenderWidgetHostViewAndroid::PrepareTextureMailbox( | 
| - cc::TextureMailbox* mailbox, | 
| - scoped_ptr<cc::SingleReleaseCallback>* release_callback, | 
| - bool use_shared_memory) { | 
| - return false; | 
| } | 
| void RenderWidgetHostViewAndroid::OnLostResources() { | 
| @@ -1380,7 +1414,7 @@ void RenderWidgetHostViewPort::GetDefaultScreenInfo( | 
| RenderWidgetHostView* | 
| RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 
| RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 
| - return new RenderWidgetHostViewAndroid(rwhi, NULL); | 
| + return new RenderWidgetHostViewAndroid(rwhi, NULL, NULL); | 
| 
 
no sievers
2013/11/08 22:14:04
Hmm what's the point if we can't create it with th
 
powei
2013/11/08 22:51:16
I don't think this is ever called.  Maybe a NOTREA
 
 | 
| } | 
| } // namespace content |