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

Unified Diff: content/browser/gpu/gpu_data_manager_impl_private.cc

Issue 14794006: Refactor GpuDataManagerImpl to make it thread-safe, now and forever. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 7 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_data_manager_impl_private.cc
===================================================================
--- content/browser/gpu/gpu_data_manager_impl_private.cc (revision 199087)
+++ content/browser/gpu/gpu_data_manager_impl_private.cc (working copy)
@@ -1,8 +1,8 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2013 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_data_manager_impl.h"
+#include "content/browser/gpu/gpu_data_manager_impl_private.h"
#if defined(OS_MACOSX)
#include <ApplicationServices/ApplicationServices.h>
@@ -19,7 +19,6 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_piece.h"
#include "base/sys_info.h"
-#include "base/values.h"
#include "base/version.h"
#include "content/browser/gpu/gpu_process_host.h"
#include "content/browser/gpu/gpu_util.h"
@@ -102,17 +101,7 @@
} // namespace anonymous
-// static
-GpuDataManager* GpuDataManager::GetInstance() {
- return GpuDataManagerImpl::GetInstance();
-}
-
-// static
-GpuDataManagerImpl* GpuDataManagerImpl::GetInstance() {
- return Singleton<GpuDataManagerImpl>::get();
-}
-
-void GpuDataManagerImpl::InitializeForTesting(
+void GpuDataManagerImplPrivate::InitializeForTesting(
const std::string& gpu_blacklist_json,
const GPUInfo& gpu_info) {
// This function is for testing only, so disable histograms.
@@ -121,7 +110,7 @@
InitializeImpl(gpu_blacklist_json, std::string(), std::string(), gpu_info);
}
-bool GpuDataManagerImpl::IsFeatureBlacklisted(int feature) const {
+bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const {
if (use_swiftshader_) {
// Skia's software rendering is probably more efficient than going through
// software emulation of the GPU, so use that.
@@ -133,42 +122,23 @@
return (blacklisted_features_.count(feature) == 1);
}
-size_t GpuDataManagerImpl::GetBlacklistedFeatureCount() const {
+size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const {
if (use_swiftshader_)
return 1;
return blacklisted_features_.size();
}
-void GpuDataManagerImpl::AddGpuSwitchCallback(
- const GpuSwitchCallback& callback) {
- gpu_switch_callbacks_.push_back(callback);
+GPUInfo GpuDataManagerImplPrivate::GetGPUInfo() const {
+ return gpu_info_;
}
-void GpuDataManagerImpl::RemoveGpuSwitchCallback(
- const GpuSwitchCallback& callback) {
- for (size_t i = 0; i < gpu_switch_callbacks_.size(); i++) {
- if (gpu_switch_callbacks_[i].Equals(callback)) {
- gpu_switch_callbacks_.erase(gpu_switch_callbacks_.begin() + i);
- return;
- }
- }
-}
-
-GPUInfo GpuDataManagerImpl::GetGPUInfo() const {
- GPUInfo gpu_info;
- {
- base::AutoLock auto_lock(gpu_info_lock_);
- gpu_info = gpu_info_;
- }
- return gpu_info;
-}
-
-void GpuDataManagerImpl::GetGpuProcessHandles(
- const GetGpuProcessHandlesCallback& callback) const {
+void GpuDataManagerImplPrivate::GetGpuProcessHandles(
+ const GpuDataManager::GetGpuProcessHandlesCallback& callback) const {
GpuProcessHost::GetProcessHandles(callback);
}
-bool GpuDataManagerImpl::GpuAccessAllowed(std::string* reason) const {
+bool GpuDataManagerImplPrivate::GpuAccessAllowed(
+ std::string* reason) const {
if (use_swiftshader_)
return true;
@@ -220,7 +190,7 @@
return true;
}
-void GpuDataManagerImpl::RequestCompleteGpuInfoIfNeeded() {
+void GpuDataManagerImplPrivate::RequestCompleteGpuInfoIfNeeded() {
if (complete_gpu_info_already_requested_ || gpu_info_.finalized)
return;
complete_gpu_info_already_requested_ = true;
@@ -235,35 +205,39 @@
new GpuMsg_CollectGraphicsInfo());
}
-bool GpuDataManagerImpl::IsCompleteGpuInfoAvailable() const {
+bool GpuDataManagerImplPrivate::IsCompleteGpuInfoAvailable() const {
return gpu_info_.finalized;
}
-void GpuDataManagerImpl::RequestVideoMemoryUsageStatsUpdate() const {
+void GpuDataManagerImplPrivate::RequestVideoMemoryUsageStatsUpdate() const {
GpuProcessHost::SendOnIO(
GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED,
CAUSE_FOR_GPU_LAUNCH_NO_LAUNCH,
new GpuMsg_GetVideoMemoryUsageStats());
}
-bool GpuDataManagerImpl::ShouldUseSwiftShader() const {
+bool GpuDataManagerImplPrivate::ShouldUseSwiftShader() const {
return use_swiftshader_;
}
-void GpuDataManagerImpl::RegisterSwiftShaderPath(const base::FilePath& path) {
+void GpuDataManagerImplPrivate::RegisterSwiftShaderPath(
+ const base::FilePath& path) {
swiftshader_path_ = path;
EnableSwiftShaderIfNecessary();
}
-void GpuDataManagerImpl::AddObserver(GpuDataManagerObserver* observer) {
+void GpuDataManagerImplPrivate::AddObserver(GpuDataManagerObserver* observer) {
+ GpuDataManagerImpl::UnlockedSession session(owner_);
observer_list_->AddObserver(observer);
}
-void GpuDataManagerImpl::RemoveObserver(GpuDataManagerObserver* observer) {
+void GpuDataManagerImplPrivate::RemoveObserver(
+ GpuDataManagerObserver* observer) {
+ GpuDataManagerImpl::UnlockedSession session(owner_);
observer_list_->RemoveObserver(observer);
}
-void GpuDataManagerImpl::UnblockDomainFrom3DAPIs(const GURL& url) {
+void GpuDataManagerImplPrivate::UnblockDomainFrom3DAPIs(const GURL& url) {
// This method must do two things:
//
// 1. If the specific domain is blocked, then unblock it.
@@ -278,36 +252,32 @@
// will become difficult to explain.
std::string domain = GetDomainFromURL(url);
- base::AutoLock auto_lock(gpu_info_lock_);
blocked_domains_.erase(domain);
timestamps_of_gpu_resets_.clear();
}
-void GpuDataManagerImpl::DisableGpuWatchdog() {
+void GpuDataManagerImplPrivate::DisableGpuWatchdog() {
GpuProcessHost::SendOnIO(
GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED,
CAUSE_FOR_GPU_LAUNCH_NO_LAUNCH,
new GpuMsg_DisableWatchdog);
}
-void GpuDataManagerImpl::SetGLStrings(const std::string& gl_vendor,
- const std::string& gl_renderer,
- const std::string& gl_version) {
+void GpuDataManagerImplPrivate::SetGLStrings(const std::string& gl_vendor,
+ const std::string& gl_renderer,
+ const std::string& gl_version) {
if (gl_vendor.empty() && gl_renderer.empty() && gl_version.empty())
return;
- GPUInfo gpu_info;
- {
- base::AutoLock auto_lock(gpu_info_lock_);
- // If GPUInfo already got GL strings, do nothing. This is for the rare
- // situation where GPU process collected GL strings before this call.
- if (!gpu_info_.gl_vendor.empty() ||
- !gpu_info_.gl_renderer.empty() ||
- !gpu_info_.gl_version_string.empty())
- return;
- gpu_info = gpu_info_;
- }
+ // If GPUInfo already got GL strings, do nothing. This is for the rare
+ // situation where GPU process collected GL strings before this call.
+ if (!gpu_info_.gl_vendor.empty() ||
+ !gpu_info_.gl_renderer.empty() ||
+ !gpu_info_.gl_version_string.empty())
+ return;
+ GPUInfo gpu_info = gpu_info_;
+
gpu_info.gl_vendor = gl_vendor;
gpu_info.gl_renderer = gl_renderer;
gpu_info.gl_version_string = gl_version;
@@ -319,19 +289,17 @@
UpdatePreliminaryBlacklistedFeatures();
}
-void GpuDataManagerImpl::GetGLStrings(std::string* gl_vendor,
- std::string* gl_renderer,
- std::string* gl_version) {
+void GpuDataManagerImplPrivate::GetGLStrings(std::string* gl_vendor,
+ std::string* gl_renderer,
+ std::string* gl_version) {
DCHECK(gl_vendor && gl_renderer && gl_version);
- base::AutoLock auto_lock(gpu_info_lock_);
*gl_vendor = gpu_info_.gl_vendor;
*gl_renderer = gpu_info_.gl_renderer;
*gl_version = gpu_info_.gl_version_string;
}
-
-void GpuDataManagerImpl::Initialize() {
+void GpuDataManagerImplPrivate::Initialize() {
TRACE_EVENT0("startup", "GpuDataManagerImpl::Initialize");
CommandLine* command_line = CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kSkipGpuDataLoading))
@@ -383,25 +351,20 @@
}
}
-void GpuDataManagerImpl::UpdateGpuInfo(const GPUInfo& gpu_info) {
+void GpuDataManagerImplPrivate::UpdateGpuInfo(const GPUInfo& gpu_info) {
// No further update of gpu_info if falling back to SwiftShader.
if (use_swiftshader_)
return;
- GPUInfo my_gpu_info;
- {
- base::AutoLock auto_lock(gpu_info_lock_);
- gpu_info_collector::MergeGPUInfo(&gpu_info_, gpu_info);
- complete_gpu_info_already_requested_ =
- complete_gpu_info_already_requested_ || gpu_info_.finalized;
- my_gpu_info = gpu_info_;
- }
+ gpu_info_collector::MergeGPUInfo(&gpu_info_, gpu_info);
+ complete_gpu_info_already_requested_ =
+ complete_gpu_info_already_requested_ || gpu_info_.finalized;
- GetContentClient()->SetGpuInfo(my_gpu_info);
+ GetContentClient()->SetGpuInfo(gpu_info_);
if (gpu_blacklist_) {
std::set<int> features = gpu_blacklist_->MakeDecision(
- GpuControlList::kOsAny, std::string(), my_gpu_info);
+ GpuControlList::kOsAny, std::string(), gpu_info_);
if (update_histograms_)
UpdateStats(gpu_blacklist_.get(), features);
@@ -409,7 +372,7 @@
}
if (gpu_switching_list_) {
std::set<int> option = gpu_switching_list_->MakeDecision(
- GpuControlList::kOsAny, std::string(), my_gpu_info);
+ GpuControlList::kOsAny, std::string(), gpu_info_);
if (option.size() == 1) {
// Blacklist decision should not overwrite commandline switch from users.
CommandLine* command_line = CommandLine::ForCurrentProcess();
@@ -419,19 +382,20 @@
}
if (gpu_driver_bug_list_)
gpu_driver_bugs_ = gpu_driver_bug_list_->MakeDecision(
- GpuControlList::kOsAny, std::string(), my_gpu_info);
+ GpuControlList::kOsAny, std::string(), gpu_info_);
// We have to update GpuFeatureType before notify all the observers.
NotifyGpuInfoUpdate();
}
-void GpuDataManagerImpl::UpdateVideoMemoryUsageStats(
+void GpuDataManagerImplPrivate::UpdateVideoMemoryUsageStats(
const GPUVideoMemoryUsageStats& video_memory_usage_stats) {
+ GpuDataManagerImpl::UnlockedSession session(owner_);
observer_list_->Notify(&GpuDataManagerObserver::OnVideoMemoryUsageStatsUpdate,
video_memory_usage_stats);
}
-void GpuDataManagerImpl::AppendRendererCommandLine(
+void GpuDataManagerImplPrivate::AppendRendererCommandLine(
CommandLine* command_line) const {
DCHECK(command_line);
@@ -459,7 +423,7 @@
command_line->AppendSwitch(switches::kDisableFlashFullscreen3d);
}
-void GpuDataManagerImpl::AppendGpuCommandLine(
+void GpuDataManagerImplPrivate::AppendGpuCommandLine(
CommandLine* command_line) const {
DCHECK(command_line);
@@ -527,32 +491,29 @@
}
#endif
- {
- base::AutoLock auto_lock(gpu_info_lock_);
- if (gpu_info_.optimus)
- command_line->AppendSwitch(switches::kReduceGpuSandbox);
- if (gpu_info_.amd_switchable) {
- // The image transport surface currently doesn't work with AMD Dynamic
- // Switchable graphics.
- command_line->AppendSwitch(switches::kReduceGpuSandbox);
- command_line->AppendSwitch(switches::kDisableImageTransportSurface);
- }
- // Pass GPU and driver information to GPU process. We try to avoid full GPU
- // info collection at GPU process startup, but we need gpu vendor_id,
- // device_id, driver_vendor, driver_version for deciding whether we need to
- // collect full info (on Linux) and for crash reporting purpose.
- command_line->AppendSwitchASCII(switches::kGpuVendorID,
- base::StringPrintf("0x%04x", gpu_info_.gpu.vendor_id));
- command_line->AppendSwitchASCII(switches::kGpuDeviceID,
- base::StringPrintf("0x%04x", gpu_info_.gpu.device_id));
- command_line->AppendSwitchASCII(switches::kGpuDriverVendor,
- gpu_info_.driver_vendor);
- command_line->AppendSwitchASCII(switches::kGpuDriverVersion,
- gpu_info_.driver_version);
+ if (gpu_info_.optimus)
+ command_line->AppendSwitch(switches::kReduceGpuSandbox);
+ if (gpu_info_.amd_switchable) {
+ // The image transport surface currently doesn't work with AMD Dynamic
+ // Switchable graphics.
+ command_line->AppendSwitch(switches::kReduceGpuSandbox);
+ command_line->AppendSwitch(switches::kDisableImageTransportSurface);
}
+ // Pass GPU and driver information to GPU process. We try to avoid full GPU
+ // info collection at GPU process startup, but we need gpu vendor_id,
+ // device_id, driver_vendor, driver_version for deciding whether we need to
+ // collect full info (on Linux) and for crash reporting purpose.
+ command_line->AppendSwitchASCII(switches::kGpuVendorID,
+ base::StringPrintf("0x%04x", gpu_info_.gpu.vendor_id));
+ command_line->AppendSwitchASCII(switches::kGpuDeviceID,
+ base::StringPrintf("0x%04x", gpu_info_.gpu.device_id));
+ command_line->AppendSwitchASCII(switches::kGpuDriverVendor,
+ gpu_info_.driver_vendor);
+ command_line->AppendSwitchASCII(switches::kGpuDriverVersion,
+ gpu_info_.driver_version);
}
-void GpuDataManagerImpl::AppendPluginCommandLine(
+void GpuDataManagerImplPrivate::AppendPluginCommandLine(
CommandLine* command_line) const {
DCHECK(command_line);
@@ -571,7 +532,8 @@
#endif
}
-void GpuDataManagerImpl::UpdateRendererWebPrefs(WebPreferences* prefs) const {
+void GpuDataManagerImplPrivate::UpdateRendererWebPrefs(
+ WebPreferences* prefs) const {
DCHECK(prefs);
if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING))
@@ -607,13 +569,13 @@
}
}
-GpuSwitchingOption GpuDataManagerImpl::GetGpuSwitchingOption() const {
+GpuSwitchingOption GpuDataManagerImplPrivate::GetGpuSwitchingOption() const {
if (!ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus())
return GPU_SWITCHING_OPTION_UNKNOWN;
return gpu_switching_;
}
-void GpuDataManagerImpl::DisableHardwareAcceleration() {
+void GpuDataManagerImplPrivate::DisableHardwareAcceleration() {
card_blacklisted_ = true;
for (int i = 0; i < NUMBER_OF_GPU_FEATURE_TYPES; ++i)
@@ -623,22 +585,21 @@
NotifyGpuInfoUpdate();
}
-std::string GpuDataManagerImpl::GetBlacklistVersion() const {
+std::string GpuDataManagerImplPrivate::GetBlacklistVersion() const {
if (gpu_blacklist_)
return gpu_blacklist_->version();
return "0";
}
-base::ListValue* GpuDataManagerImpl::GetBlacklistReasons() const {
+base::ListValue* GpuDataManagerImplPrivate::GetBlacklistReasons() const {
ListValue* reasons = new ListValue();
if (gpu_blacklist_)
gpu_blacklist_->GetReasons(reasons);
return reasons;
}
-void GpuDataManagerImpl::AddLogMessage(
+void GpuDataManagerImplPrivate::AddLogMessage(
int level, const std::string& header, const std::string& message) {
- base::AutoLock auto_lock(log_messages_lock_);
DictionaryValue* dict = new DictionaryValue();
dict->SetInteger("level", level);
dict->SetString("header", header);
@@ -646,37 +607,41 @@
log_messages_.Append(dict);
}
-void GpuDataManagerImpl::ProcessCrashed(base::TerminationStatus exit_code) {
+void GpuDataManagerImplPrivate::ProcessCrashed(
+ base::TerminationStatus exit_code) {
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(BrowserThread::UI,
- FROM_HERE,
- base::Bind(&GpuDataManagerImpl::ProcessCrashed,
- base::Unretained(this),
- exit_code));
+ if (owner_) {
+ // Unretained is ok, because it's posted to UI thread, the thread
+ // where the singleton GpuDataManagerImpl lives until the end.
+ BrowserThread::PostTask(
+ BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&GpuDataManagerImpl::ProcessCrashed,
+ base::Unretained(owner_),
+ exit_code));
+ }
return;
}
- observer_list_->Notify(&GpuDataManagerObserver::OnGpuProcessCrashed,
- exit_code);
+ {
Ken Russell (switch to Gerrit) 2013/05/10 23:59:19 This is a little hard to read. Instead of the expl
+ GpuDataManagerImpl::UnlockedSession session(owner_);
+ observer_list_->Notify(
+ &GpuDataManagerObserver::OnGpuProcessCrashed, exit_code);
+ }
}
-base::ListValue* GpuDataManagerImpl::GetLogMessages() const {
+base::ListValue* GpuDataManagerImplPrivate::GetLogMessages() const {
base::ListValue* value;
- {
- base::AutoLock auto_lock(log_messages_lock_);
- value = log_messages_.DeepCopy();
- }
+ value = log_messages_.DeepCopy();
return value;
}
-void GpuDataManagerImpl::HandleGpuSwitch() {
- complete_gpu_info_already_requested_ = false;
- gpu_info_.finalized = false;
- for (size_t i = 0; i < gpu_switch_callbacks_.size(); ++i)
- gpu_switch_callbacks_[i].Run();
+void GpuDataManagerImplPrivate::HandleGpuSwitch() {
+ GpuDataManagerImpl::UnlockedSession session(owner_);
+ observer_list_->Notify(&GpuDataManagerObserver::OnGpuSwitching);
}
#if defined(OS_WIN)
-bool GpuDataManagerImpl::IsUsingAcceleratedSurface() const {
+bool GpuDataManagerImplPrivate::IsUsingAcceleratedSurface() const {
if (base::win::GetVersion() < base::win::VERSION_VISTA)
return false;
@@ -691,33 +656,43 @@
}
#endif
-void GpuDataManagerImpl::BlockDomainFrom3DAPIs(
- const GURL& url, DomainGuilt guilt) {
+void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs(
+ const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) {
BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now());
}
-bool GpuDataManagerImpl::Are3DAPIsBlocked(const GURL& url,
- int render_process_id,
- int render_view_id,
- ThreeDAPIType requester) {
+bool GpuDataManagerImplPrivate::Are3DAPIsBlocked(const GURL& url,
+ int render_process_id,
+ int render_view_id,
+ ThreeDAPIType requester) {
bool blocked = Are3DAPIsBlockedAtTime(url, base::Time::Now()) !=
GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED;
- if (blocked) {
+ if (blocked && owner_) {
+ // Unretained is ok, because it's posted to UI thread, the thread
+ // where the singleton GpuDataManagerImpl lives until the end.
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&GpuDataManagerImpl::Notify3DAPIBlocked,
- base::Unretained(this), url, render_process_id,
+ base::Unretained(owner_), url, render_process_id,
render_view_id, requester));
}
return blocked;
}
-void GpuDataManagerImpl::DisableDomainBlockingFor3DAPIsForTesting() {
+void GpuDataManagerImplPrivate::DisableDomainBlockingFor3DAPIsForTesting() {
domain_blocking_enabled_ = false;
}
-GpuDataManagerImpl::GpuDataManagerImpl()
+// static
+GpuDataManagerImplPrivate* GpuDataManagerImplPrivate::Create(
+ GpuDataManagerImpl* owner) {
+ GpuDataManagerImplPrivate* rt = new GpuDataManagerImplPrivate();
+ rt->owner_ = owner;
+ return rt;
+}
+
+GpuDataManagerImplPrivate::GpuDataManagerImplPrivate()
: complete_gpu_info_already_requested_(false),
gpu_switching_(GPU_SWITCHING_OPTION_AUTOMATIC),
observer_list_(new GpuDataManagerObserverList),
@@ -725,7 +700,8 @@
card_blacklisted_(false),
update_histograms_(true),
window_count_(0),
- domain_blocking_enabled_(true) {
+ domain_blocking_enabled_(true),
+ owner_(NULL) {
CommandLine* command_line = CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) {
command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas);
@@ -746,13 +722,13 @@
#endif // OS_MACOSX
}
-GpuDataManagerImpl::~GpuDataManagerImpl() {
+GpuDataManagerImplPrivate::~GpuDataManagerImplPrivate() {
#if defined(OS_MACOSX)
CGDisplayRemoveReconfigurationCallback(DisplayReconfigCallback, this);
#endif
}
-void GpuDataManagerImpl::InitializeImpl(
+void GpuDataManagerImplPrivate::InitializeImpl(
const std::string& gpu_blacklist_json,
const std::string& gpu_switching_list_json,
const std::string& gpu_driver_bug_list_json,
@@ -780,16 +756,13 @@
GpuControlList::kCurrentOsOnly);
}
- {
- base::AutoLock auto_lock(gpu_info_lock_);
- gpu_info_ = gpu_info;
- }
+ gpu_info_ = gpu_info;
UpdateGpuInfo(gpu_info);
UpdateGpuSwitchingManager(gpu_info);
UpdatePreliminaryBlacklistedFeatures();
}
-void GpuDataManagerImpl::UpdateBlacklistedFeatures(
+void GpuDataManagerImplPrivate::UpdateBlacklistedFeatures(
const std::set<int>& features) {
CommandLine* command_line = CommandLine::ForCurrentProcess();
blacklisted_features_ = features;
@@ -808,11 +781,12 @@
EnableSwiftShaderIfNecessary();
}
-void GpuDataManagerImpl::UpdatePreliminaryBlacklistedFeatures() {
+void GpuDataManagerImplPrivate::UpdatePreliminaryBlacklistedFeatures() {
preliminary_blacklisted_features_ = blacklisted_features_;
}
-void GpuDataManagerImpl::UpdateGpuSwitchingManager(const GPUInfo& gpu_info) {
+void GpuDataManagerImplPrivate::UpdateGpuSwitchingManager(
+ const GPUInfo& gpu_info) {
ui::GpuSwitchingManager::GetInstance()->SetGpuCount(
gpu_info.secondary_gpus.size() + 1);
@@ -831,11 +805,11 @@
}
}
-void GpuDataManagerImpl::NotifyGpuInfoUpdate() {
+void GpuDataManagerImplPrivate::NotifyGpuInfoUpdate() {
observer_list_->Notify(&GpuDataManagerObserver::OnGpuInfoUpdate);
}
-void GpuDataManagerImpl::EnableSwiftShaderIfNecessary() {
+void GpuDataManagerImplPrivate::EnableSwiftShaderIfNecessary() {
if (!GpuAccessAllowed(NULL) ||
blacklisted_features_.count(GPU_FEATURE_TYPE_WEBGL)) {
if (!swiftshader_path_.empty() &&
@@ -845,7 +819,8 @@
}
}
-std::string GpuDataManagerImpl::GetDomainFromURL(const GURL& url) const {
+std::string GpuDataManagerImplPrivate::GetDomainFromURL(
+ const GURL& url) const {
// For the moment, we just use the host, or its IP address, as the
// entry in the set, rather than trying to figure out the top-level
// domain. This does mean that a.foo.com and b.foo.com will be
@@ -859,43 +834,41 @@
return url.host();
}
-void GpuDataManagerImpl::BlockDomainFrom3DAPIsAtTime(
- const GURL& url, DomainGuilt guilt, base::Time at_time) {
+void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIsAtTime(
+ const GURL& url,
+ GpuDataManagerImpl::DomainGuilt guilt,
+ base::Time at_time) {
if (!domain_blocking_enabled_)
return;
std::string domain = GetDomainFromURL(url);
- base::AutoLock auto_lock(gpu_info_lock_);
DomainBlockEntry& entry = blocked_domains_[domain];
entry.last_guilt = guilt;
timestamps_of_gpu_resets_.push_back(at_time);
}
GpuDataManagerImpl::DomainBlockStatus
-GpuDataManagerImpl::Are3DAPIsBlockedAtTime(
+GpuDataManagerImplPrivate::Are3DAPIsBlockedAtTime(
const GURL& url, base::Time at_time) const {
if (!domain_blocking_enabled_)
- return DOMAIN_BLOCK_STATUS_NOT_BLOCKED;
+ return GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED;
// Note: adjusting the policies in this code will almost certainly
// require adjusting the associated unit tests.
std::string domain = GetDomainFromURL(url);
- base::AutoLock auto_lock(gpu_info_lock_);
- {
- DomainBlockMap::const_iterator iter = blocked_domains_.find(domain);
- if (iter != blocked_domains_.end()) {
- // Err on the side of caution, and assume that if a particular
- // domain shows up in the block map, it's there for a good
- // reason and don't let its presence there automatically expire.
+ DomainBlockMap::const_iterator iter = blocked_domains_.find(domain);
+ if (iter != blocked_domains_.end()) {
+ // Err on the side of caution, and assume that if a particular
+ // domain shows up in the block map, it's there for a good
+ // reason and don't let its presence there automatically expire.
- UMA_HISTOGRAM_ENUMERATION("GPU.BlockStatusForClient3DAPIs",
- BLOCK_STATUS_SPECIFIC_DOMAIN_BLOCKED,
- BLOCK_STATUS_MAX);
+ UMA_HISTOGRAM_ENUMERATION("GPU.BlockStatusForClient3DAPIs",
+ BLOCK_STATUS_SPECIFIC_DOMAIN_BLOCKED,
+ BLOCK_STATUS_MAX);
- return DOMAIN_BLOCK_STATUS_BLOCKED;
- }
+ return GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_BLOCKED;
}
// Look at the timestamps of the recent GPU resets to see if there are
@@ -905,47 +878,51 @@
//
// TODO(kbr): make this pay attention to the TDR thresholds in the
// Windows registry, but make sure it continues to be testable.
- std::list<base::Time>::iterator iter = timestamps_of_gpu_resets_.begin();
- int num_resets_within_timeframe = 0;
- while (iter != timestamps_of_gpu_resets_.end()) {
- base::Time time = *iter;
- base::TimeDelta delta_t = at_time - time;
+ {
Ken Russell (switch to Gerrit) 2013/05/10 23:59:19 This block doesn't seem necessary.
+ std::list<base::Time>::iterator iter = timestamps_of_gpu_resets_.begin();
+ int num_resets_within_timeframe = 0;
+ while (iter != timestamps_of_gpu_resets_.end()) {
+ base::Time time = *iter;
+ base::TimeDelta delta_t = at_time - time;
- // If this entry has "expired", just remove it.
- if (delta_t.InMilliseconds() > kBlockAllDomainsMs) {
- iter = timestamps_of_gpu_resets_.erase(iter);
- continue;
+ // If this entry has "expired", just remove it.
+ if (delta_t.InMilliseconds() > kBlockAllDomainsMs) {
+ iter = timestamps_of_gpu_resets_.erase(iter);
+ continue;
+ }
+
+ ++num_resets_within_timeframe;
+ ++iter;
}
- ++num_resets_within_timeframe;
- ++iter;
- }
+ if (num_resets_within_timeframe >= kNumResetsWithinDuration) {
+ UMA_HISTOGRAM_ENUMERATION("GPU.BlockStatusForClient3DAPIs",
+ BLOCK_STATUS_ALL_DOMAINS_BLOCKED,
+ BLOCK_STATUS_MAX);
- if (num_resets_within_timeframe >= kNumResetsWithinDuration) {
- UMA_HISTOGRAM_ENUMERATION("GPU.BlockStatusForClient3DAPIs",
- BLOCK_STATUS_ALL_DOMAINS_BLOCKED,
- BLOCK_STATUS_MAX);
-
- return DOMAIN_BLOCK_STATUS_ALL_DOMAINS_BLOCKED;
+ return GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_ALL_DOMAINS_BLOCKED;
+ }
}
UMA_HISTOGRAM_ENUMERATION("GPU.BlockStatusForClient3DAPIs",
BLOCK_STATUS_NOT_BLOCKED,
BLOCK_STATUS_MAX);
- return DOMAIN_BLOCK_STATUS_NOT_BLOCKED;
+ return GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED;
}
-int64 GpuDataManagerImpl::GetBlockAllDomainsDurationInMs() const {
+int64 GpuDataManagerImplPrivate::GetBlockAllDomainsDurationInMs() const {
return kBlockAllDomainsMs;
}
-void GpuDataManagerImpl::Notify3DAPIBlocked(const GURL& url,
- int render_process_id,
- int render_view_id,
- ThreeDAPIType requester) {
+void GpuDataManagerImplPrivate::Notify3DAPIBlocked(const GURL& url,
+ int render_process_id,
+ int render_view_id,
+ ThreeDAPIType requester) {
+ GpuDataManagerImpl::UnlockedSession session(owner_);
observer_list_->Notify(&GpuDataManagerObserver::DidBlock3DAPIs,
url, render_process_id, render_view_id, requester);
}
} // namespace content
+
« no previous file with comments | « content/browser/gpu/gpu_data_manager_impl_private.h ('k') | content/browser/gpu/gpu_data_manager_impl_private_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698