OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/gpu_process_host.h" | 5 #include "chrome/browser/gpu_process_host.h" |
6 | 6 |
7 #include "app/app_switches.h" | 7 #include "app/app_switches.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/thread.h" | 10 #include "base/thread.h" |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 IPC_MESSAGE_HANDLER(GpuHostMsg_ChannelEstablished, OnChannelEstablished) | 170 IPC_MESSAGE_HANDLER(GpuHostMsg_ChannelEstablished, OnChannelEstablished) |
171 IPC_MESSAGE_HANDLER(GpuHostMsg_SynchronizeReply, OnSynchronizeReply) | 171 IPC_MESSAGE_HANDLER(GpuHostMsg_SynchronizeReply, OnSynchronizeReply) |
172 #if defined(OS_LINUX) | 172 #if defined(OS_LINUX) |
173 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_GetViewXID, OnGetViewXID) | 173 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_GetViewXID, OnGetViewXID) |
174 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID) | 174 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID) |
175 #elif defined(OS_MACOSX) | 175 #elif defined(OS_MACOSX) |
176 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, | 176 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, |
177 OnAcceleratedSurfaceSetIOSurface) | 177 OnAcceleratedSurfaceSetIOSurface) |
178 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, | 178 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, |
179 OnAcceleratedSurfaceBuffersSwapped) | 179 OnAcceleratedSurfaceBuffersSwapped) |
| 180 #elif defined(OS_WIN) |
| 181 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_CreateCompositorHostWindow, |
| 182 OnCreateCompositorHostWindow) |
180 #endif | 183 #endif |
181 // If the IO thread does not handle the message then automatically route it | 184 // If the IO thread does not handle the message then automatically route it |
182 // to the UI thread. The UI thread will report an error if it does not | 185 // to the UI thread. The UI thread will report an error if it does not |
183 // handle it. | 186 // handle it. |
184 IPC_MESSAGE_UNHANDLED(RouteOnUIThread(message)) | 187 IPC_MESSAGE_UNHANDLED(RouteOnUIThread(message)) |
185 IPC_END_MESSAGE_MAP() | 188 IPC_END_MESSAGE_MAP() |
186 } | 189 } |
187 | 190 |
188 void GpuProcessHost::OnChannelEstablished( | 191 void GpuProcessHost::OnChannelEstablished( |
189 const IPC::ChannelHandle& channel_handle, | 192 const IPC::ChannelHandle& channel_handle, |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 BrowserThread::PostTask( | 301 BrowserThread::PostTask( |
299 BrowserThread::UI, FROM_HERE, | 302 BrowserThread::UI, FROM_HERE, |
300 new SetIOSurfaceDispatcher(params)); | 303 new SetIOSurfaceDispatcher(params)); |
301 } | 304 } |
302 | 305 |
303 namespace { | 306 namespace { |
304 | 307 |
305 class BuffersSwappedDispatcher : public Task { | 308 class BuffersSwappedDispatcher : public Task { |
306 public: | 309 public: |
307 BuffersSwappedDispatcher( | 310 BuffersSwappedDispatcher( |
308 int32 renderer_id, | 311 int renderer_id, |
309 int32 render_view_id, | 312 int render_view_id, |
310 gfx::PluginWindowHandle window, | 313 gfx::PluginWindowHandle window, |
311 uint64 surface_id, | 314 uint64 surface_id, |
312 int32 route_id, | 315 int32 route_id, |
313 uint64 swap_buffers_count) | 316 uint64 swap_buffers_count) |
314 : renderer_id_(renderer_id), | 317 : renderer_id_(renderer_id), |
315 render_view_id_(render_view_id), | 318 render_view_id_(render_view_id), |
316 window_(window), | 319 window_(window), |
317 surface_id_(surface_id), | 320 surface_id_(surface_id), |
318 route_id_(route_id), | 321 route_id_(route_id), |
319 swap_buffers_count_(swap_buffers_count) { | 322 swap_buffers_count_(swap_buffers_count) { |
(...skipping 11 matching lines...) Expand all Loading... |
331 // Parameters needed to swap the IOSurface. | 334 // Parameters needed to swap the IOSurface. |
332 window_, | 335 window_, |
333 surface_id_, | 336 surface_id_, |
334 // Parameters needed to formulate an acknowledgment. | 337 // Parameters needed to formulate an acknowledgment. |
335 renderer_id_, | 338 renderer_id_, |
336 route_id_, | 339 route_id_, |
337 swap_buffers_count_); | 340 swap_buffers_count_); |
338 } | 341 } |
339 | 342 |
340 private: | 343 private: |
341 int32 renderer_id_; | 344 int renderer_id_; |
342 int32 render_view_id_; | 345 int render_view_id_; |
343 gfx::PluginWindowHandle window_; | 346 gfx::PluginWindowHandle window_; |
344 uint64 surface_id_; | 347 uint64 surface_id_; |
345 int32 route_id_; | 348 int32 route_id_; |
346 uint64 swap_buffers_count_; | 349 uint64 swap_buffers_count_; |
347 | 350 |
348 DISALLOW_COPY_AND_ASSIGN(BuffersSwappedDispatcher); | 351 DISALLOW_COPY_AND_ASSIGN(BuffersSwappedDispatcher); |
349 }; | 352 }; |
350 | 353 |
351 } // namespace | 354 } // namespace |
352 | 355 |
353 void GpuProcessHost::OnAcceleratedSurfaceBuffersSwapped( | 356 void GpuProcessHost::OnAcceleratedSurfaceBuffersSwapped( |
354 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params) { | 357 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params) { |
355 BrowserThread::PostTask( | 358 BrowserThread::PostTask( |
356 BrowserThread::UI, FROM_HERE, | 359 BrowserThread::UI, FROM_HERE, |
357 new BuffersSwappedDispatcher( | 360 new BuffersSwappedDispatcher( |
358 // These are the parameters needed to look up the IOSurface | 361 // These are the parameters needed to look up the IOSurface |
359 // on this side. | 362 // on this side. |
360 params.renderer_id, | 363 params.renderer_id, |
361 params.render_view_id, | 364 params.render_view_id, |
362 params.window, | 365 params.window, |
363 params.surface_id, | 366 params.surface_id, |
364 // These are additional parameters needed to formulate an | 367 // These are additional parameters needed to formulate an |
365 // acknowledgment. | 368 // acknowledgment. |
366 params.route_id, | 369 params.route_id, |
367 params.swap_buffers_count)); | 370 params.swap_buffers_count)); |
368 } | 371 } |
| 372 |
| 373 #elif defined(OS_WIN) |
| 374 |
| 375 namespace { |
| 376 |
| 377 void SendDelayedReply(IPC::Message* reply_msg) { |
| 378 GpuProcessHost::Get()->Send(reply_msg); |
| 379 } |
| 380 |
| 381 void CreateCompositorHostWindowDispatcher( |
| 382 int renderer_id, |
| 383 int render_view_id, |
| 384 IPC::Message* reply_msg) { |
| 385 RenderViewHost* host = RenderViewHost::FromID(renderer_id, |
| 386 render_view_id); |
| 387 if (!host) { |
| 388 return; |
| 389 } |
| 390 |
| 391 RenderWidgetHostView* view = host->view(); |
| 392 gfx::PluginWindowHandle id = view->CreateCompositorHostWindow(); |
| 393 |
| 394 |
| 395 GpuHostMsg_CreateCompositorHostWindow::WriteReplyParams(reply_msg, id); |
| 396 BrowserThread::PostTask( |
| 397 BrowserThread::IO, FROM_HERE, |
| 398 NewRunnableFunction(&SendDelayedReply, reply_msg)); |
| 399 } |
| 400 |
| 401 } // namespace |
| 402 |
| 403 void GpuProcessHost::OnCreateCompositorHostWindow( |
| 404 int renderer_id, |
| 405 int render_view_id, |
| 406 IPC::Message* reply_message) { |
| 407 BrowserThread::PostTask( |
| 408 BrowserThread::UI, FROM_HERE, |
| 409 NewRunnableFunction(&CreateCompositorHostWindowDispatcher, |
| 410 renderer_id, render_view_id, reply_message)); |
| 411 } |
| 412 |
369 #endif | 413 #endif |
370 | 414 |
371 void GpuProcessHost::SendEstablishChannelReply( | 415 void GpuProcessHost::SendEstablishChannelReply( |
372 const IPC::ChannelHandle& channel, | 416 const IPC::ChannelHandle& channel, |
373 const GPUInfo& gpu_info, | 417 const GPUInfo& gpu_info, |
374 ResourceMessageFilter* filter) { | 418 ResourceMessageFilter* filter) { |
375 ViewMsg_GpuChannelEstablished* message = | 419 ViewMsg_GpuChannelEstablished* message = |
376 new ViewMsg_GpuChannelEstablished(channel, gpu_info); | 420 new ViewMsg_GpuChannelEstablished(channel, gpu_info); |
377 // If the renderer process is performing synchronous initialization, | 421 // If the renderer process is performing synchronous initialization, |
378 // it needs to handle this message before receiving the reply for | 422 // it needs to handle this message before receiving the reply for |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 false, // Never use the zygote (GPU plugin can't be sandboxed). | 498 false, // Never use the zygote (GPU plugin can't be sandboxed). |
455 base::environment_vector(), | 499 base::environment_vector(), |
456 #endif | 500 #endif |
457 cmd_line); | 501 cmd_line); |
458 | 502 |
459 UMA_HISTOGRAM_ENUMERATION("GPU.GPUProcessLifetimeEvents", | 503 UMA_HISTOGRAM_ENUMERATION("GPU.GPUProcessLifetimeEvents", |
460 kLaunched, kGPUProcessLifetimeEvent_Max); | 504 kLaunched, kGPUProcessLifetimeEvent_Max); |
461 return true; | 505 return true; |
462 } | 506 } |
463 | 507 |
OLD | NEW |