| 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 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 GpuProcessHost::SynchronizationRequest::~SynchronizationRequest() {} | 164 GpuProcessHost::SynchronizationRequest::~SynchronizationRequest() {} |
| 165 | 165 |
| 166 void GpuProcessHost::OnControlMessageReceived(const IPC::Message& message) { | 166 void GpuProcessHost::OnControlMessageReceived(const IPC::Message& message) { |
| 167 DCHECK(CalledOnValidThread()); | 167 DCHECK(CalledOnValidThread()); |
| 168 | 168 |
| 169 IPC_BEGIN_MESSAGE_MAP(GpuProcessHost, message) | 169 IPC_BEGIN_MESSAGE_MAP(GpuProcessHost, message) |
| 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(GpuHostMsg_ReleaseXID, OnReleaseXID) |
| 174 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID) | 175 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID) |
| 175 #elif defined(OS_MACOSX) | 176 #elif defined(OS_MACOSX) |
| 176 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, | 177 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, |
| 177 OnAcceleratedSurfaceSetIOSurface) | 178 OnAcceleratedSurfaceSetIOSurface) |
| 178 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, | 179 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, |
| 179 OnAcceleratedSurfaceBuffersSwapped) | 180 OnAcceleratedSurfaceBuffersSwapped) |
| 180 #elif defined(OS_WIN) | 181 #elif defined(OS_WIN) |
| 181 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_CreateCompositorHostWindow, | 182 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_CreateCompositorHostWindow, |
| 182 OnCreateCompositorHostWindow) | 183 OnCreateCompositorHostWindow) |
| 183 #endif | 184 #endif |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 } | 222 } |
| 222 | 223 |
| 223 GpuHostMsg_GetViewXID::WriteReplyParams(reply_msg, xid); | 224 GpuHostMsg_GetViewXID::WriteReplyParams(reply_msg, xid); |
| 224 | 225 |
| 225 // Have to reply from IO thread. | 226 // Have to reply from IO thread. |
| 226 BrowserThread::PostTask( | 227 BrowserThread::PostTask( |
| 227 BrowserThread::IO, FROM_HERE, | 228 BrowserThread::IO, FROM_HERE, |
| 228 NewRunnableFunction(&SendDelayedReply, reply_msg)); | 229 NewRunnableFunction(&SendDelayedReply, reply_msg)); |
| 229 } | 230 } |
| 230 | 231 |
| 232 void ReleaseXIDDispatcher(unsigned long xid) { |
| 233 GtkNativeViewManager* manager = Singleton<GtkNativeViewManager>::get(); |
| 234 manager->ReleasePermanentXID(xid); |
| 235 } |
| 236 |
| 231 void ResizeXIDDispatcher(unsigned long xid, gfx::Size size, | 237 void ResizeXIDDispatcher(unsigned long xid, gfx::Size size, |
| 232 IPC::Message *reply_msg) { | 238 IPC::Message *reply_msg) { |
| 233 GdkWindow* window = reinterpret_cast<GdkWindow*>(gdk_xid_table_lookup(xid)); | 239 GdkWindow* window = reinterpret_cast<GdkWindow*>(gdk_xid_table_lookup(xid)); |
| 234 if (window) { | 240 if (window) { |
| 235 Display* display = GDK_WINDOW_XDISPLAY(window); | 241 Display* display = GDK_WINDOW_XDISPLAY(window); |
| 236 gdk_window_resize(window, size.width(), size.height()); | 242 gdk_window_resize(window, size.width(), size.height()); |
| 237 XSync(display, False); | 243 XSync(display, False); |
| 238 } | 244 } |
| 239 | 245 |
| 240 GpuHostMsg_ResizeXID::WriteReplyParams(reply_msg, (window != NULL)); | 246 GpuHostMsg_ResizeXID::WriteReplyParams(reply_msg, (window != NULL)); |
| 241 | 247 |
| 242 // Have to reply from IO thread. | 248 // Have to reply from IO thread. |
| 243 BrowserThread::PostTask( | 249 BrowserThread::PostTask( |
| 244 BrowserThread::IO, FROM_HERE, | 250 BrowserThread::IO, FROM_HERE, |
| 245 NewRunnableFunction(&SendDelayedReply, reply_msg)); | 251 NewRunnableFunction(&SendDelayedReply, reply_msg)); |
| 246 } | 252 } |
| 247 | 253 |
| 248 } // namespace | 254 } // namespace |
| 249 | 255 |
| 250 void GpuProcessHost::OnGetViewXID(gfx::NativeViewId id, | 256 void GpuProcessHost::OnGetViewXID(gfx::NativeViewId id, |
| 251 IPC::Message *reply_msg) { | 257 IPC::Message *reply_msg) { |
| 252 // Have to request a permanent XID from UI thread. | 258 // Have to request a permanent XID from UI thread. |
| 253 BrowserThread::PostTask( | 259 BrowserThread::PostTask( |
| 254 BrowserThread::UI, FROM_HERE, | 260 BrowserThread::UI, FROM_HERE, |
| 255 NewRunnableFunction(&GetViewXIDDispatcher, id, reply_msg)); | 261 NewRunnableFunction(&GetViewXIDDispatcher, id, reply_msg)); |
| 256 } | 262 } |
| 257 | 263 |
| 264 void GpuProcessHost::OnReleaseXID(unsigned long xid) { |
| 265 // Have to release a permanent XID from UI thread. |
| 266 BrowserThread::PostTask( |
| 267 BrowserThread::UI, FROM_HERE, |
| 268 NewRunnableFunction(&ReleaseXIDDispatcher, xid)); |
| 269 } |
| 270 |
| 258 void GpuProcessHost::OnResizeXID(unsigned long xid, gfx::Size size, | 271 void GpuProcessHost::OnResizeXID(unsigned long xid, gfx::Size size, |
| 259 IPC::Message *reply_msg) { | 272 IPC::Message *reply_msg) { |
| 260 // Have to resize the window from UI thread. | 273 // Have to resize the window from UI thread. |
| 261 BrowserThread::PostTask( | 274 BrowserThread::PostTask( |
| 262 BrowserThread::UI, FROM_HERE, | 275 BrowserThread::UI, FROM_HERE, |
| 263 NewRunnableFunction(&ResizeXIDDispatcher, xid, size, reply_msg)); | 276 NewRunnableFunction(&ResizeXIDDispatcher, xid, size, reply_msg)); |
| 264 } | 277 } |
| 265 | 278 |
| 266 #elif defined(OS_MACOSX) | 279 #elif defined(OS_MACOSX) |
| 267 | 280 |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 false, // Never use the zygote (GPU plugin can't be sandboxed). | 511 false, // Never use the zygote (GPU plugin can't be sandboxed). |
| 499 base::environment_vector(), | 512 base::environment_vector(), |
| 500 #endif | 513 #endif |
| 501 cmd_line); | 514 cmd_line); |
| 502 | 515 |
| 503 UMA_HISTOGRAM_ENUMERATION("GPU.GPUProcessLifetimeEvents", | 516 UMA_HISTOGRAM_ENUMERATION("GPU.GPUProcessLifetimeEvents", |
| 504 kLaunched, kGPUProcessLifetimeEvent_Max); | 517 kLaunched, kGPUProcessLifetimeEvent_Max); |
| 505 return true; | 518 return true; |
| 506 } | 519 } |
| 507 | 520 |
| OLD | NEW |