Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(847)

Side by Side Diff: chrome/browser/gpu_process_host_ui_shim.cc

Issue 6343006: Route IPC through browser when creating a viewable command buffer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nit. Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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_ui_shim.h" 5 #include "chrome/browser/gpu_process_host_ui_shim.h"
6 6
7 #include "chrome/browser/browser_thread.h" 7 #include "chrome/browser/browser_thread.h"
8 #include "chrome/browser/gpu_process_host.h" 8 #include "chrome/browser/gpu_process_host.h"
9 #include "chrome/browser/renderer_host/render_view_host.h" 9 #include "chrome/browser/renderer_host/render_view_host.h"
10 #include "chrome/browser/renderer_host/render_widget_host_view.h" 10 #include "chrome/browser/renderer_host/render_widget_host_view.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 BrowserThread::IO, 104 BrowserThread::IO,
105 FROM_HERE, 105 FROM_HERE,
106 new SendOnIOThreadTask(new GpuMsg_Hang())); 106 new SendOnIOThreadTask(new GpuMsg_Hang()));
107 } 107 }
108 108
109 const GPUInfo& GpuProcessHostUIShim::gpu_info() const { 109 const GPUInfo& GpuProcessHostUIShim::gpu_info() const {
110 DCHECK(CalledOnValidThread()); 110 DCHECK(CalledOnValidThread());
111 return gpu_info_; 111 return gpu_info_;
112 } 112 }
113 113
114 void GpuProcessHostUIShim::OnDestroyCommandBuffer(
115 gfx::PluginWindowHandle window, int32 renderer_id,
116 int32 render_view_id) {
117 if (!window)
118 return;
119
120 #if defined(OS_LINUX)
121 GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance();
122 manager->ReleasePermanentXID(window);
123 #elif defined(OS_MACOSX) || defined(OS_WIN)
124 RenderViewHost* host = RenderViewHost::FromID(renderer_id,
125 render_view_id);
126 if (!host)
127 return;
128 RenderWidgetHostView* view = host->view();
129 if (!view)
130 return;
131 #if defined(OS_MACOSX)
132 view->DestroyFakePluginWindowHandle(window);
133 #elif defined(OS_WIN)
134 view->ShowCompositorHostWindow(false);
135 #endif
136
137 #endif // defined(OS_MACOSX) || defined(OS_WIN)
138 }
139
114 void GpuProcessHostUIShim::OnGraphicsInfoCollected(const GPUInfo& gpu_info) { 140 void GpuProcessHostUIShim::OnGraphicsInfoCollected(const GPUInfo& gpu_info) {
115 gpu_info_ = gpu_info; 141 gpu_info_ = gpu_info;
116 child_process_logging::SetGpuInfo(gpu_info); 142 child_process_logging::SetGpuInfo(gpu_info);
117 143
118 // Used only in testing. 144 // Used only in testing.
119 if (gpu_info_collected_callback_.get()) 145 if (gpu_info_collected_callback_.get())
120 gpu_info_collected_callback_->Run(); 146 gpu_info_collected_callback_->Run();
121 } 147 }
122 148
149 bool GpuProcessHostUIShim::OnControlMessageReceived(
150 const IPC::Message& message) {
151 DCHECK(CalledOnValidThread());
152
153 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message)
154 IPC_MESSAGE_HANDLER(GpuHostMsg_DestroyCommandBuffer,
155 OnDestroyCommandBuffer)
156 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected,
157 OnGraphicsInfoCollected)
158 #if defined(OS_LINUX)
159 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID)
160 #elif defined(OS_MACOSX)
161 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface,
162 OnAcceleratedSurfaceSetIOSurface)
163 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped,
164 OnAcceleratedSurfaceBuffersSwapped)
165 #elif defined(OS_WIN)
166 IPC_MESSAGE_HANDLER(GpuHostMsg_ScheduleComposite, OnScheduleComposite);
167 #endif
168 IPC_MESSAGE_UNHANDLED_ERROR()
169 IPC_END_MESSAGE_MAP()
170
171 return true;
172 }
173
123 namespace { 174 namespace {
124 175
125 void SendDelayedReply(IPC::Message* reply_msg) { 176 void SendDelayedReply(IPC::Message* reply_msg) {
126 BrowserThread::PostTask( 177 BrowserThread::PostTask(
127 BrowserThread::IO, 178 BrowserThread::IO,
128 FROM_HERE, 179 FROM_HERE,
129 new SendOnIOThreadTask(reply_msg)); 180 new SendOnIOThreadTask(reply_msg));
130 } 181 }
131 182
132 } // namespace 183 } // namespace
133 184
134 #if defined(OS_LINUX) 185 #if defined(OS_LINUX)
135 186
136 void GpuProcessHostUIShim::OnGetViewXID(gfx::NativeViewId id,
137 IPC::Message* reply_msg) {
138 XID xid;
139
140 GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance();
141 if (!manager->GetPermanentXIDForId(&xid, id)) {
142 DLOG(ERROR) << "Can't find XID for view id " << id;
143 xid = 0;
144 }
145
146 GpuHostMsg_GetViewXID::WriteReplyParams(reply_msg, xid);
147 SendDelayedReply(reply_msg);
148 }
149
150 void GpuProcessHostUIShim::OnReleaseXID(unsigned long xid) {
151 GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance();
152 manager->ReleasePermanentXID(xid);
153 }
154
155 void GpuProcessHostUIShim::OnResizeXID(unsigned long xid, gfx::Size size, 187 void GpuProcessHostUIShim::OnResizeXID(unsigned long xid, gfx::Size size,
156 IPC::Message *reply_msg) { 188 IPC::Message *reply_msg) {
157 GdkWindow* window = reinterpret_cast<GdkWindow*>(gdk_xid_table_lookup(xid)); 189 GdkWindow* window = reinterpret_cast<GdkWindow*>(gdk_xid_table_lookup(xid));
158 if (window) { 190 if (window) {
159 Display* display = GDK_WINDOW_XDISPLAY(window); 191 Display* display = GDK_WINDOW_XDISPLAY(window);
160 gdk_window_resize(window, size.width(), size.height()); 192 gdk_window_resize(window, size.width(), size.height());
161 XSync(display, False); 193 XSync(display, False);
162 } 194 }
163 195
164 GpuHostMsg_ResizeXID::WriteReplyParams(reply_msg, (window != NULL)); 196 GpuHostMsg_ResizeXID::WriteReplyParams(reply_msg, (window != NULL));
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 params.window, 228 params.window,
197 params.surface_id, 229 params.surface_id,
198 // Parameters needed to formulate an acknowledgment. 230 // Parameters needed to formulate an acknowledgment.
199 params.renderer_id, 231 params.renderer_id,
200 params.route_id, 232 params.route_id,
201 params.swap_buffers_count); 233 params.swap_buffers_count);
202 } 234 }
203 235
204 #elif defined(OS_WIN) 236 #elif defined(OS_WIN)
205 237
206 void GpuProcessHostUIShim::OnGetCompositorHostWindow(
207 int renderer_id,
208 int render_view_id,
209 IPC::Message* reply_msg) {
210 RenderViewHost* host = RenderViewHost::FromID(renderer_id,
211 render_view_id);
212 if (!host) {
213 GpuHostMsg_GetCompositorHostWindow::WriteReplyParams(reply_msg,
214 gfx::kNullPluginWindow);
215 SendDelayedReply(reply_msg);
216 return;
217 }
218
219 RenderWidgetHostView* view = host->view();
220 gfx::PluginWindowHandle id = view->GetCompositorHostWindow();
221
222 GpuHostMsg_GetCompositorHostWindow::WriteReplyParams(reply_msg, id);
223 SendDelayedReply(reply_msg);
224 }
225
226 void GpuProcessHostUIShim::OnScheduleComposite(int renderer_id, 238 void GpuProcessHostUIShim::OnScheduleComposite(int renderer_id,
227 int render_view_id) { 239 int render_view_id) {
228 RenderViewHost* host = RenderViewHost::FromID(renderer_id, 240 RenderViewHost* host = RenderViewHost::FromID(renderer_id,
229 render_view_id); 241 render_view_id);
230 if (!host) { 242 if (!host) {
231 return; 243 return;
232 } 244 }
233 host->ScheduleComposite(); 245 host->ScheduleComposite();
234 } 246 }
247
235 #endif 248 #endif
236
237 bool GpuProcessHostUIShim::OnControlMessageReceived(
238 const IPC::Message& message) {
239 DCHECK(CalledOnValidThread());
240
241 IPC_BEGIN_MESSAGE_MAP(GpuProcessHostUIShim, message)
242 IPC_MESSAGE_HANDLER(GpuHostMsg_GraphicsInfoCollected,
243 OnGraphicsInfoCollected)
244 #if defined(OS_LINUX)
245 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_GetViewXID, OnGetViewXID)
246 IPC_MESSAGE_HANDLER(GpuHostMsg_ReleaseXID, OnReleaseXID)
247 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_ResizeXID, OnResizeXID)
248 #elif defined(OS_MACOSX)
249 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceSetIOSurface,
250 OnAcceleratedSurfaceSetIOSurface)
251 IPC_MESSAGE_HANDLER(GpuHostMsg_AcceleratedSurfaceBuffersSwapped,
252 OnAcceleratedSurfaceBuffersSwapped)
253 #elif defined(OS_WIN)
254 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuHostMsg_GetCompositorHostWindow,
255 OnGetCompositorHostWindow)
256 IPC_MESSAGE_HANDLER(GpuHostMsg_ScheduleComposite, OnScheduleComposite);
257 #endif
258 IPC_MESSAGE_UNHANDLED_ERROR()
259 IPC_END_MESSAGE_MAP()
260
261 return true;
262 }
OLDNEW
« no previous file with comments | « chrome/browser/gpu_process_host_ui_shim.h ('k') | chrome/browser/renderer_host/render_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698