Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |