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

Side by Side Diff: content/common/gpu/image_transport_surface.cc

Issue 10071038: RefCounted types should not have public destructors, content/browser part 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Copyright bump Created 8 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 unified diff | Download patch | Annotate | Revision Log
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 #if defined(ENABLE_GPU) 5 #if defined(ENABLE_GPU)
6 6
7 #include "content/common/gpu/image_transport_surface.h" 7 #include "content/common/gpu/image_transport_surface.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/debug/trace_event.h" 12 #include "base/debug/trace_event.h"
13 #include "content/common/gpu/gpu_channel.h" 13 #include "content/common/gpu/gpu_channel.h"
14 #include "content/common/gpu/gpu_channel_manager.h" 14 #include "content/common/gpu/gpu_channel_manager.h"
15 #include "content/common/gpu/gpu_command_buffer_stub.h" 15 #include "content/common/gpu/gpu_command_buffer_stub.h"
16 #include "content/common/gpu/gpu_messages.h" 16 #include "content/common/gpu/gpu_messages.h"
17 #include "gpu/command_buffer/service/gpu_scheduler.h" 17 #include "gpu/command_buffer/service/gpu_scheduler.h"
18 #include "ui/gfx/gl/gl_switches.h" 18 #include "ui/gfx/gl/gl_switches.h"
19 19
20 ImageTransportSurface::ImageTransportSurface() { 20 ImageTransportSurface::ImageTransportSurface() {}
21 }
22 21
23 ImageTransportSurface::~ImageTransportSurface() { 22 ImageTransportSurface::~ImageTransportSurface() {}
24 }
25 23
26 void ImageTransportSurface::GetRegionsToCopy( 24 void ImageTransportSurface::GetRegionsToCopy(
27 const gfx::Rect& previous_damage_rect, 25 const gfx::Rect& previous_damage_rect,
28 const gfx::Rect& new_damage_rect, 26 const gfx::Rect& new_damage_rect,
29 std::vector<gfx::Rect>* regions) { 27 std::vector<gfx::Rect>* regions) {
30 gfx::Rect intersection = previous_damage_rect.Intersect(new_damage_rect); 28 gfx::Rect intersection = previous_damage_rect.Intersect(new_damage_rect);
31 29
32 if (intersection.IsEmpty()) { 30 if (intersection.IsEmpty()) {
33 regions->push_back(previous_damage_rect); 31 regions->push_back(previous_damage_rect);
34 return; 32 return;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 78
81 if (!decoder) 79 if (!decoder)
82 return false; 80 return false;
83 81
84 decoder->SetResizeCallback( 82 decoder->SetResizeCallback(
85 base::Bind(&ImageTransportHelper::Resize, base::Unretained(this))); 83 base::Bind(&ImageTransportHelper::Resize, base::Unretained(this)));
86 84
87 return true; 85 return true;
88 } 86 }
89 87
90 void ImageTransportHelper::Destroy() { 88 void ImageTransportHelper::Destroy() {}
91 }
92 89
93 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) { 90 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) {
94 bool handled = true; 91 bool handled = true;
95 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message) 92 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message)
96 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BuffersSwappedACK, 93 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BuffersSwappedACK,
97 OnBuffersSwappedACK) 94 OnBuffersSwappedACK)
98 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_PostSubBufferACK, 95 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_PostSubBufferACK,
99 OnPostSubBufferACK) 96 OnPostSubBufferACK)
100 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_NewACK, 97 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_NewACK,
101 OnNewSurfaceACK) 98 OnNewSurfaceACK)
102 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK); 99 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK);
103 IPC_MESSAGE_UNHANDLED(handled = false) 100 IPC_MESSAGE_UNHANDLED(handled = false)
104 IPC_END_MESSAGE_MAP() 101 IPC_END_MESSAGE_MAP()
105 return handled; 102 return handled;
106 } 103 }
107 104
108 void ImageTransportHelper::SendAcceleratedSurfaceRelease(
109 GpuHostMsg_AcceleratedSurfaceRelease_Params params) {
110 params.surface_id = stub_->surface_id();
111 params.route_id = route_id_;
112 manager_->Send(new GpuHostMsg_AcceleratedSurfaceRelease(params));
113 }
114
115 void ImageTransportHelper::SendAcceleratedSurfaceNew( 105 void ImageTransportHelper::SendAcceleratedSurfaceNew(
116 GpuHostMsg_AcceleratedSurfaceNew_Params params) { 106 GpuHostMsg_AcceleratedSurfaceNew_Params params) {
117 params.surface_id = stub_->surface_id(); 107 params.surface_id = stub_->surface_id();
118 params.route_id = route_id_; 108 params.route_id = route_id_;
119 #if defined(OS_MACOSX) 109 #if defined(OS_MACOSX)
120 params.window = handle_; 110 params.window = handle_;
121 #endif 111 #endif
122 manager_->Send(new GpuHostMsg_AcceleratedSurfaceNew(params)); 112 manager_->Send(new GpuHostMsg_AcceleratedSurfaceNew(params));
123 } 113 }
124 114
(...skipping 10 matching lines...) Expand all
135 void ImageTransportHelper::SendAcceleratedSurfacePostSubBuffer( 125 void ImageTransportHelper::SendAcceleratedSurfacePostSubBuffer(
136 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params) { 126 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params) {
137 params.surface_id = stub_->surface_id(); 127 params.surface_id = stub_->surface_id();
138 params.route_id = route_id_; 128 params.route_id = route_id_;
139 #if defined(OS_MACOSX) 129 #if defined(OS_MACOSX)
140 params.window = handle_; 130 params.window = handle_;
141 #endif 131 #endif
142 manager_->Send(new GpuHostMsg_AcceleratedSurfacePostSubBuffer(params)); 132 manager_->Send(new GpuHostMsg_AcceleratedSurfacePostSubBuffer(params));
143 } 133 }
144 134
135 void ImageTransportHelper::SendAcceleratedSurfaceRelease(
136 GpuHostMsg_AcceleratedSurfaceRelease_Params params) {
137 params.surface_id = stub_->surface_id();
138 params.route_id = route_id_;
139 manager_->Send(new GpuHostMsg_AcceleratedSurfaceRelease(params));
140 }
141
145 void ImageTransportHelper::SendResizeView(const gfx::Size& size) { 142 void ImageTransportHelper::SendResizeView(const gfx::Size& size) {
146 manager_->Send(new GpuHostMsg_ResizeView(stub_->surface_id(), 143 manager_->Send(new GpuHostMsg_ResizeView(stub_->surface_id(),
147 route_id_, 144 route_id_,
148 size)); 145 size));
149 } 146 }
150 147
151 void ImageTransportHelper::SetScheduled(bool is_scheduled) { 148 void ImageTransportHelper::SetScheduled(bool is_scheduled) {
152 gpu::GpuScheduler* scheduler = Scheduler(); 149 gpu::GpuScheduler* scheduler = Scheduler();
153 if (!scheduler) 150 if (!scheduler)
154 return; 151 return;
155 152
156 if (is_scheduled) { 153 if (is_scheduled) {
157 TRACE_EVENT_ASYNC_END0("gpu", "Descheduled", this); 154 TRACE_EVENT_ASYNC_END0("gpu", "Descheduled", this);
158 } else { 155 } else {
159 TRACE_EVENT_ASYNC_BEGIN0("gpu", "Descheduled", this); 156 TRACE_EVENT_ASYNC_BEGIN0("gpu", "Descheduled", this);
160 } 157 }
161 scheduler->SetScheduled(is_scheduled); 158 scheduler->SetScheduled(is_scheduled);
162 } 159 }
163 160
164 void ImageTransportHelper::DeferToFence(base::Closure task) { 161 void ImageTransportHelper::DeferToFence(base::Closure task) {
165 gpu::GpuScheduler* scheduler = Scheduler(); 162 gpu::GpuScheduler* scheduler = Scheduler();
166 DCHECK(scheduler); 163 DCHECK(scheduler);
167 164
168 scheduler->DeferToFence(task); 165 scheduler->DeferToFence(task);
169 } 166 }
170 167
171 void ImageTransportHelper::OnBuffersSwappedACK() { 168 bool ImageTransportHelper::MakeCurrent() {
172 surface_->OnBuffersSwappedACK(); 169 gpu::gles2::GLES2Decoder* decoder = Decoder();
170 if (!decoder)
171 return false;
172 return decoder->MakeCurrent();
173 } 173 }
174 174
175 void ImageTransportHelper::OnPostSubBufferACK() { 175 void ImageTransportHelper::SetSwapInterval() {
176 surface_->OnPostSubBufferACK(); 176 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync))
177 Decoder()->GetGLContext()->SetSwapInterval(0);
178 else
179 Decoder()->GetGLContext()->SetSwapInterval(1);
180 }
181
182 void ImageTransportHelper::Suspend() {
183 manager_->Send(new GpuHostMsg_AcceleratedSurfaceSuspend(stub_->surface_id()));
184 }
185
186 gpu::GpuScheduler* ImageTransportHelper::Scheduler() {
187 if (!stub_.get())
188 return NULL;
189 return stub_->scheduler();
190 }
191
192 gpu::gles2::GLES2Decoder* ImageTransportHelper::Decoder() {
193 if (!stub_.get())
194 return NULL;
195 return stub_->decoder();
177 } 196 }
178 197
179 void ImageTransportHelper::OnNewSurfaceACK( 198 void ImageTransportHelper::OnNewSurfaceACK(
180 uint64 surface_handle, 199 uint64 surface_handle,
181 TransportDIB::Handle shm_handle) { 200 TransportDIB::Handle shm_handle) {
182 surface_->OnNewSurfaceACK(surface_handle, shm_handle); 201 surface_->OnNewSurfaceACK(surface_handle, shm_handle);
183 } 202 }
184 203
204 void ImageTransportHelper::OnBuffersSwappedACK() {
205 surface_->OnBuffersSwappedACK();
206 }
207
208 void ImageTransportHelper::OnPostSubBufferACK() {
209 surface_->OnPostSubBufferACK();
210 }
211
185 void ImageTransportHelper::OnResizeViewACK() { 212 void ImageTransportHelper::OnResizeViewACK() {
186 surface_->OnResizeViewACK(); 213 surface_->OnResizeViewACK();
187 } 214 }
188 215
189 void ImageTransportHelper::Resize(gfx::Size size) { 216 void ImageTransportHelper::Resize(gfx::Size size) {
190 // On windows, the surface is recreated and, in case the newly allocated 217 // On windows, the surface is recreated and, in case the newly allocated
191 // surface happens to have the same address, it should be invalidated on the 218 // surface happens to have the same address, it should be invalidated on the
192 // decoder so that future calls to MakeCurrent do not early out on the 219 // decoder so that future calls to MakeCurrent do not early out on the
193 // assumption that neither the context or surface have actually changed. 220 // assumption that neither the context or surface have actually changed.
194 #if defined(OS_WIN) 221 #if defined(OS_WIN)
195 Decoder()->ReleaseCurrent(); 222 Decoder()->ReleaseCurrent();
196 #endif 223 #endif
197 224
198 surface_->OnResize(size); 225 surface_->OnResize(size);
199 226
200 #if defined(OS_WIN) 227 #if defined(OS_WIN)
201 Decoder()->MakeCurrent(); 228 Decoder()->MakeCurrent();
202 SetSwapInterval(); 229 SetSwapInterval();
203 #endif 230 #endif
204 } 231 }
205 232
206 void ImageTransportHelper::SetSwapInterval() {
207 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync))
208 Decoder()->GetGLContext()->SetSwapInterval(0);
209 else
210 Decoder()->GetGLContext()->SetSwapInterval(1);
211 }
212
213 bool ImageTransportHelper::MakeCurrent() {
214 gpu::gles2::GLES2Decoder* decoder = Decoder();
215 if (!decoder)
216 return false;
217 return decoder->MakeCurrent();
218 }
219
220 void ImageTransportHelper::Suspend() {
221 manager_->Send(new GpuHostMsg_AcceleratedSurfaceSuspend(stub_->surface_id()));
222 }
223
224 gpu::GpuScheduler* ImageTransportHelper::Scheduler() {
225 if (!stub_.get())
226 return NULL;
227 return stub_->scheduler();
228 }
229
230 gpu::gles2::GLES2Decoder* ImageTransportHelper::Decoder() {
231 if (!stub_.get())
232 return NULL;
233 return stub_->decoder();
234 }
235
236 PassThroughImageTransportSurface::PassThroughImageTransportSurface( 233 PassThroughImageTransportSurface::PassThroughImageTransportSurface(
237 GpuChannelManager* manager, 234 GpuChannelManager* manager,
238 GpuCommandBufferStub* stub, 235 GpuCommandBufferStub* stub,
239 gfx::GLSurface* surface, 236 gfx::GLSurface* surface,
240 bool transport) 237 bool transport)
241 : GLSurfaceAdapter(surface), 238 : GLSurfaceAdapter(surface),
242 transport_(transport), 239 transport_(transport),
243 did_set_swap_interval_(false) { 240 did_set_swap_interval_(false) {
244 helper_.reset(new ImageTransportHelper(this, 241 helper_.reset(new ImageTransportHelper(this,
245 manager, 242 manager,
246 stub, 243 stub,
247 gfx::kNullPluginWindow)); 244 gfx::kNullPluginWindow));
248 } 245 }
249 246
250 PassThroughImageTransportSurface::~PassThroughImageTransportSurface() {
251 }
252
253 bool PassThroughImageTransportSurface::Initialize() { 247 bool PassThroughImageTransportSurface::Initialize() {
254 // The surface is assumed to have already been initialized. 248 // The surface is assumed to have already been initialized.
255 return helper_->Initialize(); 249 return helper_->Initialize();
256 } 250 }
257 251
258 void PassThroughImageTransportSurface::Destroy() { 252 void PassThroughImageTransportSurface::Destroy() {
259 helper_->Destroy(); 253 helper_->Destroy();
260 GLSurfaceAdapter::Destroy(); 254 GLSurfaceAdapter::Destroy();
261 } 255 }
262 256
263 void PassThroughImageTransportSurface::OnNewSurfaceACK(
264 uint64 surface_handle, TransportDIB::Handle shm_handle) {
265 }
266
267 bool PassThroughImageTransportSurface::SwapBuffers() { 257 bool PassThroughImageTransportSurface::SwapBuffers() {
268 bool result = gfx::GLSurfaceAdapter::SwapBuffers(); 258 bool result = gfx::GLSurfaceAdapter::SwapBuffers();
269 259
270 if (transport_) { 260 if (transport_) {
271 // Round trip to the browser UI thread, for throttling, by sending a dummy 261 // Round trip to the browser UI thread, for throttling, by sending a dummy
272 // SwapBuffers message. 262 // SwapBuffers message.
273 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 263 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
274 params.surface_handle = 0; 264 params.surface_handle = 0;
275 #if defined(OS_WIN) 265 #if defined(OS_WIN)
276 params.size = GetSize(); 266 params.size = GetSize();
(...skipping 26 matching lines...) Expand all
303 } 293 }
304 294
305 bool PassThroughImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) { 295 bool PassThroughImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) {
306 if (!did_set_swap_interval_) { 296 if (!did_set_swap_interval_) {
307 helper_->SetSwapInterval(); 297 helper_->SetSwapInterval();
308 did_set_swap_interval_ = true; 298 did_set_swap_interval_ = true;
309 } 299 }
310 return true; 300 return true;
311 } 301 }
312 302
303 void PassThroughImageTransportSurface::OnNewSurfaceACK(
304 uint64 surface_handle,
305 TransportDIB::Handle shm_handle) {
306 }
307
313 void PassThroughImageTransportSurface::OnBuffersSwappedACK() { 308 void PassThroughImageTransportSurface::OnBuffersSwappedACK() {
314 DCHECK(transport_); 309 DCHECK(transport_);
315 helper_->SetScheduled(true); 310 helper_->SetScheduled(true);
316 } 311 }
317 312
318 void PassThroughImageTransportSurface::OnPostSubBufferACK() { 313 void PassThroughImageTransportSurface::OnPostSubBufferACK() {
319 DCHECK(transport_); 314 DCHECK(transport_);
320 helper_->SetScheduled(true); 315 helper_->SetScheduled(true);
321 } 316 }
322 317
323 void PassThroughImageTransportSurface::OnResizeViewACK() { 318 void PassThroughImageTransportSurface::OnResizeViewACK() {
324 DCHECK(transport_); 319 DCHECK(transport_);
325 Resize(new_size_); 320 Resize(new_size_);
326 321
327 helper_->SetScheduled(true); 322 helper_->SetScheduled(true);
328 } 323 }
329 324
330 void PassThroughImageTransportSurface::OnResize(gfx::Size size) { 325 void PassThroughImageTransportSurface::OnResize(gfx::Size size) {
331 new_size_ = size; 326 new_size_ = size;
332 327
333 if (transport_) { 328 if (transport_) {
334 helper_->SendResizeView(size); 329 helper_->SendResizeView(size);
335 helper_->SetScheduled(false); 330 helper_->SetScheduled(false);
336 } else { 331 } else {
337 Resize(new_size_); 332 Resize(new_size_);
338 } 333 }
339 } 334 }
340 335
336 PassThroughImageTransportSurface::~PassThroughImageTransportSurface() {}
337
341 #endif // defined(ENABLE_GPU) 338 #endif // defined(ENABLE_GPU)
OLDNEW
« no previous file with comments | « content/common/gpu/image_transport_surface.h ('k') | content/common/indexed_db/indexed_db_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698