diff options
Diffstat (limited to 'chrome/browser/gpu')
-rw-r--r-- | chrome/browser/gpu/gl_string_manager.cc | 65 | ||||
-rw-r--r-- | chrome/browser/gpu/gl_string_manager.h | 36 |
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_ + |