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

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

Issue 1547793004: Make gpu black list work again on Linux (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Execute todo, send IPC directly from gpu_benchmarking_extension.cc and fixes variable names. Created 4 years, 10 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
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index 0a07e936bf5bbc23c5cc6c6b4d860352593d1de8..96a02dcd617e15f318bb39718aed8ae96160c883 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -373,8 +373,12 @@ bool GpuDataManagerImplPrivate::GpuAccessAllowed(
}
void GpuDataManagerImplPrivate::RequestCompleteGpuInfoIfNeeded() {
- if (complete_gpu_info_already_requested_ || IsCompleteGpuInfoAvailable())
+ if (complete_gpu_info_already_requested_ || IsCompleteGpuInfoAvailable() ||
+ base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kGpuTestingNoCompleteInfoCollection)) {
return;
+ }
+
complete_gpu_info_already_requested_ = true;
GpuProcessHost::SendOnIO(
@@ -463,6 +467,13 @@ void GpuDataManagerImplPrivate::SetGLStrings(const std::string& gl_vendor,
if (gl_vendor.empty() && gl_renderer.empty() && gl_version.empty())
return;
+ if (!is_initialized_) {
+ post_init_tasks_.push_back(
+ base::Bind(&GpuDataManagerImplPrivate::SetGLStrings,
+ base::Unretained(this), gl_vendor, gl_renderer, gl_version));
+ return;
+ }
+
// 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() ||
@@ -523,6 +534,18 @@ void GpuDataManagerImplPrivate::Initialize() {
TRACE_EVENT0("startup",
"GpuDataManagerImpl::Initialize:CollectBasicGraphicsInfo");
gpu::CollectBasicGraphicsInfo(&gpu_info);
+
+ if (command_line->HasSwitch(switches::kGpuTestingVendorId) &&
+ command_line->HasSwitch(switches::kGpuTestingDeviceId)) {
+ base::HexStringToUInt(
+ command_line->GetSwitchValueASCII(switches::kGpuTestingVendorId),
+ &gpu_info.gpu.vendor_id);
+ base::HexStringToUInt(
+ command_line->GetSwitchValueASCII(switches::kGpuTestingDeviceId),
+ &gpu_info.gpu.device_id);
+ gpu_info.gpu.active = true;
+ gpu_info.secondary_gpus.clear();
+ }
}
#if defined(ARCH_CPU_X86_FAMILY)
if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) {
@@ -556,9 +579,17 @@ void GpuDataManagerImplPrivate::Initialize() {
void GpuDataManagerImplPrivate::UpdateGpuInfoHelper() {
GetContentClient()->SetGpuInfo(gpu_info_);
+ const base::CommandLine* command_line =
+ base::CommandLine::ForCurrentProcess();
+
+ std::string os_version;
+ if (command_line->HasSwitch(switches::kGpuTestingOsVersion))
+ os_version =
+ command_line->GetSwitchValueASCII(switches::kGpuTestingOsVersion);
+
if (gpu_blacklist_) {
std::set<int> features = gpu_blacklist_->MakeDecision(
- gpu::GpuControlList::kOsAny, std::string(), gpu_info_);
+ gpu::GpuControlList::kOsAny, os_version, gpu_info_);
if (update_histograms_)
UpdateStats(gpu_info_, gpu_blacklist_.get(), features);
@@ -566,13 +597,11 @@ void GpuDataManagerImplPrivate::UpdateGpuInfoHelper() {
}
if (gpu_driver_bug_list_) {
gpu_driver_bugs_ = gpu_driver_bug_list_->MakeDecision(
- gpu::GpuControlList::kOsAny, std::string(), gpu_info_);
+ gpu::GpuControlList::kOsAny, os_version, gpu_info_);
std::set<std::string> disabled_ext_set;
// Merge disabled extensions from the command line with gpu driver bug list.
- const base::CommandLine* command_line =
- base::CommandLine::ForCurrentProcess();
if (command_line) {
const std::vector<std::string>& disabled_command_line_exts =
base::SplitString(
@@ -770,6 +799,13 @@ void GpuDataManagerImplPrivate::UpdateRendererWebPrefs(
}
void GpuDataManagerImplPrivate::DisableHardwareAcceleration() {
+ if (!is_initialized_) {
+ post_init_tasks_.push_back(
+ base::Bind(&GpuDataManagerImplPrivate::DisableHardwareAcceleration,
+ base::Unretained(this)));
+ return;
+ }
+
card_blacklisted_ = true;
for (int i = 0; i < gpu::NUMBER_OF_GPU_FEATURE_TYPES; ++i)
@@ -961,8 +997,7 @@ GpuDataManagerImplPrivate* GpuDataManagerImplPrivate::Create(
return new GpuDataManagerImplPrivate(owner);
}
-GpuDataManagerImplPrivate::GpuDataManagerImplPrivate(
- GpuDataManagerImpl* owner)
+GpuDataManagerImplPrivate::GpuDataManagerImplPrivate(GpuDataManagerImpl* owner)
: complete_gpu_info_already_requested_(false),
observer_list_(new GpuDataManagerObserverList),
use_swiftshader_(false),
@@ -973,6 +1008,7 @@ GpuDataManagerImplPrivate::GpuDataManagerImplPrivate(
owner_(owner),
display_count_(0),
gpu_process_accessible_(true),
+ is_initialized_(false),
finalized_(false) {
DCHECK(owner_);
const base::CommandLine* command_line =
@@ -1029,6 +1065,13 @@ void GpuDataManagerImplPrivate::InitializeImpl(
UpdateGpuInfo(gpu_info);
UpdateGpuSwitchingManager(gpu_info);
UpdatePreliminaryBlacklistedFeatures();
+
+ // Set initialized before running callbacks.
+ is_initialized_ = true;
+
+ for (const auto& callback : post_init_tasks_)
+ callback.Run();
+ post_init_tasks_.clear();
}
void GpuDataManagerImplPrivate::UpdateBlacklistedFeatures(
« 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