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

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

Issue 123563002: Remove gpu side LatencyInfo merging (Closed) Base URL: http://git.chromium.org/chromium/src.git@gpu-per-event-latency-6-small
Patch Set: fix mac_rel compiler error. Move kMaxLatencyInfoNumber to .cc file Created 6 years, 11 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/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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 manager_(manager), 48 manager_(manager),
49 stub_(stub->AsWeakPtr()), 49 stub_(stub->AsWeakPtr()),
50 handle_(handle) { 50 handle_(handle) {
51 route_id_ = manager_->GenerateRouteID(); 51 route_id_ = manager_->GenerateRouteID();
52 manager_->AddRoute(route_id_, this); 52 manager_->AddRoute(route_id_, this);
53 } 53 }
54 54
55 ImageTransportHelper::~ImageTransportHelper() { 55 ImageTransportHelper::~ImageTransportHelper() {
56 if (stub_.get()) { 56 if (stub_.get()) {
57 stub_->SetLatencyInfoCallback( 57 stub_->SetLatencyInfoCallback(
58 base::Callback<void(const ui::LatencyInfo&)>()); 58 base::Callback<void(const std::vector<ui::LatencyInfo>&)>());
59 } 59 }
60 manager_->RemoveRoute(route_id_); 60 manager_->RemoveRoute(route_id_);
61 } 61 }
62 62
63 bool ImageTransportHelper::Initialize() { 63 bool ImageTransportHelper::Initialize() {
64 gpu::gles2::GLES2Decoder* decoder = Decoder(); 64 gpu::gles2::GLES2Decoder* decoder = Decoder();
65 65
66 if (!decoder) 66 if (!decoder)
67 return false; 67 return false;
68 68
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 } 125 }
126 126
127 void ImageTransportHelper::SendUpdateVSyncParameters( 127 void ImageTransportHelper::SendUpdateVSyncParameters(
128 base::TimeTicks timebase, base::TimeDelta interval) { 128 base::TimeTicks timebase, base::TimeDelta interval) {
129 manager_->Send(new GpuHostMsg_UpdateVSyncParameters(stub_->surface_id(), 129 manager_->Send(new GpuHostMsg_UpdateVSyncParameters(stub_->surface_id(),
130 timebase, 130 timebase,
131 interval)); 131 interval));
132 } 132 }
133 133
134 void ImageTransportHelper::SendLatencyInfo( 134 void ImageTransportHelper::SendLatencyInfo(
135 const ui::LatencyInfo& latency_info) { 135 const std::vector<ui::LatencyInfo>& latency_info) {
136 manager_->Send(new GpuHostMsg_FrameDrawn(latency_info)); 136 manager_->Send(new GpuHostMsg_FrameDrawn(latency_info));
137 } 137 }
138 138
139 void ImageTransportHelper::SetScheduled(bool is_scheduled) { 139 void ImageTransportHelper::SetScheduled(bool is_scheduled) {
140 gpu::GpuScheduler* scheduler = Scheduler(); 140 gpu::GpuScheduler* scheduler = Scheduler();
141 if (!scheduler) 141 if (!scheduler)
142 return; 142 return;
143 143
144 scheduler->SetScheduled(is_scheduled); 144 scheduler->SetScheduled(is_scheduled);
145 } 145 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 void ImageTransportHelper::Resize(gfx::Size size, float scale_factor) { 202 void ImageTransportHelper::Resize(gfx::Size size, float scale_factor) {
203 surface_->OnResize(size, scale_factor); 203 surface_->OnResize(size, scale_factor);
204 204
205 #if defined(OS_ANDROID) 205 #if defined(OS_ANDROID)
206 manager_->gpu_memory_manager()->ScheduleManage( 206 manager_->gpu_memory_manager()->ScheduleManage(
207 GpuMemoryManager::kScheduleManageNow); 207 GpuMemoryManager::kScheduleManageNow);
208 #endif 208 #endif
209 } 209 }
210 210
211 void ImageTransportHelper::SetLatencyInfo( 211 void ImageTransportHelper::SetLatencyInfo(
212 const ui::LatencyInfo& latency_info) { 212 const std::vector<ui::LatencyInfo>& latency_info) {
213 surface_->SetLatencyInfo(latency_info); 213 surface_->SetLatencyInfo(latency_info);
214 } 214 }
215 215
216 PassThroughImageTransportSurface::PassThroughImageTransportSurface( 216 PassThroughImageTransportSurface::PassThroughImageTransportSurface(
217 GpuChannelManager* manager, 217 GpuChannelManager* manager,
218 GpuCommandBufferStub* stub, 218 GpuCommandBufferStub* stub,
219 gfx::GLSurface* surface, 219 gfx::GLSurface* surface,
220 bool transport) 220 bool transport)
221 : GLSurfaceAdapter(surface), 221 : GLSurfaceAdapter(surface),
222 transport_(transport), 222 transport_(transport),
(...skipping 20 matching lines...) Expand all
243 if (is_swap_buffers_pending_) { 243 if (is_swap_buffers_pending_) {
244 DCHECK(!did_unschedule_); 244 DCHECK(!did_unschedule_);
245 did_unschedule_ = true; 245 did_unschedule_ = true;
246 helper_->SetScheduled(false); 246 helper_->SetScheduled(false);
247 return true; 247 return true;
248 } 248 }
249 return false; 249 return false;
250 } 250 }
251 251
252 void PassThroughImageTransportSurface::SetLatencyInfo( 252 void PassThroughImageTransportSurface::SetLatencyInfo(
253 const ui::LatencyInfo& latency_info) { 253 const std::vector<ui::LatencyInfo>& latency_info) {
254 latency_info_ = latency_info; 254 for (size_t i = 0; i < latency_info.size(); i++)
255 latency_info_.push_back(latency_info[i]);
255 } 256 }
256 257
257 bool PassThroughImageTransportSurface::SwapBuffers() { 258 bool PassThroughImageTransportSurface::SwapBuffers() {
258 // GetVsyncValues before SwapBuffers to work around Mali driver bug: 259 // GetVsyncValues before SwapBuffers to work around Mali driver bug:
259 // crbug.com/223558. 260 // crbug.com/223558.
260 SendVSyncUpdateIfAvailable(); 261 SendVSyncUpdateIfAvailable();
261 bool result = gfx::GLSurfaceAdapter::SwapBuffers(); 262 bool result = gfx::GLSurfaceAdapter::SwapBuffers();
262 latency_info_.AddLatencyNumber( 263 for (size_t i = 0; i < latency_info_.size(); i++) {
263 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); 264 latency_info_[i].AddLatencyNumber(
265 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0);
266 }
264 267
265 if (transport_) { 268 if (transport_) {
266 DCHECK(!is_swap_buffers_pending_); 269 DCHECK(!is_swap_buffers_pending_);
267 is_swap_buffers_pending_ = true; 270 is_swap_buffers_pending_ = true;
268 271
269 // Round trip to the browser UI thread, for throttling, by sending a dummy 272 // Round trip to the browser UI thread, for throttling, by sending a dummy
270 // SwapBuffers message. 273 // SwapBuffers message.
271 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 274 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
272 params.surface_handle = 0; 275 params.surface_handle = 0;
273 params.latency_info = latency_info_; 276 params.latency_info.swap(latency_info_);
274 params.size = surface()->GetSize(); 277 params.size = surface()->GetSize();
275 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 278 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
276 } else { 279 } else {
277 helper_->SendLatencyInfo(latency_info_); 280 helper_->SendLatencyInfo(latency_info_);
278 } 281 }
282 latency_info_.clear();
279 return result; 283 return result;
280 } 284 }
281 285
282 bool PassThroughImageTransportSurface::PostSubBuffer( 286 bool PassThroughImageTransportSurface::PostSubBuffer(
283 int x, int y, int width, int height) { 287 int x, int y, int width, int height) {
284 SendVSyncUpdateIfAvailable(); 288 SendVSyncUpdateIfAvailable();
285 bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height); 289 bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height);
286 latency_info_.AddLatencyNumber( 290 for (size_t i = 0; i < latency_info_.size(); i++) {
287 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); 291 latency_info_[i].AddLatencyNumber(
292 ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0);
293 }
288 294
289 if (transport_) { 295 if (transport_) {
290 DCHECK(!is_swap_buffers_pending_); 296 DCHECK(!is_swap_buffers_pending_);
291 is_swap_buffers_pending_ = true; 297 is_swap_buffers_pending_ = true;
292 298
293 // Round trip to the browser UI thread, for throttling, by sending a dummy 299 // Round trip to the browser UI thread, for throttling, by sending a dummy
294 // PostSubBuffer message. 300 // PostSubBuffer message.
295 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params; 301 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
296 params.surface_handle = 0; 302 params.surface_handle = 0;
297 params.latency_info = latency_info_; 303 params.latency_info.swap(latency_info_);
298 params.surface_size = surface()->GetSize(); 304 params.surface_size = surface()->GetSize();
299 params.x = x; 305 params.x = x;
300 params.y = y; 306 params.y = y;
301 params.width = width; 307 params.width = width;
302 params.height = height; 308 params.height = height;
303 helper_->SendAcceleratedSurfacePostSubBuffer(params); 309 helper_->SendAcceleratedSurfacePostSubBuffer(params);
304 310
305 helper_->SetScheduled(false); 311 helper_->SetScheduled(false);
306 } else { 312 } else {
307 helper_->SendLatencyInfo(latency_info_); 313 helper_->SendLatencyInfo(latency_info_);
308 } 314 }
315 latency_info_.clear();
309 return result; 316 return result;
310 } 317 }
311 318
312 bool PassThroughImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) { 319 bool PassThroughImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) {
313 if (!did_set_swap_interval_) { 320 if (!did_set_swap_interval_) {
314 ImageTransportHelper::SetSwapInterval(context); 321 ImageTransportHelper::SetSwapInterval(context);
315 did_set_swap_interval_ = true; 322 did_set_swap_interval_ = true;
316 } 323 }
317 return true; 324 return true;
318 } 325 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 void PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable() { 370 void PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable() {
364 gfx::VSyncProvider* vsync_provider = GetVSyncProvider(); 371 gfx::VSyncProvider* vsync_provider = GetVSyncProvider();
365 if (vsync_provider) { 372 if (vsync_provider) {
366 vsync_provider->GetVSyncParameters( 373 vsync_provider->GetVSyncParameters(
367 base::Bind(&ImageTransportHelper::SendUpdateVSyncParameters, 374 base::Bind(&ImageTransportHelper::SendUpdateVSyncParameters,
368 helper_->AsWeakPtr())); 375 helper_->AsWeakPtr()));
369 } 376 }
370 } 377 }
371 378
372 } // namespace content 379 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/image_transport_surface.h ('k') | content/common/gpu/image_transport_surface_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698