Chromium Code Reviews| 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/thread.h" | 9 #include "base/thread.h" |
| 10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 187 IPC_MESSAGE_HANDLER(GpuHostMsg_SynchronizeReply, OnSynchronizeReply) | 187 IPC_MESSAGE_HANDLER(GpuHostMsg_SynchronizeReply, OnSynchronizeReply) |
| 188 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected, | 188 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected, |
| 189 OnGraphicsInfoCollected) | 189 OnGraphicsInfoCollected) |
| 190 #if defined(OS_LINUX) | 190 #if defined(OS_LINUX) |
| 191 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_GetViewXID, OnGetViewXID) | 191 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_GetViewXID, OnGetViewXID) |
| 192 #elif defined(OS_MACOSX) | 192 #elif defined(OS_MACOSX) |
| 193 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, | 193 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, |
| 194 OnAcceleratedSurfaceSetIOSurface) | 194 OnAcceleratedSurfaceSetIOSurface) |
| 195 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, | 195 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, |
| 196 OnAcceleratedSurfaceBuffersSwapped) | 196 OnAcceleratedSurfaceBuffersSwapped) |
| 197 #elif defined(OS_WIN) | |
| 198 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_CreateCompositorHostWindow, | |
| 199 OnCreateCompositorHostWindow) | |
| 200 IPC_MESSAGE_HANDLER(GpuHostMsg_ScheduleComposite, OnScheduleComposite) | |
| 197 #endif | 201 #endif |
| 198 IPC_MESSAGE_UNHANDLED_ERROR() | 202 IPC_MESSAGE_UNHANDLED_ERROR() |
| 199 IPC_END_MESSAGE_MAP() | 203 IPC_END_MESSAGE_MAP() |
| 200 } | 204 } |
| 201 | 205 |
| 202 void GpuProcessHost::OnChannelEstablished( | 206 void GpuProcessHost::OnChannelEstablished( |
| 203 const IPC::ChannelHandle& channel_handle, | 207 const IPC::ChannelHandle& channel_handle, |
| 204 const GPUInfo& gpu_info) { | 208 const GPUInfo& gpu_info) { |
| 205 const ChannelRequest& request = sent_requests_.front(); | 209 const ChannelRequest& request = sent_requests_.front(); |
| 206 ReplyToRenderer(channel_handle, gpu_info, request.filter); | 210 ReplyToRenderer(channel_handle, gpu_info, request.filter); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 335 void GpuProcessHost::OnAcceleratedSurfaceBuffersSwapped( | 339 void GpuProcessHost::OnAcceleratedSurfaceBuffersSwapped( |
| 336 int32 renderer_id, | 340 int32 renderer_id, |
| 337 int32 render_view_id, | 341 int32 render_view_id, |
| 338 gfx::PluginWindowHandle window, | 342 gfx::PluginWindowHandle window, |
| 339 uint64 surface_id) { | 343 uint64 surface_id) { |
| 340 BrowserThread::PostTask( | 344 BrowserThread::PostTask( |
| 341 BrowserThread::UI, FROM_HERE, | 345 BrowserThread::UI, FROM_HERE, |
| 342 new BuffersSwappedDispatcher( | 346 new BuffersSwappedDispatcher( |
| 343 renderer_id, render_view_id, window, surface_id)); | 347 renderer_id, render_view_id, window, surface_id)); |
| 344 } | 348 } |
| 349 | |
| 350 #elif defined(OS_WIN) | |
| 351 | |
| 352 namespace { | |
| 353 | |
| 354 void SendDelayedReply(IPC::Message* reply_msg) { | |
| 355 GpuProcessHost::Get()->Send(reply_msg); | |
| 356 } | |
| 357 | |
| 358 void CreateCompositorHostWindowDispatcher( | |
| 359 int32 renderer_id, | |
| 360 int32 render_view_id, | |
| 361 IPC::Message* reply_msg) { | |
| 362 | |
|
jam
2010/11/12 18:08:00
nit:extra line
nduca
2010/11/12 19:45:32
Done.
| |
| 363 RenderViewHost* host = RenderViewHost::FromID(renderer_id, | |
| 364 render_view_id); | |
| 365 DCHECK(host); | |
|
jam
2010/11/12 18:08:00
this, and 368: we normally don't add NULL dchecks
nduca
2010/11/12 19:45:32
Done.
| |
| 366 | |
| 367 RenderWidgetHostView* view = host->view(); | |
| 368 DCHECK(view); | |
| 369 gfx::PluginWindowHandle id = view->CreateCompositorHostWindow(); | |
| 370 | |
| 371 GpuHostMsg_CreateCompositorHostWindow::WriteReplyParams(reply_msg, id); | |
| 372 | |
| 373 // Have to reply from IO thread. | |
|
jam
2010/11/12 18:08:00
you can actually just do host->Send directly
nduca
2010/11/12 19:45:32
Done.
jam
2010/11/12 20:34:41
I actually meant "host->Send", i.e. using the Rend
| |
| 374 BrowserThread::PostTask( | |
| 375 BrowserThread::IO, FROM_HERE, | |
| 376 NewRunnableFunction(&SendDelayedReply, reply_msg)); | |
| 377 } | |
| 378 | |
| 379 void ScheduleCompositeDispatcher(int32 renderer_id, int32 render_view_id) { | |
| 380 RenderViewHost* host = RenderViewHost::FromID(renderer_id, | |
| 381 render_view_id); | |
| 382 DCHECK(host); | |
| 383 | |
| 384 | |
| 385 host->ScheduleComposite(); | |
| 386 } | |
| 387 } // namespace | |
| 388 | |
| 389 void GpuProcessHost::OnCreateCompositorHostWindow( | |
| 390 int32 renderer_id, | |
| 391 int32 render_view_id, | |
| 392 IPC::Message* reply_message) { | |
| 393 BrowserThread::PostTask( | |
| 394 BrowserThread::UI, FROM_HERE, | |
| 395 NewRunnableFunction(&CreateCompositorHostWindowDispatcher, | |
| 396 renderer_id, render_view_id, reply_message)); | |
| 397 } | |
| 398 | |
| 399 void GpuProcessHost::OnScheduleComposite(int renderer_id, int render_view_id) { | |
| 400 BrowserThread::PostTask( | |
| 401 BrowserThread::UI, FROM_HERE, | |
| 402 NewRunnableFunction(&ScheduleCompositeDispatcher, | |
| 403 renderer_id, render_view_id)); | |
| 404 } | |
| 345 #endif | 405 #endif |
| 346 | 406 |
| 347 void GpuProcessHost::ReplyToRenderer( | 407 void GpuProcessHost::ReplyToRenderer( |
| 348 const IPC::ChannelHandle& channel, | 408 const IPC::ChannelHandle& channel, |
| 349 const GPUInfo& gpu_info, | 409 const GPUInfo& gpu_info, |
| 350 ResourceMessageFilter* filter) { | 410 ResourceMessageFilter* filter) { |
| 351 ViewMsg_GpuChannelEstablished* message = | 411 ViewMsg_GpuChannelEstablished* message = |
| 352 new ViewMsg_GpuChannelEstablished(channel, gpu_info); | 412 new ViewMsg_GpuChannelEstablished(channel, gpu_info); |
| 353 // If the renderer process is performing synchronous initialization, | 413 // If the renderer process is performing synchronous initialization, |
| 354 // it needs to handle this message before receiving the reply for | 414 // it needs to handle this message before receiving the reply for |
| 355 // the synchronous ViewHostMsg_SynchronizeGpu message. | 415 // the synchronous ViewHostMsg_SynchronizeGpu message. |
| 356 message->set_unblock(true); | 416 message->set_unblock(true); |
| 357 filter->Send(message); | 417 filter->Send(message); |
| 358 } | 418 } |
| 359 | 419 |
| 360 URLRequestContext* GpuProcessHost::GetRequestContext( | 420 URLRequestContext* GpuProcessHost::GetRequestContext( |
| 361 uint32 request_id, | 421 uint32 request_id, |
| 362 const ViewHostMsg_Resource_Request& request_data) { | 422 const ViewHostMsg_Resource_Request& request_data) { |
| 363 return NULL; | 423 return NULL; |
| 364 } | 424 } |
| 365 | 425 |
| 366 bool GpuProcessHost::CanShutdown() { | 426 bool GpuProcessHost::CanShutdown() { |
| 367 return true; | 427 return true; |
| 368 } | 428 } |
| OLD | NEW |