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..b1ea7ace9f3f8c6f822bf6161c4ac55dddfd19a0 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" |
| @@ -122,7 +123,7 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
| overscroll_effect_enabled_(true), |
| flush_input_requested_(false) { |
| if (!UsingDelegatedRenderer()) { |
| - texture_layer_ = cc::TextureLayer::Create(this); |
| + texture_layer_ = cc::TextureLayer::Create(NULL); |
| layer_ = texture_layer_; |
| } |
| @@ -506,9 +507,27 @@ void RenderWidgetHostViewAndroid::RenderProcessGone( |
| Destroy(); |
| } |
| -void RenderWidgetHostViewAndroid::Destroy() { |
| - RemoveLayers(); |
| +void RenderWidgetHostViewAndroid::DetachFromContentViewCore( |
|
no sievers
2013/10/16 23:34:23
Can we make the changes to this file really simple
powei
2013/10/19 00:05:18
Done. WasHidden is not always guarranteed to run
|
| + bool check_layers_attached) { |
| + RunAckCallbacks(); |
| + |
| + if (!check_layers_attached || are_layers_attached_) { |
| + RemoveLayers(); |
| + } |
| + if (content_view_core_) { |
| + Compositor* compositor = content_view_core_->GetCompositor(); |
| + if (compositor) { |
| + compositor->RemoveObserver(this); |
| + } |
| + } |
| content_view_core_ = NULL; |
| +} |
| + |
| +void RenderWidgetHostViewAndroid::Destroy() { |
| + ack_callbacks_ = std::queue<base::Closure>(); |
|
no sievers
2013/10/16 23:34:23
Why this?
powei
2013/10/19 00:05:18
Done. Removed.
|
| + |
| + bool check_layers_attached = false; |
| + DetachFromContentViewCore(check_layers_attached); |
| // The RenderWidgetHost's destruction led here, so don't call it. |
| host_ = NULL; |
| @@ -699,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(); |
| @@ -861,6 +880,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); |
| } |
| @@ -1235,13 +1255,20 @@ void RenderWidgetHostViewAndroid::OnOverscrolled( |
| void RenderWidgetHostViewAndroid::SetContentViewCore( |
| ContentViewCoreImpl* content_view_core) { |
| - RunAckCallbacks(); |
| - |
| - if (are_layers_attached_) |
| - RemoveLayers(); |
| + if (content_view_core != content_view_core_) { |
| + bool check_layers_attached = true; |
| + DetachFromContentViewCore(check_layers_attached); |
| + } |
| content_view_core_ = content_view_core; |
| + if (content_view_core_) { |
| + Compositor* compositor = content_view_core_->GetCompositor(); |
| + if (compositor && !compositor->HasObserver(this)) { |
| + compositor->AddObserver(this); |
| + } |
| + } |
| + |
| if (are_layers_attached_) |
| AttachLayers(); |
| } |
| @@ -1259,24 +1286,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(); |
| -} |
| - |
| -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() { |