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

Unified Diff: content/browser/gpu/gpu_surface_tracker.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/gpu/gpu_surface_tracker.cc
diff --git a/content/browser/gpu/gpu_surface_tracker.cc b/content/browser/gpu/gpu_surface_tracker.cc
new file mode 100644
index 0000000000000000000000000000000000000000..280f48f9b6dba7418a8c2c7a1897f39c79d94e06
--- /dev/null
+++ b/content/browser/gpu/gpu_surface_tracker.cc
@@ -0,0 +1,75 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/gpu/gpu_surface_tracker.h"
+
+#include "base/logging.h"
+
+GpuSurfaceTracker::GpuSurfaceTracker()
+ : next_surface_id_(1) {
+}
+
+GpuSurfaceTracker::~GpuSurfaceTracker() {
+}
+
+GpuSurfaceTracker* GpuSurfaceTracker::GetInstance() {
+ return Singleton<GpuSurfaceTracker>::get();
+}
+
+int GpuSurfaceTracker::AddSurfaceForRenderer(int renderer_id,
+ int render_widget_id) {
+ base::AutoLock lock(lock_);
+ SurfaceInfo info = { renderer_id, render_widget_id, gfx::kNullPluginWindow };
+ int surface_id = next_surface_id_++;
+ surface_map_[surface_id] = info;
+ return surface_id;
+}
+
+int GpuSurfaceTracker::LookupSurfaceForRenderer(int renderer_id,
+ int render_widget_id) {
+ base::AutoLock lock(lock_);
+ for (SurfaceMap::iterator it = surface_map_.begin(); it != surface_map_.end();
+ ++it) {
+ const SurfaceInfo& info = it->second;
+ if (info.renderer_id == renderer_id &&
+ info.render_widget_id == render_widget_id) {
+ return it->first;
+ }
+ }
+ return 0;
+}
+
+void GpuSurfaceTracker::RemoveSurface(int surface_id) {
+ base::AutoLock lock(lock_);
+ DCHECK(surface_map_.find(surface_id) != surface_map_.end());
+ surface_map_.erase(surface_id);
+}
+
+bool GpuSurfaceTracker::GetRenderWidgetIDForSurface(int surface_id,
+ int* renderer_id,
+ int* render_widget_id) {
+ base::AutoLock lock(lock_);
+ SurfaceMap::iterator it = surface_map_.find(surface_id);
+ if (it == surface_map_.end())
+ return false;
+ const SurfaceInfo& info = it->second;
+ *renderer_id = info.renderer_id;
+ *render_widget_id = info.render_widget_id;
+ return true;
+}
+
+void GpuSurfaceTracker::SetSurfaceHandle(int surface_id,
+ gfx::PluginWindowHandle handle) {
+ base::AutoLock lock(lock_);
+ DCHECK(surface_map_.find(surface_id) != surface_map_.end());
+ SurfaceInfo& info = surface_map_[surface_id];
+ info.handle = handle;
+}
+
+gfx::PluginWindowHandle GpuSurfaceTracker::GetSurfaceHandle(int surface_id) {
+ base::AutoLock lock(lock_);
+ DCHECK(surface_map_.find(surface_id) != surface_map_.end());
+ return surface_map_[surface_id].handle;
+}
+
« no previous file with comments | « content/browser/gpu/gpu_surface_tracker.h ('k') | content/browser/renderer_host/accelerated_surface_container_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698