Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Unified Diff: content/renderer/gpu/compositor_output_surface.cc

Issue 2009443002: Revert of Consolidate OutputSurface constructors into GL vs Vulkan. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 678eea5b2ca24450464927a8f584b0e561eb29fd..1284fe47d65d0f76fbd1c345be89bc0c69787577 100644
--- a/content/renderer/gpu/compositor_output_surface.cc
+++ b/content/renderer/gpu/compositor_output_surface.cc
@@ -30,43 +30,31 @@
CompositorOutputSurface::CompositorOutputSurface(
int32_t routing_id,
uint32_t output_surface_id,
- 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),
+ 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)),
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) {
- DCHECK(output_surface_filter_);
- DCHECK(frame_swap_message_queue_);
- DCHECK(message_sender_);
- capabilities_.delegated_rendering = true;
-}
-
-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;
+ 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());
+}
+
+CompositorOutputSurface::~CompositorOutputSurface() {}
bool CompositorOutputSurface::BindToClient(
cc::OutputSurfaceClient* client) {
@@ -103,22 +91,70 @@
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) {
- {
- 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();
+ 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();
+ }
}
void CompositorOutputSurface::OnMessageReceived(const IPC::Message& message) {
« no previous file with comments | « content/renderer/gpu/compositor_output_surface.h ('k') | content/renderer/gpu/delegated_compositor_output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698