| 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 FROM_HERE, | 145 FROM_HERE, |
| 146 new RouteOnUIThreadTask(message)); | 146 new RouteOnUIThreadTask(message)); |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 | 149 |
| 150 void GpuProcessHost::EstablishGpuChannel(int renderer_id, | 150 void GpuProcessHost::EstablishGpuChannel(int renderer_id, |
| 151 ResourceMessageFilter* filter) { | 151 ResourceMessageFilter* filter) { |
| 152 if (Send(new GpuMsg_EstablishChannel(renderer_id))) { | 152 if (Send(new GpuMsg_EstablishChannel(renderer_id))) { |
| 153 sent_requests_.push(ChannelRequest(filter)); | 153 sent_requests_.push(ChannelRequest(filter)); |
| 154 } else { | 154 } else { |
| 155 ReplyToRenderer(IPC::ChannelHandle(), GPUInfo(), filter); | 155 SendEstablishChannelReply(IPC::ChannelHandle(), GPUInfo(), filter); |
| 156 } | 156 } |
| 157 } | 157 } |
| 158 | 158 |
| 159 void GpuProcessHost::Synchronize(IPC::Message* reply, | 159 void GpuProcessHost::Synchronize(IPC::Message* reply, |
| 160 ResourceMessageFilter* filter) { | 160 ResourceMessageFilter* filter) { |
| 161 queued_synchronization_replies_.push(SynchronizationRequest(reply, filter)); | 161 if (Send(new GpuMsg_Synchronize())) { |
| 162 Send(new GpuMsg_Synchronize()); | 162 queued_synchronization_replies_.push(SynchronizationRequest(reply, filter)); |
| 163 } else { |
| 164 SendSynchronizationReply(reply, filter); |
| 165 } |
| 163 } | 166 } |
| 164 | 167 |
| 165 GPUInfo GpuProcessHost::gpu_info() const { | 168 const GPUInfo& GpuProcessHost::gpu_info() const { |
| 166 return gpu_info_; | 169 return gpu_info_; |
| 167 } | 170 } |
| 168 | 171 |
| 169 GpuProcessHost::ChannelRequest::ChannelRequest(ResourceMessageFilter* filter) | 172 GpuProcessHost::ChannelRequest::ChannelRequest(ResourceMessageFilter* filter) |
| 170 : filter(filter) { | 173 : filter(filter) { |
| 171 } | 174 } |
| 172 | 175 |
| 173 GpuProcessHost::ChannelRequest::~ChannelRequest() {} | 176 GpuProcessHost::ChannelRequest::~ChannelRequest() {} |
| 174 | 177 |
| 175 GpuProcessHost::SynchronizationRequest::SynchronizationRequest( | 178 GpuProcessHost::SynchronizationRequest::SynchronizationRequest( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 196 OnAcceleratedSurfaceBuffersSwapped) | 199 OnAcceleratedSurfaceBuffersSwapped) |
| 197 #endif | 200 #endif |
| 198 IPC_MESSAGE_UNHANDLED_ERROR() | 201 IPC_MESSAGE_UNHANDLED_ERROR() |
| 199 IPC_END_MESSAGE_MAP() | 202 IPC_END_MESSAGE_MAP() |
| 200 } | 203 } |
| 201 | 204 |
| 202 void GpuProcessHost::OnChannelEstablished( | 205 void GpuProcessHost::OnChannelEstablished( |
| 203 const IPC::ChannelHandle& channel_handle, | 206 const IPC::ChannelHandle& channel_handle, |
| 204 const GPUInfo& gpu_info) { | 207 const GPUInfo& gpu_info) { |
| 205 const ChannelRequest& request = sent_requests_.front(); | 208 const ChannelRequest& request = sent_requests_.front(); |
| 206 ReplyToRenderer(channel_handle, gpu_info, request.filter); | 209 SendEstablishChannelReply(channel_handle, gpu_info, request.filter); |
| 207 sent_requests_.pop(); | 210 sent_requests_.pop(); |
| 208 gpu_info_ = gpu_info; | 211 gpu_info_ = gpu_info; |
| 209 child_process_logging::SetGpuInfo(gpu_info); | 212 child_process_logging::SetGpuInfo(gpu_info); |
| 210 } | 213 } |
| 211 | 214 |
| 212 void GpuProcessHost::OnSynchronizeReply() { | 215 void GpuProcessHost::OnSynchronizeReply() { |
| 213 const SynchronizationRequest& request = | 216 const SynchronizationRequest& request = |
| 214 queued_synchronization_replies_.front(); | 217 queued_synchronization_replies_.front(); |
| 215 request.filter->Send(request.reply); | 218 SendSynchronizationReply(request.reply, request.filter); |
| 216 queued_synchronization_replies_.pop(); | 219 queued_synchronization_replies_.pop(); |
| 217 } | 220 } |
| 218 | 221 |
| 219 void GpuProcessHost::OnGraphicsInfoCollected(const GPUInfo& gpu_info) { | 222 void GpuProcessHost::OnGraphicsInfoCollected(const GPUInfo& gpu_info) { |
| 220 gpu_info_ = gpu_info; | 223 gpu_info_ = gpu_info; |
| 221 } | 224 } |
| 222 | 225 |
| 223 #if defined(OS_LINUX) | 226 #if defined(OS_LINUX) |
| 224 | 227 |
| 225 namespace { | 228 namespace { |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 int32 render_view_id, | 340 int32 render_view_id, |
| 338 gfx::PluginWindowHandle window, | 341 gfx::PluginWindowHandle window, |
| 339 uint64 surface_id) { | 342 uint64 surface_id) { |
| 340 BrowserThread::PostTask( | 343 BrowserThread::PostTask( |
| 341 BrowserThread::UI, FROM_HERE, | 344 BrowserThread::UI, FROM_HERE, |
| 342 new BuffersSwappedDispatcher( | 345 new BuffersSwappedDispatcher( |
| 343 renderer_id, render_view_id, window, surface_id)); | 346 renderer_id, render_view_id, window, surface_id)); |
| 344 } | 347 } |
| 345 #endif | 348 #endif |
| 346 | 349 |
| 347 void GpuProcessHost::ReplyToRenderer( | 350 void GpuProcessHost::SendEstablishChannelReply( |
| 348 const IPC::ChannelHandle& channel, | 351 const IPC::ChannelHandle& channel, |
| 349 const GPUInfo& gpu_info, | 352 const GPUInfo& gpu_info, |
| 350 ResourceMessageFilter* filter) { | 353 ResourceMessageFilter* filter) { |
| 351 ViewMsg_GpuChannelEstablished* message = | 354 ViewMsg_GpuChannelEstablished* message = |
| 352 new ViewMsg_GpuChannelEstablished(channel, gpu_info); | 355 new ViewMsg_GpuChannelEstablished(channel, gpu_info); |
| 353 // If the renderer process is performing synchronous initialization, | 356 // If the renderer process is performing synchronous initialization, |
| 354 // it needs to handle this message before receiving the reply for | 357 // it needs to handle this message before receiving the reply for |
| 355 // the synchronous ViewHostMsg_SynchronizeGpu message. | 358 // the synchronous ViewHostMsg_SynchronizeGpu message. |
| 356 message->set_unblock(true); | 359 message->set_unblock(true); |
| 357 filter->Send(message); | 360 filter->Send(message); |
| 358 } | 361 } |
| 359 | 362 |
| 363 // Sends the response for synchronization request to the renderer. |
| 364 void GpuProcessHost::SendSynchronizationReply( |
| 365 IPC::Message* reply, |
| 366 ResourceMessageFilter* filter) { |
| 367 filter->Send(reply); |
| 368 } |
| 369 |
| 360 URLRequestContext* GpuProcessHost::GetRequestContext( | 370 URLRequestContext* GpuProcessHost::GetRequestContext( |
| 361 uint32 request_id, | 371 uint32 request_id, |
| 362 const ViewHostMsg_Resource_Request& request_data) { | 372 const ViewHostMsg_Resource_Request& request_data) { |
| 363 return NULL; | 373 return NULL; |
| 364 } | 374 } |
| 365 | 375 |
| 366 bool GpuProcessHost::CanShutdown() { | 376 bool GpuProcessHost::CanShutdown() { |
| 367 return true; | 377 return true; |
| 368 } | 378 } |
| 379 |
| 380 void GpuProcessHost::OnProcessCrashed() { |
| 381 // TODO(alokp): Update gpu process crash rate. |
| 382 BrowserChildProcessHost::OnProcessCrashed(); |
| 383 } |
| 384 |
| OLD | NEW |