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

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

Issue 12614013: Plumb cc::LatencyInfo through command buffer and output surface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 18 matching lines...) Expand all
29 gfx::PluginWindowHandle handle) 29 gfx::PluginWindowHandle handle)
30 : surface_(surface), 30 : surface_(surface),
31 manager_(manager), 31 manager_(manager),
32 stub_(stub->AsWeakPtr()), 32 stub_(stub->AsWeakPtr()),
33 handle_(handle) { 33 handle_(handle) {
34 route_id_ = manager_->GenerateRouteID(); 34 route_id_ = manager_->GenerateRouteID();
35 manager_->AddRoute(route_id_, this); 35 manager_->AddRoute(route_id_, this);
36 } 36 }
37 37
38 ImageTransportHelper::~ImageTransportHelper() { 38 ImageTransportHelper::~ImageTransportHelper() {
39 if (stub_)
apatrick_chromium 2013/03/15 19:09:35 nit: braces
40 stub_->SetLatencyInfoCallback(
41 base::Callback<void(const cc::LatencyInfo&)>());
39 manager_->RemoveRoute(route_id_); 42 manager_->RemoveRoute(route_id_);
40 } 43 }
41 44
42 bool ImageTransportHelper::Initialize() { 45 bool ImageTransportHelper::Initialize() {
43 gpu::gles2::GLES2Decoder* decoder = Decoder(); 46 gpu::gles2::GLES2Decoder* decoder = Decoder();
44 47
45 if (!decoder) 48 if (!decoder)
46 return false; 49 return false;
47 50
48 decoder->SetResizeCallback( 51 decoder->SetResizeCallback(
49 base::Bind(&ImageTransportHelper::Resize, base::Unretained(this))); 52 base::Bind(&ImageTransportHelper::Resize, base::Unretained(this)));
50 53
54 if (stub_)
apatrick_chromium 2013/03/15 19:09:35 nit: braces
55 stub_->SetLatencyInfoCallback(
56 base::Bind(&ImageTransportHelper::SetLatencyInfo,
57 base::Unretained(this)));
58
51 return true; 59 return true;
52 } 60 }
53 61
54 void ImageTransportHelper::Destroy() {} 62 void ImageTransportHelper::Destroy() {}
55 63
56 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) { 64 bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) {
57 bool handled = true; 65 bool handled = true;
58 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message) 66 IPC_BEGIN_MESSAGE_MAP(ImageTransportHelper, message)
59 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BufferPresented, 67 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BufferPresented,
60 OnBufferPresented) 68 OnBufferPresented)
61 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK); 69 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK);
70 IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_FrameDisplayed, OnFrameDisplayed);
62 IPC_MESSAGE_UNHANDLED(handled = false) 71 IPC_MESSAGE_UNHANDLED(handled = false)
63 IPC_END_MESSAGE_MAP() 72 IPC_END_MESSAGE_MAP()
64 return handled; 73 return handled;
65 } 74 }
66 75
67 void ImageTransportHelper::SendAcceleratedSurfaceBuffersSwapped( 76 void ImageTransportHelper::SendAcceleratedSurfaceBuffersSwapped(
68 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) { 77 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params) {
69 // TRACE_EVENT for gpu tests: 78 // TRACE_EVENT for gpu tests:
70 TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers", 79 TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers",
71 "GLImpl", static_cast<int>(gfx::GetGLImplementation()), 80 "GLImpl", static_cast<int>(gfx::GetGLImplementation()),
(...skipping 29 matching lines...) Expand all
101 size)); 110 size));
102 } 111 }
103 112
104 void ImageTransportHelper::SendUpdateVSyncParameters( 113 void ImageTransportHelper::SendUpdateVSyncParameters(
105 base::TimeTicks timebase, base::TimeDelta interval) { 114 base::TimeTicks timebase, base::TimeDelta interval) {
106 manager_->Send(new GpuHostMsg_UpdateVSyncParameters(stub_->surface_id(), 115 manager_->Send(new GpuHostMsg_UpdateVSyncParameters(stub_->surface_id(),
107 timebase, 116 timebase,
108 interval)); 117 interval));
109 } 118 }
110 119
120 void ImageTransportHelper::SendLatencyInfo(
121 const cc::LatencyInfo& latency_info) {
122 stub_->SetLatencyInfo(latency_info);
123 }
124
111 void ImageTransportHelper::SetScheduled(bool is_scheduled) { 125 void ImageTransportHelper::SetScheduled(bool is_scheduled) {
112 gpu::GpuScheduler* scheduler = Scheduler(); 126 gpu::GpuScheduler* scheduler = Scheduler();
113 if (!scheduler) 127 if (!scheduler)
114 return; 128 return;
115 129
116 scheduler->SetScheduled(is_scheduled); 130 scheduler->SetScheduled(is_scheduled);
117 } 131 }
118 132
119 void ImageTransportHelper::DeferToFence(base::Closure task) { 133 void ImageTransportHelper::DeferToFence(base::Closure task) {
120 gpu::GpuScheduler* scheduler = Scheduler(); 134 gpu::GpuScheduler* scheduler = Scheduler();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 183
170 void ImageTransportHelper::Resize(gfx::Size size) { 184 void ImageTransportHelper::Resize(gfx::Size size) {
171 surface_->OnResize(size); 185 surface_->OnResize(size);
172 186
173 #if defined(OS_ANDROID) 187 #if defined(OS_ANDROID)
174 manager_->gpu_memory_manager()->ScheduleManage( 188 manager_->gpu_memory_manager()->ScheduleManage(
175 GpuMemoryManager::kScheduleManageNow); 189 GpuMemoryManager::kScheduleManageNow);
176 #endif 190 #endif
177 } 191 }
178 192
193 void ImageTransportHelper::SetLatencyInfo(
194 const cc::LatencyInfo& latency_info) {
195 surface_->SetLatencyInfo(latency_info);
196 }
197
198 void ImageTransportHelper::OnFrameDisplayed(
199 const cc::LatencyInfo& latency_info) {
200 SendLatencyInfo(latency_info);
201 }
202
179 PassThroughImageTransportSurface::PassThroughImageTransportSurface( 203 PassThroughImageTransportSurface::PassThroughImageTransportSurface(
180 GpuChannelManager* manager, 204 GpuChannelManager* manager,
181 GpuCommandBufferStub* stub, 205 GpuCommandBufferStub* stub,
182 gfx::GLSurface* surface, 206 gfx::GLSurface* surface,
183 bool transport) 207 bool transport)
184 : GLSurfaceAdapter(surface), 208 : GLSurfaceAdapter(surface),
185 transport_(transport), 209 transport_(transport),
186 did_set_swap_interval_(false), 210 did_set_swap_interval_(false),
187 did_unschedule_(false), 211 did_unschedule_(false),
188 is_swap_buffers_pending_(false) { 212 is_swap_buffers_pending_(false) {
(...skipping 16 matching lines...) Expand all
205 bool PassThroughImageTransportSurface::DeferDraws() { 229 bool PassThroughImageTransportSurface::DeferDraws() {
206 if (is_swap_buffers_pending_) { 230 if (is_swap_buffers_pending_) {
207 DCHECK(!did_unschedule_); 231 DCHECK(!did_unschedule_);
208 did_unschedule_ = true; 232 did_unschedule_ = true;
209 helper_->SetScheduled(false); 233 helper_->SetScheduled(false);
210 return true; 234 return true;
211 } 235 }
212 return false; 236 return false;
213 } 237 }
214 238
239 void PassThroughImageTransportSurface::SetLatencyInfo(
240 const cc::LatencyInfo& latency_info) {
241 latency_info_ = latency_info;
242 }
243
215 bool PassThroughImageTransportSurface::SwapBuffers() { 244 bool PassThroughImageTransportSurface::SwapBuffers() {
216 bool result = gfx::GLSurfaceAdapter::SwapBuffers(); 245 bool result = gfx::GLSurfaceAdapter::SwapBuffers();
246 latency_info_.swap_timestamp = base::TimeTicks::HighResNow();
247 helper_->SendLatencyInfo(latency_info_);
248
217 SendVSyncUpdateIfAvailable(); 249 SendVSyncUpdateIfAvailable();
218 250
219 if (transport_) { 251 if (transport_) {
220 DCHECK(!is_swap_buffers_pending_); 252 DCHECK(!is_swap_buffers_pending_);
221 is_swap_buffers_pending_ = true; 253 is_swap_buffers_pending_ = true;
222 254
223 // Round trip to the browser UI thread, for throttling, by sending a dummy 255 // Round trip to the browser UI thread, for throttling, by sending a dummy
224 // SwapBuffers message. 256 // SwapBuffers message.
225 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 257 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
226 params.surface_handle = 0; 258 params.surface_handle = 0;
259 params.latency_info = latency_info_;
227 params.size = surface()->GetSize(); 260 params.size = surface()->GetSize();
228 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 261 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
229 } 262 }
230 return result; 263 return result;
231 } 264 }
232 265
233 bool PassThroughImageTransportSurface::PostSubBuffer( 266 bool PassThroughImageTransportSurface::PostSubBuffer(
234 int x, int y, int width, int height) { 267 int x, int y, int width, int height) {
235 bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height); 268 bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height);
269 latency_info_.swap_timestamp = base::TimeTicks::HighResNow();
270 helper_->SendLatencyInfo(latency_info_);
236 SendVSyncUpdateIfAvailable(); 271 SendVSyncUpdateIfAvailable();
237 272
238 if (transport_) { 273 if (transport_) {
239 DCHECK(!is_swap_buffers_pending_); 274 DCHECK(!is_swap_buffers_pending_);
240 is_swap_buffers_pending_ = true; 275 is_swap_buffers_pending_ = true;
241 276
242 // Round trip to the browser UI thread, for throttling, by sending a dummy 277 // Round trip to the browser UI thread, for throttling, by sending a dummy
243 // PostSubBuffer message. 278 // PostSubBuffer message.
244 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params; 279 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
245 params.surface_handle = 0; 280 params.surface_handle = 0;
281 params.latency_info = latency_info_;
246 params.surface_size = surface()->GetSize(); 282 params.surface_size = surface()->GetSize();
247 params.x = x; 283 params.x = x;
248 params.y = y; 284 params.y = y;
249 params.width = width; 285 params.width = width;
250 params.height = height; 286 params.height = height;
251 helper_->SendAcceleratedSurfacePostSubBuffer(params); 287 helper_->SendAcceleratedSurfacePostSubBuffer(params);
252 288
253 helper_->SetScheduled(false); 289 helper_->SetScheduled(false);
254 } 290 }
255 return result; 291 return result;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 void PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable() { 337 void PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable() {
302 gfx::VSyncProvider* vsync_provider = GetVSyncProvider(); 338 gfx::VSyncProvider* vsync_provider = GetVSyncProvider();
303 if (vsync_provider) { 339 if (vsync_provider) {
304 vsync_provider->GetVSyncParameters( 340 vsync_provider->GetVSyncParameters(
305 base::Bind(&ImageTransportHelper::SendUpdateVSyncParameters, 341 base::Bind(&ImageTransportHelper::SendUpdateVSyncParameters,
306 helper_->AsWeakPtr())); 342 helper_->AsWeakPtr()));
307 } 343 }
308 } 344 }
309 345
310 } // namespace content 346 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698