OLD | NEW |
---|---|
1 // TODO(jam): move this file to src/content once we have an interface that the | 1 // TODO(jam): move this file to src/content once we have an interface that the |
2 // embedder provides. We can then use it to get the resource and resize the | 2 // embedder provides. We can then use it to get the resource and resize the |
3 // window. | 3 // window. |
4 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 4 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
5 // Use of this source code is governed by a BSD-style license that can be | 5 // Use of this source code is governed by a BSD-style license that can be |
6 // found in the LICENSE file. | 6 // found in the LICENSE file. |
7 | 7 |
8 #include "chrome/browser/gpu_process_host_ui_shim.h" | 8 #include "chrome/browser/gpu_process_host_ui_shim.h" |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
220 } | 220 } |
221 } | 221 } |
222 | 222 |
223 bool GpuProcessHostUIShim::OnControlMessageReceived( | 223 bool GpuProcessHostUIShim::OnControlMessageReceived( |
224 const IPC::Message& message) { | 224 const IPC::Message& message) { |
225 DCHECK(CalledOnValidThread()); | 225 DCHECK(CalledOnValidThread()); |
226 | 226 |
227 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message) | 227 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message) |
228 IPC_MESSAGE_HANDLER(GpuHostMsg_OnLogMessage, | 228 IPC_MESSAGE_HANDLER(GpuHostMsg_OnLogMessage, |
229 OnLogMessage) | 229 OnLogMessage) |
230 #if defined(OS_LINUX) && !defined(TOUCH_UI) | 230 #if defined(OS_LINUX) && !defined(TOUCH_UI) || defined(OS_WIN) |
231 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID) | 231 IPC_MESSAGE_HANDLER(GpuHostMsg_ResizeView, OnResizeView) |
232 #elif defined(OS_MACOSX) | 232 #elif defined(OS_MACOSX) |
233 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, | 233 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface, |
234 OnAcceleratedSurfaceSetIOSurface) | 234 OnAcceleratedSurfaceSetIOSurface) |
235 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, | 235 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped, |
236 OnAcceleratedSurfaceBuffersSwapped) | 236 OnAcceleratedSurfaceBuffersSwapped) |
237 #elif defined(OS_WIN) | 237 #elif defined(OS_WIN) |
238 IPC_MESSAGE_HANDLER(GpuHostMsg_ScheduleComposite, OnScheduleComposite); | 238 IPC_MESSAGE_HANDLER(GpuHostMsg_ScheduleComposite, OnScheduleComposite); |
239 #endif | 239 #endif |
240 IPC_MESSAGE_UNHANDLED_ERROR() | 240 IPC_MESSAGE_UNHANDLED_ERROR() |
241 IPC_END_MESSAGE_MAP() | 241 IPC_END_MESSAGE_MAP() |
242 | 242 |
243 return true; | 243 return true; |
244 } | 244 } |
245 | 245 |
246 void GpuProcessHostUIShim::OnLogMessage( | 246 void GpuProcessHostUIShim::OnLogMessage( |
247 int level, | 247 int level, |
248 const std::string& header, | 248 const std::string& header, |
249 const std::string& message) { | 249 const std::string& message) { |
250 DictionaryValue* dict = new DictionaryValue(); | 250 DictionaryValue* dict = new DictionaryValue(); |
251 dict->SetInteger("level", level); | 251 dict->SetInteger("level", level); |
252 dict->SetString("header", header); | 252 dict->SetString("header", header); |
253 dict->SetString("message", message); | 253 dict->SetString("message", message); |
254 GpuDataManager::GetInstance()->AddLogMessage(dict); | 254 GpuDataManager::GetInstance()->AddLogMessage(dict); |
255 } | 255 } |
256 | 256 |
257 #if defined(OS_LINUX) && !defined(TOUCH_UI) || defined(OS_WIN) | |
258 | |
259 void GpuProcessHostUIShim::OnResizeView(int32 renderer_id, | |
260 int32 render_view_id, | |
261 int32 command_buffer_route_id, | |
262 gfx::Size size) { | |
263 RenderViewHost* host = RenderViewHost::FromID(renderer_id, | |
264 render_view_id); | |
jam
2011/04/27 20:45:22
nit: looks like this can all fit on one line
apatrick_chromium
2011/04/27 22:45:22
Done.
| |
265 if (host) { | |
266 RenderWidgetHostView* view = host->view(); | |
267 if (view) { | |
268 gfx::PluginWindowHandle handle = view->GetCompositingSurface(); | |
269 | |
270 // Resize the window synchronously. The GPU process must not issue GL | |
271 // calls on the command buffer until the window is the size it expects it | |
272 // to be. | |
257 #if defined(OS_LINUX) && !defined(TOUCH_UI) | 273 #if defined(OS_LINUX) && !defined(TOUCH_UI) |
258 | 274 GdkWindow* window = reinterpret_cast<GdkWindow*>( |
259 void GpuProcessHostUIShim::OnResizeXID(unsigned long xid, gfx::Size size, | 275 gdk_xid_table_lookup(handle)); |
260 IPC::Message *reply_msg) { | 276 if (window) { |
261 GdkWindow* window = reinterpret_cast<GdkWindow*>(gdk_xid_table_lookup(xid)); | 277 Display* display = GDK_WINDOW_XDISPLAY(window); |
262 if (window) { | 278 gdk_window_resize(window, size.width(), size.height()); |
263 Display* display = GDK_WINDOW_XDISPLAY(window); | 279 XSync(display, False); |
264 gdk_window_resize(window, size.width(), size.height()); | 280 } |
265 XSync(display, False); | 281 #elif defined(OS_WIN) |
282 SetWindowPos(handle, | |
283 NULL, | |
284 0, 0, | |
285 size.width(), | |
286 size.height(), | |
287 SWP_NOSENDCHANGING | SWP_NOCOPYBITS | SWP_NOZORDER | | |
288 SWP_NOACTIVATE | SWP_DEFERERASE | SWP_SHOWWINDOW); | |
289 #endif | |
290 } | |
266 } | 291 } |
267 | 292 |
268 GpuHostMsg_ResizeXID::WriteReplyParams(reply_msg, (window != NULL)); | 293 // Always respond even if the window no longer exists. The GPU process cannot |
269 Send(reply_msg); | 294 // make progress on the resizing command buffer until it receives the |
295 // response. | |
296 Send(new GpuMsg_ResizeViewACK(renderer_id, command_buffer_route_id)); | |
270 } | 297 } |
271 | 298 |
272 #elif defined(OS_MACOSX) | 299 #elif defined(OS_MACOSX) |
273 | 300 |
274 void GpuProcessHostUIShim::OnAcceleratedSurfaceSetIOSurface( | 301 void GpuProcessHostUIShim::OnAcceleratedSurfaceSetIOSurface( |
275 const GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params& params) { | 302 const GpuHostMsg_AcceleratedSurfaceSetIOSurface_Params& params) { |
276 RenderViewHost* host = RenderViewHost::FromID(params.renderer_id, | 303 RenderViewHost* host = RenderViewHost::FromID(params.renderer_id, |
277 params.render_view_id); | 304 params.render_view_id); |
278 if (!host) | 305 if (!host) |
279 return; | 306 return; |
(...skipping 19 matching lines...) Expand all Loading... | |
299 // Parameters needed to swap the IOSurface. | 326 // Parameters needed to swap the IOSurface. |
300 params.window, | 327 params.window, |
301 params.surface_id, | 328 params.surface_id, |
302 // Parameters needed to formulate an acknowledgment. | 329 // Parameters needed to formulate an acknowledgment. |
303 params.renderer_id, | 330 params.renderer_id, |
304 params.route_id, | 331 params.route_id, |
305 host_id_, | 332 host_id_, |
306 params.swap_buffers_count); | 333 params.swap_buffers_count); |
307 } | 334 } |
308 | 335 |
309 #elif defined(OS_WIN) | 336 #endif |
337 | |
338 #if defined(OS_WIN) | |
310 | 339 |
311 void GpuProcessHostUIShim::OnScheduleComposite(int renderer_id, | 340 void GpuProcessHostUIShim::OnScheduleComposite(int renderer_id, |
312 int render_view_id) { | 341 int render_view_id) { |
313 RenderViewHost* host = RenderViewHost::FromID(renderer_id, | 342 RenderViewHost* host = RenderViewHost::FromID(renderer_id, |
314 render_view_id); | 343 render_view_id); |
315 if (!host) { | 344 if (!host) { |
316 return; | 345 return; |
317 } | 346 } |
318 host->ScheduleComposite(); | 347 host->ScheduleComposite(); |
319 } | 348 } |
320 | 349 |
321 #endif | 350 #endif |
OLD | NEW |