| 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 825c241d4ff0342db2bf39b405476684797a8def..b28bbe58d4c36ecef7ec614dffc5fd8b84165778 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
|
| @@ -56,7 +56,8 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
|
| content_view_core_(content_view_core),
|
| ime_adapter_android_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
|
| texture_layer_(WebKit::WebExternalTextureLayer::create()),
|
| - texture_id_in_layer_(0) {
|
| + texture_id_in_layer_(0),
|
| + current_buffer_id_(0) {
|
| host_->SetView(this);
|
| // RenderWidgetHost is initialized as visible. If is_hidden_ is true, tell
|
| // RenderWidgetHost to hide.
|
| @@ -364,9 +365,30 @@ void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() {
|
| void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped(
|
| const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
|
| int gpu_host_id) {
|
| - texture_layer_->setTextureId(params.surface_handle);
|
| - texture_id_in_layer_ = params.surface_handle;
|
| + DCHECK(id_to_texture_map_.find(params.surface_handle) !=
|
| + id_to_texture_map_.end());
|
| + // TODO(sievers): The compositor should do this on the impl thread.
|
| + // And the release should happen after the next commit.
|
| +
|
| + TextureMap::const_iterator it =
|
| + id_to_texture_map_.find(params.surface_handle);
|
| + DCHECK(it != id_to_texture_map_.end());
|
| + const TextureInfo* texture = it->second;
|
| + ImageTransportFactoryAndroid::GetInstance()->AcquireTexture(
|
| + texture->id, texture->mailbox_name.get());
|
| + texture_layer_->setTextureId(texture->id);
|
| texture_layer_->layer()->invalidate();
|
| + texture_id_in_layer_ = params.surface_handle;
|
| +
|
| + if (current_buffer_id_) {
|
| + TextureMap::const_iterator it = id_to_texture_map_.find(
|
| + current_buffer_id_);
|
| + DCHECK(it != id_to_texture_map_.end());
|
| + ImageTransportFactoryAndroid::GetInstance()->ReleaseTexture(
|
| + it->second->id, it->second->mailbox_name.get());
|
| + }
|
| +
|
| + current_buffer_id_ = params.surface_handle;
|
| // TODO(sievers): The view and layer should get sized proactively.
|
| if (((gfx::Size)texture_layer_->layer()->bounds()).IsEmpty())
|
| texture_layer_->layer()->setBounds(
|
| @@ -392,6 +414,40 @@ void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() {
|
| NOTREACHED();
|
| }
|
|
|
| +void RenderWidgetHostViewAndroid::AcceleratedSurfaceNew(
|
| + int32 width_in_pixel, int32 height_in_pixel, uint64 surface_id,
|
| + const std::string& mailbox_name) {
|
| + DCHECK(surface_id);
|
| + if (id_to_texture_map_.find(surface_id) != id_to_texture_map_.end()) {
|
| + // The buffer was reallocated (e.g. resize), but there is nothing we
|
| + // need to do here.
|
| + TextureInfo* texture = id_to_texture_map_[surface_id];
|
| + DCHECK(!memcmp(texture->mailbox_name.get(),
|
| + mailbox_name.c_str(),
|
| + mailbox_name.length()));
|
| + } else {
|
| + scoped_ptr<TextureInfo> texture(new TextureInfo);
|
| + texture->id = ImageTransportFactoryAndroid::GetInstance()->CreateTexture();
|
| + texture->mailbox_name.reset(new signed char[mailbox_name.length()]);
|
| + memcpy(texture->mailbox_name.get(),
|
| + mailbox_name.c_str(),
|
| + mailbox_name.length());
|
| + id_to_texture_map_[surface_id] = texture.release();
|
| + }
|
| +
|
| + // There should only ever be a front- and backbuffer.
|
| + DCHECK(id_to_texture_map_.size() <= 2);
|
| +}
|
| +
|
| +void RenderWidgetHostViewAndroid::AcceleratedSurfaceRelease(uint64 surface_id) {
|
| + DCHECK(surface_id);
|
| + TextureMap::iterator it = id_to_texture_map_.find(surface_id);
|
| + DCHECK(it != id_to_texture_map_.end());
|
| + ImageTransportFactoryAndroid::GetInstance()->DeleteTexture(it->second->id);
|
| + delete it->second;
|
| + id_to_texture_map_.erase(it);
|
| +}
|
| +
|
| bool RenderWidgetHostViewAndroid::HasAcceleratedSurface(
|
| const gfx::Size& desired_size) {
|
| NOTREACHED();
|
|
|