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

Side by Side Diff: content/renderer/gpu/compositor_output_surface.cc

Issue 2299003002: Remove uses of external begin frame sources (Closed)
Patch Set: Remove Blimp conditional Created 4 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/gpu/compositor_output_surface.h" 5 #include "content/renderer/gpu/compositor_output_surface.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 11 matching lines...) Expand all
22 #include "gpu/command_buffer/client/context_support.h" 22 #include "gpu/command_buffer/client/context_support.h"
23 #include "gpu/command_buffer/client/gles2_interface.h" 23 #include "gpu/command_buffer/client/gles2_interface.h"
24 #include "gpu/ipc/client/command_buffer_proxy_impl.h" 24 #include "gpu/ipc/client/command_buffer_proxy_impl.h"
25 #include "ipc/ipc_sync_channel.h" 25 #include "ipc/ipc_sync_channel.h"
26 26
27 namespace content { 27 namespace content {
28 28
29 CompositorOutputSurface::CompositorOutputSurface( 29 CompositorOutputSurface::CompositorOutputSurface(
30 int32_t routing_id, 30 int32_t routing_id,
31 uint32_t output_surface_id, 31 uint32_t output_surface_id,
32 std::unique_ptr<cc::BeginFrameSource> begin_frame_source,
32 scoped_refptr<cc::ContextProvider> context_provider, 33 scoped_refptr<cc::ContextProvider> context_provider,
33 scoped_refptr<cc::ContextProvider> worker_context_provider, 34 scoped_refptr<cc::ContextProvider> worker_context_provider,
34 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) 35 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
35 : OutputSurface(std::move(context_provider), 36 : OutputSurface(std::move(context_provider),
36 std::move(worker_context_provider), 37 std::move(worker_context_provider),
37 nullptr), 38 nullptr),
38 output_surface_id_(output_surface_id), 39 output_surface_id_(output_surface_id),
39 output_surface_filter_( 40 output_surface_filter_(
40 RenderThreadImpl::current()->compositor_message_filter()), 41 RenderThreadImpl::current()->compositor_message_filter()),
41 message_sender_(RenderThreadImpl::current()->sync_message_filter()), 42 message_sender_(RenderThreadImpl::current()->sync_message_filter()),
42 frame_swap_message_queue_(swap_frame_message_queue), 43 frame_swap_message_queue_(swap_frame_message_queue),
44 begin_frame_source_(std::move(begin_frame_source)),
43 routing_id_(routing_id) { 45 routing_id_(routing_id) {
44 DCHECK(output_surface_filter_); 46 DCHECK(output_surface_filter_);
45 DCHECK(frame_swap_message_queue_); 47 DCHECK(frame_swap_message_queue_);
46 DCHECK(message_sender_); 48 DCHECK(message_sender_);
49 DCHECK(begin_frame_source_);
47 capabilities_.delegated_rendering = true; 50 capabilities_.delegated_rendering = true;
48 } 51 }
49 52
50 CompositorOutputSurface::CompositorOutputSurface( 53 CompositorOutputSurface::CompositorOutputSurface(
51 int32_t routing_id, 54 int32_t routing_id,
52 uint32_t output_surface_id, 55 uint32_t output_surface_id,
56 std::unique_ptr<cc::BeginFrameSource> begin_frame_source,
53 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, 57 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider,
54 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) 58 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
55 : OutputSurface(std::move(vulkan_context_provider)), 59 : OutputSurface(std::move(vulkan_context_provider)),
56 output_surface_id_(output_surface_id), 60 output_surface_id_(output_surface_id),
57 output_surface_filter_( 61 output_surface_filter_(
58 RenderThreadImpl::current()->compositor_message_filter()), 62 RenderThreadImpl::current()->compositor_message_filter()),
59 message_sender_(RenderThreadImpl::current()->sync_message_filter()), 63 message_sender_(RenderThreadImpl::current()->sync_message_filter()),
60 frame_swap_message_queue_(swap_frame_message_queue), 64 frame_swap_message_queue_(swap_frame_message_queue),
65 begin_frame_source_(std::move(begin_frame_source)),
61 routing_id_(routing_id) { 66 routing_id_(routing_id) {
62 DCHECK(output_surface_filter_); 67 DCHECK(output_surface_filter_);
63 DCHECK(frame_swap_message_queue_); 68 DCHECK(frame_swap_message_queue_);
64 DCHECK(message_sender_); 69 DCHECK(message_sender_);
70 DCHECK(begin_frame_source_);
65 capabilities_.delegated_rendering = true; 71 capabilities_.delegated_rendering = true;
66 } 72 }
67 73
68 CompositorOutputSurface::~CompositorOutputSurface() = default; 74 CompositorOutputSurface::~CompositorOutputSurface() = default;
69 75
70 bool CompositorOutputSurface::BindToClient( 76 bool CompositorOutputSurface::BindToClient(
71 cc::OutputSurfaceClient* client) { 77 cc::OutputSurfaceClient* client) {
72 if (!cc::OutputSurface::BindToClient(client)) 78 if (!cc::OutputSurface::BindToClient(client))
73 return false; 79 return false;
74 80
81 DCHECK(begin_frame_source_);
82 client_->SetBeginFrameSource(begin_frame_source_.get());
83
75 output_surface_proxy_ = new CompositorOutputSurfaceProxy(this); 84 output_surface_proxy_ = new CompositorOutputSurfaceProxy(this);
76 output_surface_filter_handler_ = 85 output_surface_filter_handler_ =
77 base::Bind(&CompositorOutputSurfaceProxy::OnMessageReceived, 86 base::Bind(&CompositorOutputSurfaceProxy::OnMessageReceived,
78 output_surface_proxy_); 87 output_surface_proxy_);
79 output_surface_filter_->AddHandlerOnCompositorThread( 88 output_surface_filter_->AddHandlerOnCompositorThread(
80 routing_id_, 89 routing_id_,
81 output_surface_filter_handler_); 90 output_surface_filter_handler_);
82 91
83 if (!context_provider()) { 92 if (!context_provider()) {
84 // Without a GPU context, the memory policy otherwise wouldn't be set. 93 // Without a GPU context, the memory policy otherwise wouldn't be set.
85 client->SetMemoryPolicy(cc::ManagedMemoryPolicy( 94 client->SetMemoryPolicy(cc::ManagedMemoryPolicy(
86 128 * 1024 * 1024, 95 128 * 1024 * 1024,
87 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE, 96 gpu::MemoryAllocation::CUTOFF_ALLOW_NICE_TO_HAVE,
88 base::SharedMemory::GetHandleLimit() / 3)); 97 base::SharedMemory::GetHandleLimit() / 3));
89 } 98 }
90 99
91 return true; 100 return true;
92 } 101 }
93 102
94 void CompositorOutputSurface::DetachFromClient() { 103 void CompositorOutputSurface::DetachFromClient() {
95 if (!HasClient()) 104 if (!HasClient())
96 return; 105 return;
106 client_->SetBeginFrameSource(nullptr);
107 // Destroy the begin frame source on the same thread it was bound on.
108 // The OutputSurface itself is destroyed on the main thread.
109 begin_frame_source_ = nullptr;
110
97 if (output_surface_proxy_) { 111 if (output_surface_proxy_) {
98 output_surface_proxy_->ClearOutputSurface(); 112 output_surface_proxy_->ClearOutputSurface();
99 output_surface_filter_->RemoveHandlerOnCompositorThread( 113 output_surface_filter_->RemoveHandlerOnCompositorThread(
100 routing_id_, output_surface_filter_handler_); 114 routing_id_, output_surface_filter_handler_);
101 } 115 }
102 cc::OutputSurface::DetachFromClient(); 116 cc::OutputSurface::DetachFromClient();
103 } 117 }
104 118
105 void CompositorOutputSurface::SwapBuffers(cc::CompositorFrame frame) { 119 void CompositorOutputSurface::SwapBuffers(cc::CompositorFrame frame) {
106 { 120 {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 ReclaimResources(resources); 165 ReclaimResources(resources);
152 if (is_swap_ack) 166 if (is_swap_ack)
153 client_->DidSwapBuffersComplete(); 167 client_->DidSwapBuffersComplete();
154 } 168 }
155 169
156 bool CompositorOutputSurface::Send(IPC::Message* message) { 170 bool CompositorOutputSurface::Send(IPC::Message* message) {
157 return message_sender_->Send(message); 171 return message_sender_->Send(message);
158 } 172 }
159 173
160 } // namespace content 174 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/compositor_output_surface.h ('k') | content/renderer/gpu/render_widget_compositor.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698