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

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

Issue 10828356: Very basic Android browser-side compositing support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ifdef Attach/RemoveLayer API Created 8 years, 4 months 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 d16141b25ff6c3ad5a005f1253f50968229dae01..ecf91c3eaf6b4e8ca8a62a34f83f4019f68bd855 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -15,6 +15,7 @@
#include "content/common/android/device_info.h"
#include "content/common/gpu/gpu_messages.h"
#include "content/common/view_messages.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
namespace content {
@@ -26,12 +27,15 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
// ContentViewCore. It being NULL means that it is not attached to the
// View system yet, so we treat it as hidden.
is_hidden_(!content_view_core),
- content_view_core_(content_view_core) {
+ content_view_core_(content_view_core),
+ texture_layer_(WebKit::WebExternalTextureLayer::create()) {
host_->SetView(this);
// RenderWidgetHost is initialized as visible. If is_hidden_ is true, tell
// RenderWidgetHost to hide.
if (is_hidden_)
host_->WasHidden();
+ texture_layer_->layer()->setDrawsContent(!is_hidden_);
+ host_->AttachLayer(texture_layer_->layer());
}
RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() {
@@ -85,6 +89,7 @@ void RenderWidgetHostViewAndroid::SetSize(const gfx::Size& size) {
requested_size_ = gfx::Size(size.width(), size.height());
host_->WasResized();
}
+ texture_layer_->layer()->setBounds(size);
}
void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) {
@@ -141,11 +146,11 @@ bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const {
}
void RenderWidgetHostViewAndroid::Show() {
- // nothing to do
+ texture_layer_->layer()->setDrawsContent(true);
}
void RenderWidgetHostViewAndroid::Hide() {
- // nothing to do
+ texture_layer_->layer()->setDrawsContent(false);
}
bool RenderWidgetHostViewAndroid::IsShowing() {
@@ -196,6 +201,8 @@ void RenderWidgetHostViewAndroid::RenderViewGone(
}
void RenderWidgetHostViewAndroid::Destroy() {
+ host_->RemoveLayer(texture_layer_->layer());
+
content_view_core_ = NULL;
// The RenderWidgetHost's destruction led here, so don't call it.
@@ -256,6 +263,12 @@ void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() {
void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped(
const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
int gpu_host_id) {
+ texture_layer_->setTextureId(params.surface_handle);
+ texture_layer_->layer()->invalidate();
+ // TODO(sievers): The view and layer should get sized proactively.
+ if (((gfx::Size)texture_layer_->layer()->bounds()).IsEmpty())
+ texture_layer_->layer()->setBounds(
+ DrawDelegateImpl::GetInstance()->GetBounds());
DrawDelegateImpl::GetInstance()->OnSurfaceUpdated(
params.surface_handle,
this,

Powered by Google App Engine
This is Rietveld 408576698