summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/gpu')
-rw-r--r--chrome/browser/gpu/gl_string_manager.cc65
-rw-r--r--chrome/browser/gpu/gl_string_manager.h36
2 files changed, 101 insertions, 0 deletions
diff --git a/chrome/browser/gpu/gl_string_manager.cc b/chrome/browser/gpu/gl_string_manager.cc
new file mode 100644
index 0000000..7cc8bc6
--- /dev/null
+++ b/chrome/browser/gpu/gl_string_manager.cc
@@ -0,0 +1,65 @@
+// 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 "chrome/browser/gpu/gl_string_manager.h"
+
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/common/pref_names.h"
+#include "content/public/browser/gpu_data_manager.h"
+
+GLStringManager::GLStringManager() {
+}
+
+GLStringManager::~GLStringManager() {
+}
+
+void GLStringManager::Initialize() {
+ // On MacOSX or Windows, preliminary GPUInfo is enough.
+#if defined(OS_LINUX)
+ // We never remove this observer from GpuDataManager.
+ content::GpuDataManager::GetInstance()->AddObserver(this);
+
+ PrefService* local_state = g_browser_process->local_state();
+ if (!local_state)
+ return;
+
+ local_state->RegisterStringPref(prefs::kGLVendorString, gl_vendor_);
+ local_state->RegisterStringPref(prefs::kGLRendererString, gl_renderer_);
+ local_state->RegisterStringPref(prefs::kGLVersionString, gl_version_);
+
+ gl_vendor_ = local_state->GetString(prefs::kGLVendorString);
+ gl_renderer_ = local_state->GetString(prefs::kGLRendererString);
+ gl_version_ = local_state->GetString(prefs::kGLVersionString);
+
+ if (!gl_vendor_.empty() || !gl_renderer_.empty() || !gl_version_.empty()) {
+ content::GpuDataManager::GetInstance()->SetGLStrings(
+ gl_vendor_, gl_renderer_, gl_version_);
+ }
+#endif
+}
+
+void GLStringManager::OnGpuInfoUpdate() {
+ std::string gl_vendor, gl_renderer, gl_version;
+ content::GpuDataManager::GetInstance()->GetGLStrings(
+ &gl_vendor, &gl_renderer, &gl_version);
+
+ PrefService* local_state = g_browser_process->local_state();
+ if (!local_state)
+ return;
+
+ if (!gl_vendor.empty() && gl_vendor != gl_vendor_) {
+ gl_vendor_ = gl_vendor;
+ local_state->SetString(prefs::kGLVendorString, gl_vendor_);
+ }
+ if (!gl_renderer.empty() && gl_renderer != gl_renderer_) {
+ gl_renderer_ = gl_renderer;
+ local_state->SetString(prefs::kGLRendererString, gl_renderer_);
+ }
+ if (!gl_version.empty() && gl_version != gl_version_) {
+ gl_version_ = gl_version;
+ local_state->SetString(prefs::kGLVersionString, gl_version_);
+ }
+}
+
diff --git a/chrome/browser/gpu/gl_string_manager.h b/chrome/browser/gpu/gl_string_manager.h
new file mode 100644
index 0000000..bf3b499
--- /dev/null
+++ b/chrome/browser/gpu/gl_string_manager.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef CHROME_BROWSER_GPU_GL_STRING_MANAGER_H_
+#define CHROME_BROWSER_GPU_GL_STRING_MANAGER_H_
+
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "content/public/browser/gpu_data_manager_observer.h"
+
+class GLStringManager : public content::GpuDataManagerObserver {
+ public:
+ GLStringManager();
+ virtual ~GLStringManager();
+
+ // Get cached GL strings in local state and send them to GpuDataManager.
+ void Initialize();
+
+ // content::GpuDataManagerObserver
+ virtual void OnGpuInfoUpdate() OVERRIDE;
+ virtual void OnVideoMemoryUsageStatsUpdate(
+ const content::GPUVideoMemoryUsageStats& video_memory_usage_stats)
+ OVERRIDE {}
+
+ private:
+ std::string gl_vendor_;
+ std::string gl_renderer_;
+ std::string gl_version_;
+
+ DISALLOW_COPY_AND_ASSIGN(GLStringManager);
+};
+
+#endif // CHROME_BROWSER_GPU_GL_STRING_MANAGER_H_
+