| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/gpu/gpu_data_manager_impl.h" | 5 #include "content/browser/gpu/gpu_data_manager_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 | 41 |
| 42 // static | 42 // static |
| 43 GpuDataManagerImpl* GpuDataManagerImpl::GetInstance() { | 43 GpuDataManagerImpl* GpuDataManagerImpl::GetInstance() { |
| 44 return Singleton<GpuDataManagerImpl>::get(); | 44 return Singleton<GpuDataManagerImpl>::get(); |
| 45 } | 45 } |
| 46 | 46 |
| 47 GpuDataManagerImpl::GpuDataManagerImpl() | 47 GpuDataManagerImpl::GpuDataManagerImpl() |
| 48 : complete_gpu_info_already_requested_(false), | 48 : complete_gpu_info_already_requested_(false), |
| 49 gpu_feature_type_(content::GPU_FEATURE_TYPE_UNKNOWN), | 49 gpu_feature_type_(content::GPU_FEATURE_TYPE_UNKNOWN), |
| 50 preliminary_gpu_feature_type_(content::GPU_FEATURE_TYPE_UNKNOWN), | 50 preliminary_gpu_feature_type_(content::GPU_FEATURE_TYPE_UNKNOWN), |
| 51 gpu_switching_(content::GPU_SWITCHING_AUTOMATIC), | 51 gpu_switching_(content::GPU_SWITCHING_OPTION_AUTOMATIC), |
| 52 observer_list_(new GpuDataManagerObserverList), | 52 observer_list_(new GpuDataManagerObserverList), |
| 53 software_rendering_(false), | 53 software_rendering_(false), |
| 54 card_blacklisted_(false), | 54 card_blacklisted_(false), |
| 55 update_histograms_(true) { | 55 update_histograms_(true) { |
| 56 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 56 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| 57 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) { | 57 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) { |
| 58 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas); | 58 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas); |
| 59 command_line->AppendSwitch(switches::kDisableAcceleratedLayers); | 59 command_line->AppendSwitch(switches::kDisableAcceleratedLayers); |
| 60 } | 60 } |
| 61 if (command_line->HasSwitch(switches::kDisableGpu)) | 61 if (command_line->HasSwitch(switches::kDisableGpu)) |
| 62 BlacklistCard(); | 62 BlacklistCard(); |
| 63 if (command_line->HasSwitch(switches::kGpuSwitching)) { |
| 64 std::string option_string = command_line->GetSwitchValueASCII( |
| 65 switches::kGpuSwitching); |
| 66 GpuSwitchingOption option = gpu_util::StringToGpuSwitchingOption( |
| 67 option_string); |
| 68 if (option != content::GPU_SWITCHING_OPTION_UNKNOWN) |
| 69 gpu_switching_ = option; |
| 70 } |
| 63 } | 71 } |
| 64 | 72 |
| 65 void GpuDataManagerImpl::Initialize( | 73 void GpuDataManagerImpl::Initialize( |
| 66 const std::string& browser_version_string, | 74 const std::string& browser_version_string, |
| 67 const std::string& gpu_blacklist_json) { | 75 const std::string& gpu_blacklist_json) { |
| 68 content::GPUInfo gpu_info; | 76 content::GPUInfo gpu_info; |
| 69 gpu_info_collector::CollectPreliminaryGraphicsInfo(&gpu_info); | 77 gpu_info_collector::CollectPreliminaryGraphicsInfo(&gpu_info); |
| 70 #if defined(ARCH_CPU_X86_FAMILY) | 78 #if defined(ARCH_CPU_X86_FAMILY) |
| 71 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) | 79 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) |
| 72 gpu_info.finalized = true; | 80 gpu_info.finalized = true; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 | 138 |
| 131 if (gpu_blacklist_.get()) { | 139 if (gpu_blacklist_.get()) { |
| 132 GpuBlacklist::Decision decision = | 140 GpuBlacklist::Decision decision = |
| 133 gpu_blacklist_->MakeBlacklistDecision( | 141 gpu_blacklist_->MakeBlacklistDecision( |
| 134 GpuBlacklist::kOsAny, NULL, gpu_info); | 142 GpuBlacklist::kOsAny, NULL, gpu_info); |
| 135 if (update_histograms_) { | 143 if (update_histograms_) { |
| 136 gpu_util::UpdateStats(gpu_blacklist_.get(), | 144 gpu_util::UpdateStats(gpu_blacklist_.get(), |
| 137 decision.blacklisted_features); | 145 decision.blacklisted_features); |
| 138 } | 146 } |
| 139 UpdateBlacklistedFeatures(decision.blacklisted_features); | 147 UpdateBlacklistedFeatures(decision.blacklisted_features); |
| 140 gpu_switching_ = decision.gpu_switching; | 148 if (decision.gpu_switching != content::GPU_SWITCHING_OPTION_UNKNOWN) |
| 149 gpu_switching_ = decision.gpu_switching; |
| 141 } | 150 } |
| 142 | 151 |
| 143 { | 152 { |
| 144 base::AutoLock auto_lock(gpu_info_lock_); | 153 base::AutoLock auto_lock(gpu_info_lock_); |
| 145 gpu_info_ = gpu_info; | 154 gpu_info_ = gpu_info; |
| 146 complete_gpu_info_already_requested_ = | 155 complete_gpu_info_already_requested_ = |
| 147 complete_gpu_info_already_requested_ || gpu_info_.finalized; | 156 complete_gpu_info_already_requested_ || gpu_info_.finalized; |
| 148 } | 157 } |
| 149 | 158 |
| 150 // We have to update GpuFeatureType before notify all the observers. | 159 // We have to update GpuFeatureType before notify all the observers. |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 swiftshader_path = swiftshader_path_; | 301 swiftshader_path = swiftshader_path_; |
| 293 } else if ((flags & (content::GPU_FEATURE_TYPE_WEBGL | | 302 } else if ((flags & (content::GPU_FEATURE_TYPE_WEBGL | |
| 294 content::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING | | 303 content::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING | |
| 295 content::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) && | 304 content::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) && |
| 296 (use_gl == "any")) { | 305 (use_gl == "any")) { |
| 297 command_line->AppendSwitchASCII( | 306 command_line->AppendSwitchASCII( |
| 298 switches::kUseGL, gfx::kGLImplementationOSMesaName); | 307 switches::kUseGL, gfx::kGLImplementationOSMesaName); |
| 299 } else if (!use_gl.empty()) { | 308 } else if (!use_gl.empty()) { |
| 300 command_line->AppendSwitchASCII(switches::kUseGL, use_gl); | 309 command_line->AppendSwitchASCII(switches::kUseGL, use_gl); |
| 301 } | 310 } |
| 311 switch (gpu_switching_) { |
| 312 case content::GPU_SWITCHING_OPTION_FORCE_DISCRETE: |
| 313 command_line->AppendSwitchASCII(switches::kGpuSwitching, |
| 314 switches::kGpuSwitchingOptionNameForceDiscrete); |
| 315 break; |
| 316 case content::GPU_SWITCHING_OPTION_FORCE_INTEGRATED: |
| 317 command_line->AppendSwitchASCII(switches::kGpuSwitching, |
| 318 switches::kGpuSwitchingOptionNameForceIntegrated); |
| 319 break; |
| 320 default: |
| 321 break; |
| 322 } |
| 302 | 323 |
| 303 if (!swiftshader_path.empty()) | 324 if (!swiftshader_path.empty()) |
| 304 command_line->AppendSwitchPath(switches::kSwiftShaderPath, | 325 command_line->AppendSwitchPath(switches::kSwiftShaderPath, |
| 305 swiftshader_path); | 326 swiftshader_path); |
| 306 | 327 |
| 307 { | 328 { |
| 308 base::AutoLock auto_lock(gpu_info_lock_); | 329 base::AutoLock auto_lock(gpu_info_lock_); |
| 309 if (gpu_info_.optimus) | 330 if (gpu_info_.optimus) |
| 310 command_line->AppendSwitch(switches::kReduceGpuSandbox); | 331 command_line->AppendSwitch(switches::kReduceGpuSandbox); |
| 311 if (gpu_info_.amd_switchable) { | 332 if (gpu_info_.amd_switchable) { |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 | 447 |
| 427 void GpuDataManagerImpl::BlacklistCard() { | 448 void GpuDataManagerImpl::BlacklistCard() { |
| 428 card_blacklisted_ = true; | 449 card_blacklisted_ = true; |
| 429 | 450 |
| 430 gpu_feature_type_ = content::GPU_FEATURE_TYPE_ALL; | 451 gpu_feature_type_ = content::GPU_FEATURE_TYPE_ALL; |
| 431 | 452 |
| 432 EnableSoftwareRenderingIfNecessary(); | 453 EnableSoftwareRenderingIfNecessary(); |
| 433 NotifyGpuInfoUpdate(); | 454 NotifyGpuInfoUpdate(); |
| 434 } | 455 } |
| 435 | 456 |
| OLD | NEW |