| 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/browser/gpu/gpu_process_host_ui_shim.h" | 5 #include "content/browser/gpu/gpu_process_host_ui_shim.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 g_hosts_by_id.Pointer()->Remove(host_id_); | 197 g_hosts_by_id.Pointer()->Remove(host_id_); |
| 198 } | 198 } |
| 199 | 199 |
| 200 bool GpuProcessHostUIShim::OnControlMessageReceived( | 200 bool GpuProcessHostUIShim::OnControlMessageReceived( |
| 201 const IPC::Message& message) { | 201 const IPC::Message& message) { |
| 202 DCHECK(CalledOnValidThread()); | 202 DCHECK(CalledOnValidThread()); |
| 203 | 203 |
| 204 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message) | 204 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message) |
| 205 IPC_MESSAGE_HANDLER(GpuHostMsg_OnLogMessage, | 205 IPC_MESSAGE_HANDLER(GpuHostMsg_OnLogMessage, |
| 206 OnLogMessage) | 206 OnLogMessage) |
| 207 | |
| 208 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceInitialized, | 207 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceInitialized, |
| 209 OnAcceleratedSurfaceInitialized) | 208 OnAcceleratedSurfaceInitialized) |
| 210 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, | 209 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, |
| 211 OnAcceleratedSurfaceBuffersSwapped) | 210 OnAcceleratedSurfaceBuffersSwapped) |
| 212 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfacePostSubBuffer, | |
| 213 OnAcceleratedSurfacePostSubBuffer) | |
| 214 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSuspend, | |
| 215 OnAcceleratedSurfaceSuspend) | |
| 216 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected, | 211 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected, |
| 217 OnGraphicsInfoCollected) | 212 OnGraphicsInfoCollected) |
| 218 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceRelease, | |
| 219 OnAcceleratedSurfaceRelease) | |
| 220 IPC_MESSAGE_HANDLER(GpuHostMsg_VideoMemoryUsageStats, | 213 IPC_MESSAGE_HANDLER(GpuHostMsg_VideoMemoryUsageStats, |
| 221 OnVideoMemoryUsageStatsReceived); | 214 OnVideoMemoryUsageStatsReceived); |
| 222 IPC_MESSAGE_HANDLER(GpuHostMsg_FrameDrawn, OnFrameDrawn) | 215 IPC_MESSAGE_HANDLER(GpuHostMsg_FrameDrawn, OnFrameDrawn) |
| 223 | 216 |
| 224 IPC_MESSAGE_UNHANDLED_ERROR() | 217 IPC_MESSAGE_UNHANDLED_ERROR() |
| 225 IPC_END_MESSAGE_MAP() | 218 IPC_END_MESSAGE_MAP() |
| 226 | 219 |
| 227 return true; | 220 return true; |
| 228 } | 221 } |
| 229 | 222 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 243 | 236 |
| 244 GpuDataManagerImpl::GetInstance()->UpdateGpuInfo(gpu_info); | 237 GpuDataManagerImpl::GetInstance()->UpdateGpuInfo(gpu_info); |
| 245 } | 238 } |
| 246 | 239 |
| 247 void GpuProcessHostUIShim::OnAcceleratedSurfaceInitialized(int32 surface_id, | 240 void GpuProcessHostUIShim::OnAcceleratedSurfaceInitialized(int32 surface_id, |
| 248 int32 route_id) { | 241 int32 route_id) { |
| 249 RenderWidgetHostViewBase* view = | 242 RenderWidgetHostViewBase* view = |
| 250 GetRenderWidgetHostViewFromSurfaceID(surface_id); | 243 GetRenderWidgetHostViewFromSurfaceID(surface_id); |
| 251 if (!view) | 244 if (!view) |
| 252 return; | 245 return; |
| 253 view->AcceleratedSurfaceInitialized(host_id_, route_id); | 246 view->AcceleratedSurfaceInitialized(route_id); |
| 254 } | 247 } |
| 255 | 248 |
| 256 void GpuProcessHostUIShim::OnAcceleratedSurfaceBuffersSwapped( | 249 void GpuProcessHostUIShim::OnAcceleratedSurfaceBuffersSwapped( |
| 257 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params) { | 250 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params) { |
| 251 #if defined(OS_MACOSX) |
| 258 TRACE_EVENT0("renderer", | 252 TRACE_EVENT0("renderer", |
| 259 "GpuProcessHostUIShim::OnAcceleratedSurfaceBuffersSwapped"); | 253 "GpuProcessHostUIShim::OnAcceleratedSurfaceBuffersSwapped"); |
| 260 if (!ui::LatencyInfo::Verify(params.latency_info, | 254 if (!ui::LatencyInfo::Verify(params.latency_info, |
| 261 "GpuHostMsg_AcceleratedSurfaceBuffersSwapped")) | 255 "GpuHostMsg_AcceleratedSurfaceBuffersSwapped")) { |
| 262 return; | 256 return; |
| 257 } |
| 263 | 258 |
| 264 #if defined(OS_MACOSX) | |
| 265 // On Mac with delegated rendering, accelerated surfaces are not necessarily | 259 // On Mac with delegated rendering, accelerated surfaces are not necessarily |
| 266 // associated with a RenderWidgetHostViewBase. | 260 // associated with a RenderWidgetHostViewBase. |
| 267 if (IsDelegatedRendererEnabled()) { | 261 DCHECK(IsDelegatedRendererEnabled()); |
| 268 gfx::AcceleratedWidget native_widget = | 262 gfx::AcceleratedWidget native_widget = |
| 269 content::GpuSurfaceTracker::Get()->AcquireNativeWidget( | 263 content::GpuSurfaceTracker::Get()->AcquireNativeWidget(params.surface_id); |
| 270 params.surface_id); | 264 BrowserCompositorViewMac::GotAcceleratedFrame(native_widget, |
| 271 BrowserCompositorViewMac::GotAcceleratedFrame( | 265 params.surface_handle, |
| 272 native_widget, params.surface_handle, params.surface_id, | 266 params.surface_id, |
| 273 params.latency_info, params.size, params.scale_factor, | 267 params.latency_info, |
| 274 host_id_, params.route_id); | 268 params.size, |
| 275 return; | 269 params.scale_factor, |
| 276 } | 270 host_id_, |
| 271 params.route_id); |
| 272 #else |
| 273 NOTREACHED(); |
| 277 #endif | 274 #endif |
| 278 | |
| 279 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; | |
| 280 ack_params.mailbox = params.mailbox; | |
| 281 ack_params.sync_point = 0; | |
| 282 ScopedSendOnIOThread delayed_send( | |
| 283 host_id_, | |
| 284 new AcceleratedSurfaceMsg_BufferPresented(params.route_id, | |
| 285 ack_params)); | |
| 286 | |
| 287 RenderWidgetHostViewBase* view = GetRenderWidgetHostViewFromSurfaceID( | |
| 288 params.surface_id); | |
| 289 if (!view) | |
| 290 return; | |
| 291 | |
| 292 delayed_send.Cancel(); | |
| 293 | |
| 294 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params view_params = params; | |
| 295 | |
| 296 RenderWidgetHostImpl* impl = | |
| 297 RenderWidgetHostImpl::From(view->GetRenderWidgetHost()); | |
| 298 for (size_t i = 0; i < view_params.latency_info.size(); i++) | |
| 299 impl->AddLatencyInfoComponentIds(&view_params.latency_info[i]); | |
| 300 | |
| 301 // View must send ACK message after next composite. | |
| 302 view->AcceleratedSurfaceBuffersSwapped(view_params, host_id_); | |
| 303 view->DidReceiveRendererFrame(); | |
| 304 } | 275 } |
| 305 | 276 |
| 306 void GpuProcessHostUIShim::OnFrameDrawn( | 277 void GpuProcessHostUIShim::OnFrameDrawn( |
| 307 const std::vector<ui::LatencyInfo>& latency_info) { | 278 const std::vector<ui::LatencyInfo>& latency_info) { |
| 308 if (!ui::LatencyInfo::Verify(latency_info, | 279 if (!ui::LatencyInfo::Verify(latency_info, |
| 309 "GpuProcessHostUIShim::OnFrameDrawn")) | 280 "GpuProcessHostUIShim::OnFrameDrawn")) |
| 310 return; | 281 return; |
| 311 RenderWidgetHostImpl::CompositorFrameDrawn(latency_info); | 282 RenderWidgetHostImpl::CompositorFrameDrawn(latency_info); |
| 312 } | 283 } |
| 313 | 284 |
| 314 void GpuProcessHostUIShim::OnAcceleratedSurfacePostSubBuffer( | |
| 315 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params) { | |
| 316 TRACE_EVENT0("renderer", | |
| 317 "GpuProcessHostUIShim::OnAcceleratedSurfacePostSubBuffer"); | |
| 318 if (!ui::LatencyInfo::Verify(params.latency_info, | |
| 319 "GpuHostMsg_AcceleratedSurfacePostSubBuffer")) | |
| 320 return; | |
| 321 AcceleratedSurfaceMsg_BufferPresented_Params ack_params; | |
| 322 ack_params.mailbox = params.mailbox; | |
| 323 ack_params.sync_point = 0; | |
| 324 ScopedSendOnIOThread delayed_send( | |
| 325 host_id_, | |
| 326 new AcceleratedSurfaceMsg_BufferPresented(params.route_id, | |
| 327 ack_params)); | |
| 328 | |
| 329 RenderWidgetHostViewBase* view = | |
| 330 GetRenderWidgetHostViewFromSurfaceID(params.surface_id); | |
| 331 if (!view) | |
| 332 return; | |
| 333 | |
| 334 delayed_send.Cancel(); | |
| 335 | |
| 336 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params view_params = params; | |
| 337 | |
| 338 RenderWidgetHostImpl* impl = | |
| 339 RenderWidgetHostImpl::From(view->GetRenderWidgetHost()); | |
| 340 for (size_t i = 0; i < view_params.latency_info.size(); i++) | |
| 341 impl->AddLatencyInfoComponentIds(&view_params.latency_info[i]); | |
| 342 | |
| 343 // View must send ACK message after next composite. | |
| 344 view->AcceleratedSurfacePostSubBuffer(view_params, host_id_); | |
| 345 view->DidReceiveRendererFrame(); | |
| 346 } | |
| 347 | |
| 348 void GpuProcessHostUIShim::OnAcceleratedSurfaceSuspend(int32 surface_id) { | |
| 349 TRACE_EVENT0("renderer", | |
| 350 "GpuProcessHostUIShim::OnAcceleratedSurfaceSuspend"); | |
| 351 | |
| 352 RenderWidgetHostViewBase* view = | |
| 353 GetRenderWidgetHostViewFromSurfaceID(surface_id); | |
| 354 if (!view) | |
| 355 return; | |
| 356 | |
| 357 view->AcceleratedSurfaceSuspend(); | |
| 358 } | |
| 359 | |
| 360 void GpuProcessHostUIShim::OnAcceleratedSurfaceRelease( | |
| 361 const GpuHostMsg_AcceleratedSurfaceRelease_Params& params) { | |
| 362 RenderWidgetHostViewBase* view = GetRenderWidgetHostViewFromSurfaceID( | |
| 363 params.surface_id); | |
| 364 if (!view) | |
| 365 return; | |
| 366 view->AcceleratedSurfaceRelease(); | |
| 367 } | |
| 368 | |
| 369 void GpuProcessHostUIShim::OnVideoMemoryUsageStatsReceived( | 285 void GpuProcessHostUIShim::OnVideoMemoryUsageStatsReceived( |
| 370 const GPUVideoMemoryUsageStats& video_memory_usage_stats) { | 286 const GPUVideoMemoryUsageStats& video_memory_usage_stats) { |
| 371 GpuDataManagerImpl::GetInstance()->UpdateVideoMemoryUsageStats( | 287 GpuDataManagerImpl::GetInstance()->UpdateVideoMemoryUsageStats( |
| 372 video_memory_usage_stats); | 288 video_memory_usage_stats); |
| 373 } | 289 } |
| 374 | 290 |
| 375 } // namespace content | 291 } // namespace content |
| OLD | NEW |