Chromium Code Reviews| Index: content/renderer/gpu/compositor_output_surface.cc |
| diff --git a/content/renderer/gpu/compositor_output_surface.cc b/content/renderer/gpu/compositor_output_surface.cc |
| index 1284fe47d65d0f76fbd1c345be89bc0c69787577..678eea5b2ca24450464927a8f584b0e561eb29fd 100644 |
| --- a/content/renderer/gpu/compositor_output_surface.cc |
| +++ b/content/renderer/gpu/compositor_output_surface.cc |
| @@ -30,31 +30,43 @@ namespace content { |
| CompositorOutputSurface::CompositorOutputSurface( |
| int32_t routing_id, |
| uint32_t output_surface_id, |
| - const scoped_refptr<ContextProviderCommandBuffer>& context_provider, |
| - const scoped_refptr<ContextProviderCommandBuffer>& worker_context_provider, |
| - const scoped_refptr<cc::VulkanContextProvider>& vulkan_context_provider, |
| - std::unique_ptr<cc::SoftwareOutputDevice> software_device, |
| - scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue, |
| - bool use_swap_compositor_frame_message) |
| - : OutputSurface(context_provider, |
| - worker_context_provider, |
| - vulkan_context_provider, |
| - std::move(software_device)), |
| + scoped_refptr<cc::ContextProvider> context_provider, |
| + scoped_refptr<cc::ContextProvider> worker_context_provider, |
| + scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) |
| + : OutputSurface(std::move(context_provider), |
| + std::move(worker_context_provider), |
| + nullptr), |
| output_surface_id_(output_surface_id), |
| - use_swap_compositor_frame_message_(use_swap_compositor_frame_message), |
| output_surface_filter_( |
| RenderThreadImpl::current()->compositor_message_filter()), |
| + message_sender_(RenderThreadImpl::current()->sync_message_filter()), |
| frame_swap_message_queue_(swap_frame_message_queue), |
| - routing_id_(routing_id), |
| - layout_test_mode_(RenderThreadImpl::current()->layout_test_mode()), |
| - weak_ptrs_(this) { |
| - DCHECK(output_surface_filter_.get()); |
| - DCHECK(frame_swap_message_queue_.get()); |
| - message_sender_ = RenderThreadImpl::current()->sync_message_filter(); |
| - DCHECK(message_sender_.get()); |
| + routing_id_(routing_id) { |
| + DCHECK(output_surface_filter_); |
| + DCHECK(frame_swap_message_queue_); |
| + DCHECK(message_sender_); |
| + capabilities_.delegated_rendering = true; |
| } |
| -CompositorOutputSurface::~CompositorOutputSurface() {} |
| +CompositorOutputSurface::CompositorOutputSurface( |
| + int32_t routing_id, |
| + uint32_t output_surface_id, |
| + scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, |
| + scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) |
| + : OutputSurface(std::move(vulkan_context_provider)), |
| + output_surface_id_(output_surface_id), |
| + output_surface_filter_( |
| + RenderThreadImpl::current()->compositor_message_filter()), |
| + message_sender_(RenderThreadImpl::current()->sync_message_filter()), |
| + frame_swap_message_queue_(swap_frame_message_queue), |
| + routing_id_(routing_id) { |
| + DCHECK(output_surface_filter_); |
| + DCHECK(frame_swap_message_queue_); |
| + DCHECK(message_sender_); |
| + capabilities_.delegated_rendering = true; |
| +} |
| + |
| +CompositorOutputSurface::~CompositorOutputSurface() = default; |
| bool CompositorOutputSurface::BindToClient( |
| cc::OutputSurfaceClient* client) { |
| @@ -91,70 +103,22 @@ void CompositorOutputSurface::DetachFromClient() { |
| cc::OutputSurface::DetachFromClient(); |
| } |
| -void CompositorOutputSurface::ShortcutSwapAck( |
| - uint32_t output_surface_id, |
| - std::unique_ptr<cc::GLFrameData> gl_frame_data) { |
| - if (!layout_test_previous_frame_ack_) { |
| - layout_test_previous_frame_ack_.reset(new cc::CompositorFrameAck); |
| - layout_test_previous_frame_ack_->gl_frame_data.reset(new cc::GLFrameData); |
| - } |
| - |
| - OnSwapAck(output_surface_id, *layout_test_previous_frame_ack_); |
| - |
| - layout_test_previous_frame_ack_->gl_frame_data = std::move(gl_frame_data); |
| -} |
| - |
| void CompositorOutputSurface::SwapBuffers(cc::CompositorFrame* frame) { |
| - DCHECK(use_swap_compositor_frame_message_); |
| - if (layout_test_mode_) { |
| - // This code path is here to support layout tests that are currently |
| - // doing a readback in the renderer instead of the browser. So they |
| - // are using deprecated code paths in the renderer and don't need to |
| - // actually swap anything to the browser. We shortcut the swap to the |
| - // browser here and just ack directly within the renderer process. |
| - // Once crbug.com/311404 is fixed, this can be removed. |
| - |
| - // This would indicate that crbug.com/311404 is being fixed, and this |
| - // block needs to be removed. |
| - DCHECK(!frame->delegated_frame_data); |
| - |
| - base::Closure closure = base::Bind( |
| - &CompositorOutputSurface::ShortcutSwapAck, weak_ptrs_.GetWeakPtr(), |
| - output_surface_id_, base::Passed(&frame->gl_frame_data)); |
| - |
| - if (context_provider()) { |
|
danakj
2016/05/24 20:54:32
Hm this if (context_provider()) notably was remove
|
| - gpu::gles2::GLES2Interface* context = context_provider()->ContextGL(); |
| - const uint64_t fence_sync = context->InsertFenceSyncCHROMIUM(); |
| - context->Flush(); |
| - |
| - gpu::SyncToken sync_token; |
| - context->GenUnverifiedSyncTokenCHROMIUM(fence_sync, sync_token.GetData()); |
| - |
| - context_provider()->ContextSupport()->SignalSyncToken(sync_token, |
| - closure); |
| - } else { |
| - base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, closure); |
| - } |
| - client_->DidSwapBuffers(); |
| - return; |
| - } else { |
| - { |
| - std::vector<std::unique_ptr<IPC::Message>> messages; |
| - std::vector<IPC::Message> messages_to_deliver_with_frame; |
| - std::unique_ptr<FrameSwapMessageQueue::SendMessageScope> |
| - send_message_scope = |
| - frame_swap_message_queue_->AcquireSendMessageScope(); |
| - frame_swap_message_queue_->DrainMessages(&messages); |
| - FrameSwapMessageQueue::TransferMessages(&messages, |
| - &messages_to_deliver_with_frame); |
| - Send(new ViewHostMsg_SwapCompositorFrame(routing_id_, |
| - output_surface_id_, |
| - *frame, |
| - messages_to_deliver_with_frame)); |
| - // ~send_message_scope. |
| - } |
| - client_->DidSwapBuffers(); |
| + { |
| + std::unique_ptr<FrameSwapMessageQueue::SendMessageScope> |
| + send_message_scope = |
| + frame_swap_message_queue_->AcquireSendMessageScope(); |
| + std::vector<std::unique_ptr<IPC::Message>> messages; |
| + std::vector<IPC::Message> messages_to_deliver_with_frame; |
| + frame_swap_message_queue_->DrainMessages(&messages); |
| + FrameSwapMessageQueue::TransferMessages(&messages, |
| + &messages_to_deliver_with_frame); |
| + Send(new ViewHostMsg_SwapCompositorFrame(routing_id_, output_surface_id_, |
| + *frame, |
| + messages_to_deliver_with_frame)); |
| + // ~send_message_scope. |
| } |
| + client_->DidSwapBuffers(); |
| } |
| void CompositorOutputSurface::OnMessageReceived(const IPC::Message& message) { |