| Index: content/browser/gpu/gpu_data_manager_impl.cc
|
| ===================================================================
|
| --- content/browser/gpu/gpu_data_manager_impl.cc (revision 155054)
|
| +++ content/browser/gpu/gpu_data_manager_impl.cc (working copy)
|
| @@ -13,6 +13,7 @@
|
| #include "base/values.h"
|
| #include "base/version.h"
|
| #include "content/browser/gpu/gpu_process_host.h"
|
| +#include "content/browser/gpu/gpu_util.h"
|
| #include "content/common/gpu/gpu_messages.h"
|
| #include "content/gpu/gpu_info_collector.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -58,14 +59,24 @@
|
| BlacklistCard();
|
| }
|
|
|
| -void GpuDataManagerImpl::InitializeGpuInfo() {
|
| +void GpuDataManagerImpl::Initialize(
|
| + const std::string& browser_version_string,
|
| + const std::string& gpu_blacklist_json) {
|
| content::GPUInfo gpu_info;
|
| - if (!CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kSkipGpuDataLoading))
|
| - gpu_info_collector::CollectPreliminaryGraphicsInfo(&gpu_info);
|
| - else
|
| - gpu_info.finalized = true;
|
| + gpu_info_collector::CollectPreliminaryGraphicsInfo(&gpu_info);
|
| +
|
| + if (!gpu_blacklist_json.empty()) {
|
| + CHECK(!browser_version_string.empty());
|
| + gpu_blacklist_.reset(new GpuBlacklist());
|
| + bool succeed = gpu_blacklist_->LoadGpuBlacklist(
|
| + browser_version_string,
|
| + gpu_blacklist_json,
|
| + GpuBlacklist::kCurrentOsOnly);
|
| + CHECK(succeed);
|
| + }
|
| +
|
| UpdateGpuInfo(gpu_info);
|
| + UpdatePreliminaryBlacklistedFeatures();
|
| }
|
|
|
| GpuDataManagerImpl::~GpuDataManagerImpl() {
|
| @@ -92,6 +103,15 @@
|
|
|
| content::GetContentClient()->SetGpuInfo(gpu_info);
|
|
|
| + if (gpu_blacklist_.get()) {
|
| + GpuFeatureType feature_type = gpu_blacklist_->DetermineGpuFeatureType(
|
| + GpuBlacklist::kOsAny,
|
| + NULL,
|
| + GpuDataManager::GetInstance()->GetGPUInfo());
|
| + gpu_util::UpdateStats(gpu_blacklist_.get(), feature_type);
|
| + UpdateBlacklistedFeatures(feature_type);
|
| + }
|
| +
|
| {
|
| base::AutoLock auto_lock(gpu_info_lock_);
|
| gpu_info_ = gpu_info;
|
| @@ -142,6 +162,12 @@
|
| return value;
|
| }
|
|
|
| +std::string GpuDataManagerImpl::GetBlacklistVersion() const {
|
| + if (gpu_blacklist_.get())
|
| + return gpu_blacklist_->GetVersion();
|
| + return "0";
|
| +}
|
| +
|
| GpuFeatureType GpuDataManagerImpl::GetBlacklistedFeatures() const {
|
| if (software_rendering_) {
|
| GpuFeatureType flags;
|
| @@ -155,6 +181,13 @@
|
| return gpu_feature_type_;
|
| }
|
|
|
| +base::ListValue* GpuDataManagerImpl::GetBlacklistReasons() const {
|
| + ListValue* reasons = new ListValue();
|
| + if (gpu_blacklist_.get())
|
| + gpu_blacklist_->GetBlacklistReasons(reasons);
|
| + return reasons;
|
| +}
|
| +
|
| bool GpuDataManagerImpl::GpuAccessAllowed() const {
|
| if (software_rendering_)
|
| return true;
|
| @@ -305,9 +338,7 @@
|
| #endif
|
| }
|
|
|
| -void GpuDataManagerImpl::SetPreliminaryBlacklistedFeatures(
|
| - GpuFeatureType feature_type) {
|
| - UpdateBlacklistedFeatures(feature_type);
|
| +void GpuDataManagerImpl::UpdatePreliminaryBlacklistedFeatures() {
|
| preliminary_gpu_feature_type_ = gpu_feature_type_;
|
| }
|
|
|
|
|