| 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()) {
|
| - 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) {
|
|
|