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

Unified Diff: content/browser/renderer_host/render_widget_host.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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host.cc
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc
index 786aeefcfa031d3faa1b8ef822d03605ff365bd0..38f81153ccc981d2af9676192c33a7cd9f880602 100644
--- a/content/browser/renderer_host/render_widget_host.cc
+++ b/content/browser/renderer_host/render_widget_host.cc
@@ -16,6 +16,7 @@
#include "content/browser/accessibility/browser_accessibility_state.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/gpu/gpu_process_host_ui_shim.h"
+#include "content/browser/gpu/gpu_surface_tracker.h"
#include "content/browser/renderer_host/backing_store.h"
#include "content/browser/renderer_host/backing_store_manager.h"
#include "content/browser/renderer_host/render_process_host_impl.h"
@@ -80,6 +81,7 @@ RenderWidgetHost::RenderWidgetHost(content::RenderProcessHost* process,
view_(NULL),
process_(process),
routing_id_(routing_id),
+ surface_id_(0),
is_loading_(false),
is_hidden_(false),
is_accelerated_compositing_active_(false),
@@ -101,8 +103,24 @@ RenderWidgetHost::RenderWidgetHost(content::RenderProcessHost* process,
suppress_next_char_events_(false),
pending_mouse_lock_request_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
- if (routing_id_ == MSG_ROUTING_NONE)
+ if (routing_id_ == MSG_ROUTING_NONE) {
routing_id_ = process_->GetNextRoutingID();
+ surface_id_ = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
+ process_->GetID(),
+ routing_id_);
+ } else {
+ // TODO(piman): This is a O(N) lookup, where we could forward the
+ // information from the RenderWidgetHelper. The problem is that doing so
+ // currently leaks outside of content all the way to chrome classes, and
+ // would be a layering violation. Since we don't expect more than a few
+ // hundreds of RWH, this seems acceptable. Revisit if performance become a
+ // problem, for example by tracking in the RenderWidgetHelper the routing id
+ // (and surface id) that have been created, but whose RWH haven't yet.
+ surface_id_ = GpuSurfaceTracker::Get()->LookupSurfaceForRenderer(
+ process_->GetID(),
+ routing_id_);
+ DCHECK(surface_id_);
+ }
process_->Attach(this, routing_id_);
// Because the widget initializes as is_hidden_ == false,
@@ -126,14 +144,19 @@ RenderWidgetHost::~RenderWidgetHost() {
// Clear our current or cached backing store if either remains.
BackingStoreManager::RemoveBackingStore(this);
+ GpuSurfaceTracker::Get()->RemoveSurface(surface_id_);
+ surface_id_ = 0;
+
process_->Release(routing_id_);
}
void RenderWidgetHost::SetView(RenderWidgetHostView* view) {
view_ = view;
- if (!view_)
- process_->SetCompositingSurface(routing_id_, gfx::kNullPluginWindow);
+ if (!view_) {
+ GpuSurfaceTracker::Get()->SetSurfaceHandle(
+ surface_id_, gfx::kNullPluginWindow);
+ }
}
gfx::NativeViewId RenderWidgetHost::GetNativeViewId() const {
@@ -159,8 +182,8 @@ void RenderWidgetHost::Init() {
renderer_initialized_ = true;
- process_->SetCompositingSurface(routing_id_,
- GetCompositingSurface());
+ GpuSurfaceTracker::Get()->SetSurfaceHandle(
+ surface_id_, GetCompositingSurface());
// Send the ack along with the information on placement.
Send(new ViewMsg_CreatingNew_ACK(routing_id_, GetNativeViewId()));
« no previous file with comments | « content/browser/renderer_host/render_widget_host.h ('k') | content/browser/renderer_host/render_widget_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698