Index: content/browser/renderer_host/render_widget_host_view_win.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc |
index c8078147bf2db6fae268370cb58a5c5243b2a6d1..3e8e077f8674ee2e8cd5145e541633b1139a3746 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_win.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_win.cc |
@@ -182,6 +182,19 @@ LRESULT CALLBACK PluginWrapperWindowProc(HWND window, unsigned int message, |
return ::DefWindowProc(window, message, wparam, lparam); |
} |
+void SendToGpuProcessHost(int gpu_host_id, scoped_ptr<IPC::Message> message) { |
+ GpuProcessHost* gpu_process_host = GpuProcessHost::FromID(gpu_host_id); |
+ if (!gpu_process_host) |
+ return; |
+ |
+ gpu_process_host->Send(message.release()); |
+} |
+ |
+void PostTaskOnIOThread(const tracked_objects::Location& from_here, |
+ base::Closure task) { |
+ BrowserThread::PostTask(BrowserThread::IO, from_here, task); |
+} |
+ |
bool DecodeZoomGesture(HWND hwnd, const GESTUREINFO& gi, |
content::PageZoom* zoom, |
POINT* zoom_center) { |
@@ -2035,12 +2048,19 @@ void RenderWidgetHostViewWin::AcceleratedSurfaceBuffersSwapped( |
accelerated_surface_->Initialize(); |
} |
+ scoped_ptr<IPC::Message> message( |
+ new AcceleratedSurfaceMsg_BuffersSwappedACK(params.route_id)); |
+ base::Closure acknowledge_task = base::Bind( |
+ SendToGpuProcessHost, |
+ gpu_host_id, |
+ base::Passed(&message)); |
+ |
accelerated_surface_->AsyncPresentAndAcknowledge( |
params.size, |
params.surface_id, |
- base::Bind(&RenderWidgetHost::AcknowledgeSwapBuffers, |
- gpu_host_id, |
- params.route_id)); |
+ base::Bind(PostTaskOnIOThread, |
+ FROM_HERE, |
+ acknowledge_task)); |
} else { |
RenderWidgetHost::AcknowledgeSwapBuffers(params.route_id, gpu_host_id); |
} |