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

Side by Side Diff: content/browser/renderer_host/render_widget_helper.cc

Issue 9194005: gpu: reference target surfaces through a globally unique surface id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix more tests Created 8 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "content/browser/renderer_host/render_widget_helper.h" 5 #include "content/browser/renderer_host/render_widget_helper.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/eintr_wrapper.h" 9 #include "base/eintr_wrapper.h"
10 #include "base/threading/thread.h" 10 #include "base/threading/thread.h"
11 #include "content/browser/gpu/gpu_surface_tracker.h"
11 #include "content/browser/renderer_host/render_process_host_impl.h" 12 #include "content/browser/renderer_host/render_process_host_impl.h"
12 #include "content/browser/renderer_host/render_view_host.h" 13 #include "content/browser/renderer_host/render_view_host.h"
13 #include "content/browser/renderer_host/resource_dispatcher_host.h" 14 #include "content/browser/renderer_host/resource_dispatcher_host.h"
14 #include "content/common/view_messages.h" 15 #include "content/common/view_messages.h"
15 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
16 17
17 using content::BrowserThread; 18 using content::BrowserThread;
18 19
19 // A helper used with DidReceiveUpdateMsg that we hold a pointer to in 20 // A helper used with DidReceiveUpdateMsg that we hold a pointer to in
20 // pending_paints_. 21 // pending_paints_.
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } 206 }
206 207
207 void RenderWidgetHelper::OnCrossSiteSwapOutACK( 208 void RenderWidgetHelper::OnCrossSiteSwapOutACK(
208 const ViewMsg_SwapOut_Params& params) { 209 const ViewMsg_SwapOut_Params& params) {
209 resource_dispatcher_host_->OnSwapOutACK(params); 210 resource_dispatcher_host_->OnSwapOutACK(params);
210 } 211 }
211 212
212 void RenderWidgetHelper::CreateNewWindow( 213 void RenderWidgetHelper::CreateNewWindow(
213 const ViewHostMsg_CreateWindow_Params& params, 214 const ViewHostMsg_CreateWindow_Params& params,
214 base::ProcessHandle render_process, 215 base::ProcessHandle render_process,
215 int* route_id) { 216 int* route_id,
217 int* surface_id) {
216 *route_id = GetNextRoutingID(); 218 *route_id = GetNextRoutingID();
219 *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
220 render_process_id_, *route_id);
217 // Block resource requests until the view is created, since the HWND might be 221 // Block resource requests until the view is created, since the HWND might be
218 // needed if a response ends up creating a plugin. 222 // needed if a response ends up creating a plugin.
219 resource_dispatcher_host_->BlockRequestsForRoute( 223 resource_dispatcher_host_->BlockRequestsForRoute(
220 render_process_id_, *route_id); 224 render_process_id_, *route_id);
221 225
222 BrowserThread::PostTask( 226 BrowserThread::PostTask(
223 BrowserThread::UI, FROM_HERE, 227 BrowserThread::UI, FROM_HERE,
224 base::Bind( 228 base::Bind(&RenderWidgetHelper::OnCreateWindowOnUI,
225 &RenderWidgetHelper::OnCreateWindowOnUI, this, params, *route_id)); 229 this, params, *route_id));
226 } 230 }
227 231
228 void RenderWidgetHelper::OnCreateWindowOnUI( 232 void RenderWidgetHelper::OnCreateWindowOnUI(
229 const ViewHostMsg_CreateWindow_Params& params, 233 const ViewHostMsg_CreateWindow_Params& params,
230 int route_id) { 234 int route_id) {
231 RenderViewHost* host = 235 RenderViewHost* host =
232 RenderViewHost::FromID(render_process_id_, params.opener_id); 236 RenderViewHost::FromID(render_process_id_, params.opener_id);
233 if (host) 237 if (host)
234 host->CreateNewWindow(route_id, params); 238 host->CreateNewWindow(route_id, params);
235 239
236 BrowserThread::PostTask( 240 BrowserThread::PostTask(
237 BrowserThread::IO, FROM_HERE, 241 BrowserThread::IO, FROM_HERE,
238 base::Bind(&RenderWidgetHelper::OnCreateWindowOnIO, this, route_id)); 242 base::Bind(&RenderWidgetHelper::OnCreateWindowOnIO, this, route_id));
239 } 243 }
240 244
241 void RenderWidgetHelper::OnCreateWindowOnIO(int route_id) { 245 void RenderWidgetHelper::OnCreateWindowOnIO(int route_id) {
242 resource_dispatcher_host_->ResumeBlockedRequestsForRoute( 246 resource_dispatcher_host_->ResumeBlockedRequestsForRoute(
243 render_process_id_, route_id); 247 render_process_id_, route_id);
244 } 248 }
245 249
246 void RenderWidgetHelper::CreateNewWidget(int opener_id, 250 void RenderWidgetHelper::CreateNewWidget(int opener_id,
247 WebKit::WebPopupType popup_type, 251 WebKit::WebPopupType popup_type,
248 int* route_id) { 252 int* route_id,
253 int* surface_id) {
249 *route_id = GetNextRoutingID(); 254 *route_id = GetNextRoutingID();
255 *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
256 render_process_id_, *route_id);
250 BrowserThread::PostTask( 257 BrowserThread::PostTask(
251 BrowserThread::UI, FROM_HERE, 258 BrowserThread::UI, FROM_HERE,
252 base::Bind( 259 base::Bind(
253 &RenderWidgetHelper::OnCreateWidgetOnUI, this, opener_id, *route_id, 260 &RenderWidgetHelper::OnCreateWidgetOnUI, this, opener_id, *route_id,
254 popup_type)); 261 popup_type));
255 } 262 }
256 263
257 void RenderWidgetHelper::CreateNewFullscreenWidget(int opener_id, 264 void RenderWidgetHelper::CreateNewFullscreenWidget(int opener_id,
258 int* route_id) { 265 int* route_id,
266 int* surface_id) {
259 *route_id = GetNextRoutingID(); 267 *route_id = GetNextRoutingID();
268 *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
269 render_process_id_, *route_id);
260 BrowserThread::PostTask( 270 BrowserThread::PostTask(
261 BrowserThread::UI, FROM_HERE, 271 BrowserThread::UI, FROM_HERE,
262 base::Bind( 272 base::Bind(
263 &RenderWidgetHelper::OnCreateFullscreenWidgetOnUI, this, 273 &RenderWidgetHelper::OnCreateFullscreenWidgetOnUI, this,
264 opener_id, *route_id)); 274 opener_id, *route_id));
265 } 275 }
266 276
267 void RenderWidgetHelper::OnCreateWidgetOnUI( 277 void RenderWidgetHelper::OnCreateWidgetOnUI(
268 int opener_id, int route_id, WebKit::WebPopupType popup_type) { 278 int opener_id, int route_id, WebKit::WebPopupType popup_type) {
269 RenderViewHost* host = RenderViewHost::FromID(render_process_id_, opener_id); 279 RenderViewHost* host = RenderViewHost::FromID(render_process_id_, opener_id);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 void RenderWidgetHelper::ClearAllocatedDIBs() { 337 void RenderWidgetHelper::ClearAllocatedDIBs() {
328 for (std::map<TransportDIB::Id, int>::iterator 338 for (std::map<TransportDIB::Id, int>::iterator
329 i = allocated_dibs_.begin(); i != allocated_dibs_.end(); ++i) { 339 i = allocated_dibs_.begin(); i != allocated_dibs_.end(); ++i) {
330 if (HANDLE_EINTR(close(i->second)) < 0) 340 if (HANDLE_EINTR(close(i->second)) < 0)
331 PLOG(ERROR) << "close: " << i->first; 341 PLOG(ERROR) << "close: " << i->first;
332 } 342 }
333 343
334 allocated_dibs_.clear(); 344 allocated_dibs_.clear();
335 } 345 }
336 #endif 346 #endif
337
338 void RenderWidgetHelper::SetCompositingSurface(
339 int render_widget_id,
340 gfx::PluginWindowHandle compositing_surface) {
341 base::AutoLock locked(view_compositing_surface_map_lock_);
342 if (compositing_surface != gfx::kNullPluginWindow)
343 view_compositing_surface_map_[render_widget_id] = compositing_surface;
344 else
345 view_compositing_surface_map_.erase(render_widget_id);
346 }
347
348 gfx::PluginWindowHandle RenderWidgetHelper::LookupCompositingSurface(
349 int render_widget_id) {
350 base::AutoLock locked(view_compositing_surface_map_lock_);
351 ViewCompositingSurfaceMap::iterator it =
352 view_compositing_surface_map_.find(render_widget_id);
353 if (it == view_compositing_surface_map_.end())
354 return gfx::kNullPluginWindow;
355
356 return it->second;
357 }
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_helper.h ('k') | content/browser/renderer_host/render_widget_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698