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 483c015836abf7da9b5f9511044b966f42833bf6..70f4d52e6f867baa863f78ee9515ae0114f28dfb 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc |
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
| @@ -430,23 +430,22 @@ void RenderWidgetHostViewAndroid::GetScaledContentBitmap( |
| preferred_color_type); |
| } |
| -scoped_refptr<cc::Layer> RenderWidgetHostViewAndroid::CreateDelegatedLayer() |
| - const { |
| - scoped_refptr<cc::Layer> delegated_layer; |
| - DCHECK(!surface_id_.is_null()); |
| +scoped_refptr<cc::SurfaceLayer> RenderWidgetHostViewAndroid::CreateSurfaceLayer( |
| + const cc::SurfaceId& surface_id, |
| + const gfx::Size& size) { |
| + DCHECK(!surface_id.is_null()); |
| cc::SurfaceManager* manager = CompositorImpl::GetSurfaceManager(); |
| DCHECK(manager); |
| // manager must outlive compositors using it. |
| scoped_refptr<cc::SurfaceLayer> surface_layer = cc::SurfaceLayer::Create( |
| base::Bind(&SatisfyCallback, base::Unretained(manager)), |
| base::Bind(&RequireCallback, base::Unretained(manager))); |
| - surface_layer->SetSurfaceId(surface_id_, 1.f, texture_size_in_layer_); |
| - delegated_layer = surface_layer; |
| - delegated_layer->SetBounds(texture_size_in_layer_); |
| - delegated_layer->SetIsDrawable(true); |
| - delegated_layer->SetContentsOpaque(true); |
| + surface_layer->SetSurfaceId(surface_id, 1.f, size); |
| + surface_layer->SetBounds(size); |
| + surface_layer->SetIsDrawable(true); |
| + surface_layer->SetContentsOpaque(true); |
| - return delegated_layer; |
| + return surface_layer; |
| } |
| bool RenderWidgetHostViewAndroid::HasValidFrame() const { |
| @@ -1009,7 +1008,7 @@ void RenderWidgetHostViewAndroid::SubmitCompositorFrame( |
| surface_factory_->Destroy(surface_id_); |
| surface_id_ = id_allocator_->GenerateId(); |
| surface_factory_->Create(surface_id_); |
| - layer_ = CreateDelegatedLayer(); |
| + layer_ = CreateSurfaceLayer(surface_id_, texture_size_in_layer_); |
| DCHECK(layer_); |
| @@ -1027,9 +1026,27 @@ void RenderWidgetHostViewAndroid::SubmitCompositorFrame( |
| ack_callback); |
| } |
| -void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
| +void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
| uint32_t output_surface_id, |
| cc::CompositorFrame frame) { |
| + last_scroll_offset_ = frame.metadata.root_scroll_offset; |
| + DCHECK(frame.delegated_frame_data); |
| + DCHECK(CompositorImpl::GetSurfaceManager()); |
| + |
| + if (locks_on_frame_count_ > 0) { |
| + DCHECK(HasValidFrame()); |
| + RetainFrame(output_surface_id, std::move(frame)); |
| + return; |
| + } |
| + |
| + DCHECK(!frame.delegated_frame_data->render_pass_list.empty()); |
| + |
| + cc::RenderPass* root_pass = |
| + frame.delegated_frame_data->render_pass_list.back().get(); |
| + texture_size_in_layer_ = root_pass->output_rect.size(); |
| + |
| + cc::CompositorFrameMetadata metadata = frame.metadata.Clone(); |
|
danakj
2016/07/01 23:39:40
this is cloned here just to move it later. can you
danakj
2016/07/02 01:09:56
Oh, you left this copying when it doesn't need to
no sievers
2016/07/07 22:25:28
Hmm but that's as before since OnFrameMetadataUpda
|
| + |
| CheckOutputSurfaceChanged(output_surface_id); |
| bool has_content = !texture_size_in_layer_.IsEmpty(); |
| @@ -1044,9 +1061,6 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
| DestroyDelegatedContent(); |
| } else { |
| SubmitCompositorFrame(std::move(frame)); |
| - } |
| - |
| - if (layer_.get()) { |
| layer_->SetIsDrawable(true); |
| layer_->SetContentsOpaque(true); |
| layer_->SetBounds(texture_size_in_layer_); |
| @@ -1054,41 +1068,6 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
| if (host_->is_hidden()) |
| RunAckCallbacks(cc::SurfaceDrawStatus::DRAW_SKIPPED); |
| -} |
| - |
| -void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
| - uint32_t output_surface_id, |
| - cc::CompositorFrame frame) { |
| - last_scroll_offset_ = frame.metadata.root_scroll_offset; |
| - 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, std::move(frame)); |
| - return; |
| - } |
| - |
| - if (!CompositorImpl::GetSurfaceManager() && layer_.get() && |
| - layer_->layer_tree_host()) { |
| - for (size_t i = 0; i < frame.metadata.latency_info.size(); i++) { |
| - std::unique_ptr<cc::SwapPromise> swap_promise( |
| - new cc::LatencyInfoSwapPromise(frame.metadata.latency_info[i])); |
| - layer_->layer_tree_host()->QueueSwapPromise(std::move(swap_promise)); |
| - } |
| - } |
| - |
| - DCHECK(!frame.delegated_frame_data->render_pass_list.empty()); |
| - |
| - cc::RenderPass* root_pass = |
| - frame.delegated_frame_data->render_pass_list.back().get(); |
| - texture_size_in_layer_ = root_pass->output_rect.size(); |
| - |
| - cc::CompositorFrameMetadata metadata = frame.metadata.Clone(); |
| - |
| - SwapDelegatedFrame(output_surface_id, std::move(frame)); |
| frame_evictor_->SwappedFrame(!host_->is_hidden()); |
| // As the metadata update may trigger view invalidation, always call it after |