| Index: content/browser/gpu/gpu_data_manager_impl.cc
|
| ===================================================================
|
| --- content/browser/gpu/gpu_data_manager_impl.cc (revision 189678)
|
| +++ content/browser/gpu/gpu_data_manager_impl.cc (working copy)
|
| @@ -28,6 +28,7 @@
|
| #include "content/public/common/content_client.h"
|
| #include "content/public/common/content_constants.h"
|
| #include "content/public/common/content_switches.h"
|
| +#include "gpu/command_buffer/service/gpu_switches.h"
|
| #include "grit/content_resources.h"
|
| #include "ui/base/ui_base_switches.h"
|
| #include "ui/gl/gl_implementation.h"
|
| @@ -101,7 +102,7 @@
|
| // This function is for testing only, so disable histograms.
|
| update_histograms_ = false;
|
|
|
| - InitializeImpl(gpu_blacklist_json, gpu_info);
|
| + InitializeImpl(gpu_blacklist_json, "", "", gpu_info);
|
| }
|
|
|
| GpuFeatureType GpuDataManagerImpl::GetBlacklistedFeatures() const {
|
| @@ -287,14 +288,28 @@
|
| #endif
|
|
|
| std::string gpu_blacklist_string;
|
| + std::string gpu_switching_list_string;
|
| + std::string gpu_driver_bug_list_string;
|
| if (!command_line->HasSwitch(switches::kIgnoreGpuBlacklist)) {
|
| const base::StringPiece gpu_blacklist_json =
|
| GetContentClient()->GetDataResource(
|
| IDR_GPU_BLACKLIST, ui::SCALE_FACTOR_NONE);
|
| gpu_blacklist_string = gpu_blacklist_json.as_string();
|
| + const base::StringPiece gpu_switching_list_json =
|
| + GetContentClient()->GetDataResource(
|
| + IDR_GPU_SWITCHING_LIST, ui::SCALE_FACTOR_NONE);
|
| + gpu_switching_list_string = gpu_switching_list_json.as_string();
|
| }
|
| -
|
| - InitializeImpl(gpu_blacklist_string, gpu_info);
|
| + if (!command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) {
|
| + const base::StringPiece gpu_driver_bug_list_json =
|
| + GetContentClient()->GetDataResource(
|
| + IDR_GPU_DRIVER_BUG_LIST, ui::SCALE_FACTOR_NONE);
|
| + gpu_driver_bug_list_string = gpu_driver_bug_list_json.as_string();
|
| + }
|
| + InitializeImpl(gpu_blacklist_string,
|
| + gpu_switching_list_string,
|
| + gpu_driver_bug_list_string,
|
| + gpu_info);
|
| }
|
|
|
| void GpuDataManagerImpl::UpdateGpuInfo(const GPUInfo& gpu_info) {
|
| @@ -314,20 +329,26 @@
|
| GetContentClient()->SetGpuInfo(my_gpu_info);
|
|
|
| if (gpu_blacklist_.get()) {
|
| - GpuBlacklist::Decision decision =
|
| - gpu_blacklist_->MakeBlacklistDecision(
|
| - GpuBlacklist::kOsAny, "", my_gpu_info);
|
| + int features = gpu_blacklist_->MakeDecision(
|
| + GpuControlList::kOsAny, "", my_gpu_info);
|
| if (update_histograms_)
|
| - UpdateStats(gpu_blacklist_.get(), decision.blacklisted_features);
|
| + UpdateStats(gpu_blacklist_.get(), features);
|
|
|
| - UpdateBlacklistedFeatures(decision.blacklisted_features);
|
| - if (decision.gpu_switching != GPU_SWITCHING_OPTION_UNKNOWN) {
|
| + UpdateBlacklistedFeatures(static_cast<GpuFeatureType>(features));
|
| + }
|
| + if (gpu_switching_list_.get()) {
|
| + int option = gpu_switching_list_->MakeDecision(
|
| + GpuControlList::kOsAny, "", my_gpu_info);
|
| + if (option != GPU_SWITCHING_OPTION_UNKNOWN) {
|
| // Blacklist decision should not overwrite commandline switch from users.
|
| CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| if (!command_line->HasSwitch(switches::kGpuSwitching))
|
| - gpu_switching_ = decision.gpu_switching;
|
| + gpu_switching_ = static_cast<GpuSwitchingOption>(option);
|
| }
|
| }
|
| + if (gpu_driver_bug_list_.get())
|
| + gpu_driver_bugs_ = gpu_driver_bug_list_->MakeDecision(
|
| + GpuControlList::kOsAny, "", my_gpu_info);
|
|
|
| // We have to update GpuFeatureType before notify all the observers.
|
| NotifyGpuInfoUpdate();
|
| @@ -501,7 +522,7 @@
|
| base::ListValue* GpuDataManagerImpl::GetBlacklistReasons() const {
|
| ListValue* reasons = new ListValue();
|
| if (gpu_blacklist_.get())
|
| - gpu_blacklist_->GetBlacklistReasons(reasons);
|
| + gpu_blacklist_->GetReasons(reasons);
|
| return reasons;
|
| }
|
|
|
| @@ -630,18 +651,31 @@
|
|
|
| void GpuDataManagerImpl::InitializeImpl(
|
| const std::string& gpu_blacklist_json,
|
| + const std::string& gpu_switching_list_json,
|
| + const std::string& gpu_driver_bug_list_json,
|
| const GPUInfo& gpu_info) {
|
| + std::string browser_version_string = ProcessVersionString(
|
| + GetContentClient()->GetProduct());
|
| + CHECK(!browser_version_string.empty());
|
| +
|
| if (!gpu_blacklist_json.empty()) {
|
| - std::string browser_version_string = ProcessVersionString(
|
| - GetContentClient()->GetProduct());
|
| - 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);
|
| + gpu_blacklist_.reset(GpuBlacklist::Create());
|
| + gpu_blacklist_->LoadList(
|
| + browser_version_string, gpu_blacklist_json,
|
| + GpuControlList::kCurrentOsOnly);
|
| }
|
| + if (!gpu_switching_list_json.empty()) {
|
| + gpu_switching_list_.reset(GpuSwitchingList::Create());
|
| + gpu_switching_list_->LoadList(
|
| + browser_version_string, gpu_switching_list_json,
|
| + GpuControlList::kCurrentOsOnly);
|
| + }
|
| + if (!gpu_driver_bug_list_json.empty()) {
|
| + gpu_driver_bug_list_.reset(GpuDriverBugList::Create());
|
| + gpu_driver_bug_list_->LoadList(
|
| + browser_version_string, gpu_driver_bug_list_json,
|
| + GpuControlList::kCurrentOsOnly);
|
| + }
|
|
|
| {
|
| base::AutoLock auto_lock(gpu_info_lock_);
|
|
|