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 60b0de6dcead2ff63a90ebdd622fcfc2776d83d3..ddbcc78bc2f1fcc5ac06e70e601d045605b8d1b6 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -20,7 +20,6 @@ |
#include "cc/layers/delegated_frame_provider.h" |
#include "cc/layers/delegated_renderer_layer.h" |
#include "cc/layers/layer.h" |
-#include "cc/layers/texture_layer.h" |
#include "cc/output/compositor_frame.h" |
#include "cc/output/compositor_frame_ack.h" |
#include "cc/output/copy_output_request.h" |
@@ -70,24 +69,6 @@ namespace { |
const int kUndefinedOutputSurfaceId = -1; |
static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime"; |
-void InsertSyncPointAndAckForCompositor( |
- int renderer_host_id, |
- uint32 output_surface_id, |
- int route_id, |
- const gpu::Mailbox& return_mailbox, |
- const gfx::Size return_size) { |
- cc::CompositorFrameAck ack; |
- ack.gl_frame_data.reset(new cc::GLFrameData()); |
- if (!return_mailbox.IsZero()) { |
- ack.gl_frame_data->mailbox = return_mailbox; |
- ack.gl_frame_data->size = return_size; |
- ack.gl_frame_data->sync_point = |
- ImageTransportFactoryAndroid::GetInstance()->InsertSyncPoint(); |
- } |
- RenderWidgetHostImpl::SendSwapCompositorFrameAck( |
- route_id, output_surface_id, renderer_host_id, ack); |
-} |
- |
// Sends an acknowledgement to the renderer of a processed IME event. |
void SendImeEventAck(RenderWidgetHostImpl* host) { |
host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID())); |
@@ -141,7 +122,6 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
content_view_core_(NULL), |
ime_adapter_android_(this), |
cached_background_color_(SK_ColorWHITE), |
- texture_id_in_layer_(0), |
last_output_surface_id_(kUndefinedOutputSurfaceId), |
weak_ptr_factory_(this), |
overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( |
@@ -153,14 +133,8 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
widget_host->GetProcess()->GetID(), |
widget_host->GetRoutingID()) != NULL), |
frame_evictor_(new DelegatedFrameEvictor(this)), |
- using_delegated_renderer_(IsDelegatedRendererEnabled()), |
locks_on_frame_count_(0), |
root_window_destroyed_(false) { |
- if (!using_delegated_renderer_) { |
- texture_layer_ = cc::TextureLayer::Create(NULL); |
- layer_ = texture_layer_; |
- } |
- |
host_->SetView(this); |
SetContentViewCore(content_view_core); |
ImageTransportFactoryAndroid::AddObserver(this); |
@@ -170,14 +144,6 @@ RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { |
ImageTransportFactoryAndroid::RemoveObserver(this); |
SetContentViewCore(NULL); |
DCHECK(ack_callbacks_.empty()); |
- if (texture_id_in_layer_) { |
- ImageTransportFactoryAndroid::GetInstance()->DeleteTexture( |
- texture_id_in_layer_); |
- } |
- |
- if (texture_layer_.get()) |
- texture_layer_->ClearClient(); |
- |
if (resource_collection_.get()) |
resource_collection_->SetClient(NULL); |
} |
@@ -296,14 +262,6 @@ bool RenderWidgetHostViewAndroid::HasValidFrame() const { |
if (!frame_evictor_->HasFrame()) |
return false; |
- if (using_delegated_renderer_) { |
- if (!delegated_renderer_layer_.get()) |
- return false; |
- } else { |
- if (texture_id_in_layer_ == 0) |
- return false; |
- } |
- |
return true; |
} |
@@ -660,40 +618,30 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( |
scoped_ptr<cc::CopyOutputRequest> request; |
scoped_refptr<cc::Layer> readback_layer; |
- if (using_delegated_renderer_) { |
- DCHECK(content_view_core_); |
- DCHECK(content_view_core_->GetWindowAndroid()); |
- ui::WindowAndroidCompositor* compositor = |
- content_view_core_->GetWindowAndroid()->GetCompositor(); |
- DCHECK(compositor); |
- DCHECK(frame_provider_); |
- scoped_refptr<cc::DelegatedRendererLayer> delegated_layer = |
- cc::DelegatedRendererLayer::Create(frame_provider_); |
- delegated_layer->SetDisplaySize(texture_size_in_layer_); |
- delegated_layer->SetBounds(content_size_in_layer_); |
- delegated_layer->SetHideLayerAndSubtree(true); |
- delegated_layer->SetIsDrawable(true); |
- delegated_layer->SetContentsOpaque(true); |
- compositor->AttachLayerForReadback(delegated_layer); |
- |
- readback_layer = delegated_layer; |
- request = cc::CopyOutputRequest::CreateRequest( |
- base::Bind(&RenderWidgetHostViewAndroid:: |
- PrepareTextureCopyOutputResultForDelegatedReadback, |
- dst_size_in_pixel, |
- bitmap_config, |
- start_time, |
- readback_layer, |
- callback)); |
- } else { |
- readback_layer = layer_; |
- request = cc::CopyOutputRequest::CreateRequest( |
- base::Bind(&RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult, |
- dst_size_in_pixel, |
- bitmap_config, |
- start_time, |
- callback)); |
- } |
+ DCHECK(content_view_core_); |
+ DCHECK(content_view_core_->GetWindowAndroid()); |
+ ui::WindowAndroidCompositor* compositor = |
+ content_view_core_->GetWindowAndroid()->GetCompositor(); |
+ DCHECK(compositor); |
+ DCHECK(frame_provider_); |
+ scoped_refptr<cc::DelegatedRendererLayer> delegated_layer = |
+ cc::DelegatedRendererLayer::Create(frame_provider_); |
+ delegated_layer->SetDisplaySize(texture_size_in_layer_); |
+ delegated_layer->SetBounds(content_size_in_layer_); |
+ delegated_layer->SetHideLayerAndSubtree(true); |
+ delegated_layer->SetIsDrawable(true); |
+ delegated_layer->SetContentsOpaque(true); |
+ compositor->AttachLayerForReadback(delegated_layer); |
+ |
+ readback_layer = delegated_layer; |
+ request = cc::CopyOutputRequest::CreateRequest( |
+ base::Bind(&RenderWidgetHostViewAndroid:: |
+ PrepareTextureCopyOutputResultForDelegatedReadback, |
+ dst_size_in_pixel, |
+ bitmap_config, |
+ start_time, |
+ readback_layer, |
+ callback)); |
request->set_area(src_subrect_in_pixel); |
readback_layer->RequestCopyOfOutput(request.Pass()); |
} |
@@ -763,7 +711,6 @@ void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { |
void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { |
RemoveLayers(); |
frame_provider_ = NULL; |
- delegated_renderer_layer_ = NULL; |
layer_ = NULL; |
} |
@@ -799,21 +746,19 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
RemoveLayers(); |
frame_provider_ = new cc::DelegatedFrameProvider( |
resource_collection_.get(), frame_data.Pass()); |
- delegated_renderer_layer_ = |
- cc::DelegatedRendererLayer::Create(frame_provider_); |
- layer_ = delegated_renderer_layer_; |
+ layer_ = cc::DelegatedRendererLayer::Create(frame_provider_); |
AttachLayers(); |
} else { |
frame_provider_->SetFrameData(frame_data.Pass()); |
} |
} |
- if (delegated_renderer_layer_.get()) { |
- delegated_renderer_layer_->SetDisplaySize(texture_size_in_layer_); |
- delegated_renderer_layer_->SetIsDrawable(true); |
- delegated_renderer_layer_->SetContentsOpaque(true); |
- delegated_renderer_layer_->SetBounds(content_size_in_layer_); |
- delegated_renderer_layer_->SetNeedsDisplay(); |
+ if (layer_.get()) { |
+ layer_->SetDisplaySize(texture_size_in_layer_); |
+ layer_->SetIsDrawable(true); |
+ layer_->SetContentsOpaque(true); |
+ layer_->SetBounds(content_size_in_layer_); |
+ layer_->SetNeedsDisplay(); |
} |
base::Closure ack_callback = |
@@ -844,6 +789,11 @@ void RenderWidgetHostViewAndroid::ComputeContentsSize( |
void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
uint32 output_surface_id, |
scoped_ptr<cc::CompositorFrame> frame) { |
+ if (!frame->delegated_frame_data) { |
+ LOG(ERROR) << "Non-delegated renderer path no longer supported"; |
+ return; |
+ } |
+ |
if (locks_on_frame_count_ > 0) { |
DCHECK(HasValidFrame()); |
RetainFrame(output_surface_id, frame.Pass()); |
@@ -862,45 +812,14 @@ void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
} |
} |
- if (frame->delegated_frame_data) { |
- DCHECK(using_delegated_renderer_); |
- |
- DCHECK(frame->delegated_frame_data); |
- DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); |
+ DCHECK(!frame->delegated_frame_data->render_pass_list.empty()); |
- cc::RenderPass* root_pass = |
- frame->delegated_frame_data->render_pass_list.back(); |
- texture_size_in_layer_ = root_pass->output_rect.size(); |
- ComputeContentsSize(frame->metadata); |
- |
- SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); |
- frame_evictor_->SwappedFrame(!host_->is_hidden()); |
- return; |
- } |
- |
- DCHECK(!using_delegated_renderer_); |
- |
- if (!frame->gl_frame_data || frame->gl_frame_data->mailbox.IsZero()) |
- return; |
- |
- if (output_surface_id != last_output_surface_id_) { |
- current_mailbox_ = gpu::Mailbox(); |
- last_output_surface_id_ = kUndefinedOutputSurfaceId; |
- } |
- |
- base::Closure callback = base::Bind(&InsertSyncPointAndAckForCompositor, |
- host_->GetProcess()->GetID(), |
- output_surface_id, |
- host_->GetRoutingID(), |
- current_mailbox_, |
- texture_size_in_layer_); |
- ImageTransportFactoryAndroid::GetInstance()->WaitSyncPoint( |
- frame->gl_frame_data->sync_point); |
- |
- texture_size_in_layer_ = frame->gl_frame_data->size; |
+ cc::RenderPass* root_pass = |
+ frame->delegated_frame_data->render_pass_list.back(); |
+ texture_size_in_layer_ = root_pass->output_rect.size(); |
ComputeContentsSize(frame->metadata); |
- BuffersSwapped(frame->gl_frame_data->mailbox, output_surface_id, callback); |
+ SwapDelegatedFrame(output_surface_id, frame->delegated_frame_data.Pass()); |
frame_evictor_->SwappedFrame(!host_->is_hidden()); |
} |
@@ -1010,31 +929,6 @@ void RenderWidgetHostViewAndroid::AcceleratedSurfaceBuffersSwapped( |
NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; |
} |
-void RenderWidgetHostViewAndroid::BuffersSwapped( |
- const gpu::Mailbox& mailbox, |
- uint32_t output_surface_id, |
- const base::Closure& ack_callback) { |
- ImageTransportFactoryAndroid* factory = |
- ImageTransportFactoryAndroid::GetInstance(); |
- |
- 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); |
- } |
- |
- ImageTransportFactoryAndroid::GetInstance()->AcquireTexture( |
- texture_id_in_layer_, mailbox.name); |
- |
- current_mailbox_ = mailbox; |
- last_output_surface_id_ = output_surface_id; |
- |
- ack_callbacks_.push(ack_callback); |
- if (host_->is_hidden()) |
- RunAckCallbacks(); |
-} |
- |
void RenderWidgetHostViewAndroid::AttachLayers() { |
if (!content_view_core_) |
return; |
@@ -1088,16 +982,7 @@ void RenderWidgetHostViewAndroid::AcceleratedSurfaceRelease() { |
} |
void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { |
- if (texture_id_in_layer_) { |
- texture_layer_->SetTextureId(0); |
- texture_layer_->SetIsDrawable(false); |
- ImageTransportFactoryAndroid::GetInstance()->DeleteTexture( |
- texture_id_in_layer_); |
- texture_id_in_layer_ = 0; |
- current_mailbox_ = gpu::Mailbox(); |
- last_output_surface_id_ = kUndefinedOutputSurfaceId; |
- } |
- if (delegated_renderer_layer_.get()) |
+ if (layer_.get()) |
DestroyDelegatedContent(); |
frame_evictor_->DiscardedFrame(); |
} |
@@ -1384,11 +1269,8 @@ void RenderWidgetHostViewAndroid::OnDetachCompositor() { |
void RenderWidgetHostViewAndroid::OnLostResources() { |
ReleaseLocksOnSurface(); |
- if (texture_layer_.get()) |
- texture_layer_->SetIsDrawable(false); |
- if (delegated_renderer_layer_.get()) |
+ if (layer_.get()) |
DestroyDelegatedContent(); |
- texture_id_in_layer_ = 0; |
DCHECK(ack_callbacks_.empty()); |
} |