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

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

Issue 256713002: Remove 'transport' paths from PassThroughImageTransportSurface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Also remove ResizeView/ResizeViewAck Created 6 years, 8 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 #include "content/common/gpu/image_transport_surface.h" 5 #include "content/common/gpu/image_transport_surface.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 return true; 79 return true;
80 } 80 }
81 81
82 void ImageTransportHelper::Destroy() {} 82 void ImageTransportHelper::Destroy() {}
83 83
84 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) { 84 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) {
85 bool handled = true; 85 bool handled = true;
86 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message) 86 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message)
87 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BufferPresented, 87 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BufferPresented,
88 OnBufferPresented) 88 OnBufferPresented)
89 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK);
90 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_WakeUpGpu, OnWakeUpGpu); 89 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_WakeUpGpu, OnWakeUpGpu);
91 IPC_MESSAGE_UNHANDLED(handled = false) 90 IPC_MESSAGE_UNHANDLED(handled = false)
92 IPC_END_MESSAGE_MAP() 91 IPC_END_MESSAGE_MAP()
93 return handled; 92 return handled;
94 } 93 }
95 94
96 void ImageTransportHelper::SendAcceleratedSurfaceBuffersSwapped( 95 void ImageTransportHelper::SendAcceleratedSurfaceBuffersSwapped(
97 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) { 96 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) {
98 // TRACE_EVENT for gpu tests: 97 // TRACE_EVENT for gpu tests:
99 TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers", 98 TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers",
(...skipping 11 matching lines...) Expand all
111 params.route_id = route_id_; 110 params.route_id = route_id_;
112 manager_->Send(new GpuHostMsg_AcceleratedSurfacePostSubBuffer(params)); 111 manager_->Send(new GpuHostMsg_AcceleratedSurfacePostSubBuffer(params));
113 } 112 }
114 113
115 void ImageTransportHelper::SendAcceleratedSurfaceRelease() { 114 void ImageTransportHelper::SendAcceleratedSurfaceRelease() {
116 GpuHostMsg_AcceleratedSurfaceRelease_Params params; 115 GpuHostMsg_AcceleratedSurfaceRelease_Params params;
117 params.surface_id = stub_->surface_id(); 116 params.surface_id = stub_->surface_id();
118 manager_->Send(new GpuHostMsg_AcceleratedSurfaceRelease(params)); 117 manager_->Send(new GpuHostMsg_AcceleratedSurfaceRelease(params));
119 } 118 }
120 119
121 void ImageTransportHelper::SendResizeView(const gfx::Size& size) {
122 manager_->Send(new GpuHostMsg_ResizeView(stub_->surface_id(),
123 route_id_,
124 size));
125 }
126
127 void ImageTransportHelper::SendUpdateVSyncParameters( 120 void ImageTransportHelper::SendUpdateVSyncParameters(
128 base::TimeTicks timebase, base::TimeDelta interval) { 121 base::TimeTicks timebase, base::TimeDelta interval) {
129 manager_->Send(new GpuHostMsg_UpdateVSyncParameters(stub_->surface_id(), 122 manager_->Send(new GpuHostMsg_UpdateVSyncParameters(stub_->surface_id(),
130 timebase, 123 timebase,
131 interval)); 124 interval));
132 } 125 }
133 126
134 void ImageTransportHelper::SendLatencyInfo( 127 void ImageTransportHelper::SendLatencyInfo(
135 const std::vector<ui::LatencyInfo>& latency_info) { 128 const std::vector<ui::LatencyInfo>& latency_info) {
136 manager_->Send(new GpuHostMsg_FrameDrawn(latency_info)); 129 manager_->Send(new GpuHostMsg_FrameDrawn(latency_info));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 if (!stub_.get()) 177 if (!stub_.get())
185 return NULL; 178 return NULL;
186 return stub_->decoder(); 179 return stub_->decoder();
187 } 180 }
188 181
189 void ImageTransportHelper::OnBufferPresented( 182 void ImageTransportHelper::OnBufferPresented(
190 const AcceleratedSurfaceMsg_BufferPresented_Params& params) { 183 const AcceleratedSurfaceMsg_BufferPresented_Params& params) {
191 surface_->OnBufferPresented(params); 184 surface_->OnBufferPresented(params);
192 } 185 }
193 186
194 void ImageTransportHelper::OnResizeViewACK() {
195 surface_->OnResizeViewACK();
196 }
197
198 void ImageTransportHelper::OnWakeUpGpu() { 187 void ImageTransportHelper::OnWakeUpGpu() {
199 surface_->WakeUpGpu(); 188 surface_->WakeUpGpu();
200 } 189 }
201 190
202 void ImageTransportHelper::Resize(gfx::Size size, float scale_factor) { 191 void ImageTransportHelper::Resize(gfx::Size size, float scale_factor) {
203 surface_->OnResize(size, scale_factor); 192 surface_->OnResize(size, scale_factor);
204 193
205 #if defined(OS_ANDROID) 194 #if defined(OS_ANDROID)
206 manager_->gpu_memory_manager()->ScheduleManage( 195 manager_->gpu_memory_manager()->ScheduleManage(
207 GpuMemoryManager::kScheduleManageNow); 196 GpuMemoryManager::kScheduleManageNow);
208 #endif 197 #endif
209 } 198 }
210 199
211 void ImageTransportHelper::SetLatencyInfo( 200 void ImageTransportHelper::SetLatencyInfo(
212 const std::vector<ui::LatencyInfo>& latency_info) { 201 const std::vector<ui::LatencyInfo>& latency_info) {
213 surface_->SetLatencyInfo(latency_info); 202 surface_->SetLatencyInfo(latency_info);
214 } 203 }
215 204
216 PassThroughImageTransportSurface::PassThroughImageTransportSurface( 205 PassThroughImageTransportSurface::PassThroughImageTransportSurface(
217 GpuChannelManager* manager, 206 GpuChannelManager* manager,
218 GpuCommandBufferStub* stub, 207 GpuCommandBufferStub* stub,
219 gfx::GLSurface* surface, 208 gfx::GLSurface* surface)
220 bool transport)
221 : GLSurfaceAdapter(surface), 209 : GLSurfaceAdapter(surface),
222 transport_(transport), 210 did_set_swap_interval_(false) {
223 did_set_swap_interval_(false),
224 did_unschedule_(false),
225 is_swap_buffers_pending_(false) {
226 helper_.reset(new ImageTransportHelper(this, 211 helper_.reset(new ImageTransportHelper(this,
227 manager, 212 manager,
228 stub, 213 stub,
229 gfx::kNullPluginWindow)); 214 gfx::kNullPluginWindow));
230 } 215 }
231 216
232 bool PassThroughImageTransportSurface::Initialize() { 217 bool PassThroughImageTransportSurface::Initialize() {
233 // The surface is assumed to have already been initialized. 218 // The surface is assumed to have already been initialized.
234 return helper_->Initialize(); 219 return helper_->Initialize();
235 } 220 }
236 221
237 void PassThroughImageTransportSurface::Destroy() { 222 void PassThroughImageTransportSurface::Destroy() {
238 helper_->Destroy(); 223 helper_->Destroy();
239 GLSurfaceAdapter::Destroy(); 224 GLSurfaceAdapter::Destroy();
240 } 225 }
241 226
242 bool PassThroughImageTransportSurface::DeferDraws() {
243 if (is_swap_buffers_pending_) {
244 DCHECK(!did_unschedule_);
245 did_unschedule_ = true;
246 helper_->SetScheduled(false);
247 return true;
248 }
249 return false;
250 }
251
252 void PassThroughImageTransportSurface::SetLatencyInfo( 227 void PassThroughImageTransportSurface::SetLatencyInfo(
253 const std::vector<ui::LatencyInfo>& latency_info) { 228 const std::vector<ui::LatencyInfo>& latency_info) {
254 for (size_t i = 0; i < latency_info.size(); i++) 229 for (size_t i = 0; i < latency_info.size(); i++)
255 latency_info_.push_back(latency_info[i]); 230 latency_info_.push_back(latency_info[i]);
256 } 231 }
257 232
258 bool PassThroughImageTransportSurface::SwapBuffers() { 233 bool PassThroughImageTransportSurface::SwapBuffers() {
259 // GetVsyncValues before SwapBuffers to work around Mali driver bug: 234 // GetVsyncValues before SwapBuffers to work around Mali driver bug:
260 // crbug.com/223558. 235 // crbug.com/223558.
261 SendVSyncUpdateIfAvailable(); 236 SendVSyncUpdateIfAvailable();
262 bool result = gfx::GLSurfaceAdapter::SwapBuffers(); 237 bool result = gfx::GLSurfaceAdapter::SwapBuffers();
263 for (size_t i = 0; i < latency_info_.size(); i++) { 238 for (size_t i = 0; i < latency_info_.size(); i++) {
264 latency_info_[i].AddLatencyNumber( 239 latency_info_[i].AddLatencyNumber(
265 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); 240 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0);
266 } 241 }
267 242
268 if (transport_) { 243 helper_->SendLatencyInfo(latency_info_);
269 DCHECK(!is_swap_buffers_pending_);
270 is_swap_buffers_pending_ = true;
271
272 // Round trip to the browser UI thread, for throttling, by sending a dummy
273 // SwapBuffers message.
274 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
275 params.surface_handle = 0;
276 params.latency_info.swap(latency_info_);
277 params.size = surface()->GetSize();
278 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
279 } else {
280 helper_->SendLatencyInfo(latency_info_);
281 }
282 latency_info_.clear(); 244 latency_info_.clear();
283 return result; 245 return result;
284 } 246 }
285 247
286 bool PassThroughImageTransportSurface::PostSubBuffer( 248 bool PassThroughImageTransportSurface::PostSubBuffer(
287 int x, int y, int width, int height) { 249 int x, int y, int width, int height) {
288 SendVSyncUpdateIfAvailable(); 250 SendVSyncUpdateIfAvailable();
289 bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height); 251 bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height);
290 for (size_t i = 0; i < latency_info_.size(); i++) { 252 for (size_t i = 0; i < latency_info_.size(); i++) {
291 latency_info_[i].AddLatencyNumber( 253 latency_info_[i].AddLatencyNumber(
292 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); 254 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0);
293 } 255 }
294 256
295 if (transport_) { 257 helper_->SendLatencyInfo(latency_info_);
296 DCHECK(!is_swap_buffers_pending_);
297 is_swap_buffers_pending_ = true;
298
299 // Round trip to the browser UI thread, for throttling, by sending a dummy
300 // PostSubBuffer message.
301 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
302 params.surface_handle = 0;
303 params.latency_info.swap(latency_info_);
304 params.surface_size = surface()->GetSize();
305 params.x = x;
306 params.y = y;
307 params.width = width;
308 params.height = height;
309 helper_->SendAcceleratedSurfacePostSubBuffer(params);
310
311 helper_->SetScheduled(false);
312 } else {
313 helper_->SendLatencyInfo(latency_info_);
314 }
315 latency_info_.clear(); 258 latency_info_.clear();
316 return result; 259 return result;
317 } 260 }
318 261
319 bool PassThroughImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) { 262 bool PassThroughImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) {
320 if (!did_set_swap_interval_) { 263 if (!did_set_swap_interval_) {
321 ImageTransportHelper::SetSwapInterval(context); 264 ImageTransportHelper::SetSwapInterval(context);
322 did_set_swap_interval_ = true; 265 did_set_swap_interval_ = true;
323 } 266 }
324 return true; 267 return true;
325 } 268 }
326 269
327 void PassThroughImageTransportSurface::OnBufferPresented( 270 void PassThroughImageTransportSurface::OnBufferPresented(
328 const AcceleratedSurfaceMsg_BufferPresented_Params& /* params */) { 271 const AcceleratedSurfaceMsg_BufferPresented_Params& /* params */) {
329 DCHECK(transport_); 272 NOTREACHED();
330 DCHECK(is_swap_buffers_pending_);
331 is_swap_buffers_pending_ = false;
332 if (did_unschedule_) {
333 did_unschedule_ = false;
334 helper_->SetScheduled(true);
335 }
336 }
337
338 void PassThroughImageTransportSurface::OnResizeViewACK() {
339 DCHECK(transport_);
340 Resize(new_size_);
341
342 TRACE_EVENT_ASYNC_END0("gpu", "OnResize", this);
343 helper_->SetScheduled(true);
344 } 273 }
345 274
346 void PassThroughImageTransportSurface::OnResize(gfx::Size size, 275 void PassThroughImageTransportSurface::OnResize(gfx::Size size,
347 float scale_factor) { 276 float scale_factor) {
348 new_size_ = size; 277 Resize(size);
349
350 if (transport_) {
351 helper_->SendResizeView(size);
352 helper_->SetScheduled(false);
353 TRACE_EVENT_ASYNC_BEGIN2("gpu", "OnResize", this,
354 "width", size.width(), "height", size.height());
355 } else {
356 Resize(new_size_);
357 }
358 } 278 }
359 279
360 gfx::Size PassThroughImageTransportSurface::GetSize() { 280 gfx::Size PassThroughImageTransportSurface::GetSize() {
361 return GLSurfaceAdapter::GetSize(); 281 return GLSurfaceAdapter::GetSize();
362 } 282 }
363 283
364 void PassThroughImageTransportSurface::WakeUpGpu() { 284 void PassThroughImageTransportSurface::WakeUpGpu() {
365 NOTIMPLEMENTED(); 285 NOTIMPLEMENTED();
366 } 286 }
367 287
368 PassThroughImageTransportSurface::~PassThroughImageTransportSurface() {} 288 PassThroughImageTransportSurface::~PassThroughImageTransportSurface() {}
369 289
370 void PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable() { 290 void PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable() {
371 gfx::VSyncProvider* vsync_provider = GetVSyncProvider(); 291 gfx::VSyncProvider* vsync_provider = GetVSyncProvider();
372 if (vsync_provider) { 292 if (vsync_provider) {
373 vsync_provider->GetVSyncParameters( 293 vsync_provider->GetVSyncParameters(
374 base::Bind(&ImageTransportHelper::SendUpdateVSyncParameters, 294 base::Bind(&ImageTransportHelper::SendUpdateVSyncParameters,
375 helper_->AsWeakPtr())); 295 helper_->AsWeakPtr()));
376 } 296 }
377 } 297 }
378 298
379 } // namespace content 299 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/image_transport_surface.h ('k') | content/common/gpu/image_transport_surface_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698