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 8382811d8010dd1aa4e1cf30428cdfdc807f174e..01b36f31b4bf7adc98608206cf315a219c6b9018 100644 | 
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc | 
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc | 
| @@ -46,6 +46,7 @@ | 
| #include "skia/ext/image_operations.h" | 
| #include "third_party/khronos/GLES2/gl2.h" | 
| #include "third_party/khronos/GLES2/gl2ext.h" | 
| +#include "ui/base/android/window_android.h" | 
| #include "ui/gfx/android/device_display_info.h" | 
| #include "ui/gfx/android/java_bitmap.h" | 
| #include "ui/gfx/display.h" | 
| @@ -114,9 +115,12 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 
| weak_ptr_factory_(this), | 
| overscroll_effect_enabled_(true), | 
| flush_input_requested_(false), | 
| - accelerated_surface_route_id_(0) { | 
| + accelerated_surface_route_id_(0), | 
| + using_synchronous_compositor_(SynchronousCompositorImpl::FromID( | 
| + widget_host->GetProcess()->GetID(), | 
| + widget_host->GetRoutingID()) != NULL) { | 
| if (!UsingDelegatedRenderer()) { | 
| - texture_layer_ = cc::TextureLayer::Create(this); | 
| + texture_layer_ = cc::TextureLayer::Create(NULL); | 
| layer_ = texture_layer_; | 
| } | 
| @@ -192,6 +196,9 @@ void RenderWidgetHostViewAndroid::WasShown() { | 
| return; | 
| host_->WasShown(); | 
| + | 
| + if (content_view_core_ && !using_synchronous_compositor_) | 
| + content_view_core_->GetWindowAndroid()->AddObserver(this); | 
| } | 
| void RenderWidgetHostViewAndroid::WasHidden() { | 
| @@ -203,6 +210,9 @@ void RenderWidgetHostViewAndroid::WasHidden() { | 
| // Inform the renderer that we are being hidden so it can reduce its resource | 
| // utilization. | 
| host_->WasHidden(); | 
| + | 
| + if (content_view_core_ && !using_synchronous_compositor_) | 
| + content_view_core_->GetWindowAndroid()->RemoveObserver(this); | 
| } | 
| void RenderWidgetHostViewAndroid::WasResized() { | 
| @@ -506,7 +516,7 @@ void RenderWidgetHostViewAndroid::RenderProcessGone( | 
| void RenderWidgetHostViewAndroid::Destroy() { | 
| RemoveLayers(); | 
| - content_view_core_ = NULL; | 
| + SetContentViewCore(NULL); | 
| // The RenderWidgetHost's destruction led here, so don't call it. | 
| host_ = NULL; | 
| @@ -708,7 +718,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(); | 
| @@ -846,6 +856,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 +1255,10 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( | 
| if (are_layers_attached_) | 
| RemoveLayers(); | 
| + if (content_view_core != content_view_core_ && content_view_core_ && | 
| 
 
boliu
2013/11/18 19:39:25
This still doesn't seem to make sense. If content_
 
powei
2013/11/18 19:44:02
I'm not sure about the other calls so I'm hesitant
 
powei
2013/11/18 19:47:14
Maybe you'd be ok with just: 
if (content_view_cor
 
powei
2013/11/18 21:40:05
Done.
 
 | 
| + !using_synchronous_compositor_) | 
| + content_view_core_->GetWindowAndroid()->RemoveObserver(this); | 
| + | 
| content_view_core_ = content_view_core; | 
| if (GetBrowserAccessibilityManager()) { | 
| @@ -1254,8 +1269,11 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( | 
| SetContentViewCore(obj); | 
| } | 
| - if (are_layers_attached_) | 
| + if (are_layers_attached_) { | 
| AttachLayers(); | 
| + if (content_view_core_ && !using_synchronous_compositor_) | 
| + content_view_core_->GetWindowAndroid()->AddObserver(this); | 
| + } | 
| } | 
| void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 
| @@ -1271,22 +1289,16 @@ void RenderWidgetHostViewAndroid::HasTouchEventHandlers( | 
| content_view_core_->HasTouchEventHandlers(need_touch_events); | 
| } | 
| -unsigned RenderWidgetHostViewAndroid::PrepareTexture() { | 
| +void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { | 
| RunAckCallbacks(); | 
| - return texture_id_in_layer_; | 
| } | 
| -void RenderWidgetHostViewAndroid::DidCommitFrameData() { | 
| +void RenderWidgetHostViewAndroid::OnDetachCompositor() { | 
| + DCHECK(content_view_core_); | 
| + DCHECK(!using_synchronous_compositor_); | 
| RunAckCallbacks(); | 
| } | 
| -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); |