Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 26753005: Adding compositor callbacks to RenderWidgetHostViewAndroid (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Plumb compositor provider through instead of compositor Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698