| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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_private.h" | 5 #include "content/browser/gpu/gpu_data_manager_impl_private.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/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 std::vector<uint32> flag_disabled_entries; | 138 std::vector<uint32> flag_disabled_entries; |
| 139 disabled = true; | 139 disabled = true; |
| 140 blacklist->GetDecisionEntries(&flag_disabled_entries, disabled); | 140 blacklist->GetDecisionEntries(&flag_disabled_entries, disabled); |
| 141 for (size_t i = 0; i < flag_disabled_entries.size(); ++i) { | 141 for (size_t i = 0; i < flag_disabled_entries.size(); ++i) { |
| 142 UMA_HISTOGRAM_ENUMERATION("GPU.BlacklistTestResultsPerDisabledEntry", | 142 UMA_HISTOGRAM_ENUMERATION("GPU.BlacklistTestResultsPerDisabledEntry", |
| 143 flag_disabled_entries[i], max_entry_id + 1); | 143 flag_disabled_entries[i], max_entry_id + 1); |
| 144 } | 144 } |
| 145 | 145 |
| 146 const gpu::GpuFeatureType kGpuFeatures[] = { | 146 const gpu::GpuFeatureType kGpuFeatures[] = { |
| 147 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, | 147 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, |
| 148 gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING, | 148 gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING, gpu::GPU_FEATURE_TYPE_WEBGL}; |
| 149 gpu::GPU_FEATURE_TYPE_WEBGL | |
| 150 }; | |
| 151 const std::string kGpuBlacklistFeatureHistogramNames[] = { | 149 const std::string kGpuBlacklistFeatureHistogramNames[] = { |
| 152 "GPU.BlacklistFeatureTestResults.Accelerated2dCanvas", | 150 "GPU.BlacklistFeatureTestResults.Accelerated2dCanvas", |
| 153 "GPU.BlacklistFeatureTestResults.AcceleratedCompositing", | 151 "GPU.BlacklistFeatureTestResults.GpuCompositing", |
| 154 "GPU.BlacklistFeatureTestResults.Webgl", | 152 "GPU.BlacklistFeatureTestResults.Webgl", }; |
| 155 }; | |
| 156 const bool kGpuFeatureUserFlags[] = { | 153 const bool kGpuFeatureUserFlags[] = { |
| 157 command_line.HasSwitch(switches::kDisableAccelerated2dCanvas), | 154 command_line.HasSwitch(switches::kDisableAccelerated2dCanvas), |
| 158 false, | 155 command_line.HasSwitch(switches::kDisableGpu), |
| 159 command_line.HasSwitch(switches::kDisableExperimentalWebGL), | 156 command_line.HasSwitch(switches::kDisableExperimentalWebGL), }; |
| 160 }; | |
| 161 #if defined(OS_WIN) | 157 #if defined(OS_WIN) |
| 162 const std::string kGpuBlacklistFeatureHistogramNamesWin[] = { | 158 const std::string kGpuBlacklistFeatureHistogramNamesWin[] = { |
| 163 "GPU.BlacklistFeatureTestResultsWindows.Accelerated2dCanvas", | 159 "GPU.BlacklistFeatureTestResultsWindows.Accelerated2dCanvas", |
| 164 "GPU.BlacklistFeatureTestResultsWindows.AcceleratedCompositing", | 160 "GPU.BlacklistFeatureTestResultsWindows.GpuCompositing", |
| 165 "GPU.BlacklistFeatureTestResultsWindows.Webgl", | 161 "GPU.BlacklistFeatureTestResultsWindows.Webgl", }; |
| 166 }; | |
| 167 #endif | 162 #endif |
| 168 const size_t kNumFeatures = | 163 const size_t kNumFeatures = |
| 169 sizeof(kGpuFeatures) / sizeof(gpu::GpuFeatureType); | 164 sizeof(kGpuFeatures) / sizeof(gpu::GpuFeatureType); |
| 170 for (size_t i = 0; i < kNumFeatures; ++i) { | 165 for (size_t i = 0; i < kNumFeatures; ++i) { |
| 171 // We can't use UMA_HISTOGRAM_ENUMERATION here because the same name is | 166 // We can't use UMA_HISTOGRAM_ENUMERATION here because the same name is |
| 172 // expected if the macro is used within a loop. | 167 // expected if the macro is used within a loop. |
| 173 GpuFeatureStatus value = kGpuFeatureEnabled; | 168 GpuFeatureStatus value = kGpuFeatureEnabled; |
| 174 if (blacklisted_features.count(kGpuFeatures[i])) | 169 if (blacklisted_features.count(kGpuFeatures[i])) |
| 175 value = kGpuFeatureBlacklisted; | 170 value = kGpuFeatureBlacklisted; |
| 176 else if (kGpuFeatureUserFlags[i]) | 171 else if (kGpuFeatureUserFlags[i]) |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 base::FilePath swiftshader_path = | 660 base::FilePath swiftshader_path = |
| 666 CommandLine::ForCurrentProcess()->GetSwitchValuePath( | 661 CommandLine::ForCurrentProcess()->GetSwitchValuePath( |
| 667 switches::kSwiftShaderPath); | 662 switches::kSwiftShaderPath); |
| 668 if (gpu_driver_bugs_.find(gpu::DISABLE_D3D11) != gpu_driver_bugs_.end()) | 663 if (gpu_driver_bugs_.find(gpu::DISABLE_D3D11) != gpu_driver_bugs_.end()) |
| 669 command_line->AppendSwitch(switches::kDisableD3D11); | 664 command_line->AppendSwitch(switches::kDisableD3D11); |
| 670 if (use_swiftshader_) { | 665 if (use_swiftshader_) { |
| 671 command_line->AppendSwitchASCII(switches::kUseGL, "swiftshader"); | 666 command_line->AppendSwitchASCII(switches::kUseGL, "swiftshader"); |
| 672 if (swiftshader_path.empty()) | 667 if (swiftshader_path.empty()) |
| 673 swiftshader_path = swiftshader_path_; | 668 swiftshader_path = swiftshader_path_; |
| 674 } else if ((IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL) || | 669 } else if ((IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_WEBGL) || |
| 675 IsFeatureBlacklisted( | 670 IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING) || |
| 676 gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) || | |
| 677 IsFeatureBlacklisted( | 671 IsFeatureBlacklisted( |
| 678 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) && | 672 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) && |
| 679 (use_gl == "any")) { | 673 (use_gl == "any")) { |
| 680 command_line->AppendSwitchASCII( | 674 command_line->AppendSwitchASCII( |
| 681 switches::kUseGL, gfx::kGLImplementationOSMesaName); | 675 switches::kUseGL, gfx::kGLImplementationOSMesaName); |
| 682 } else if (!use_gl.empty()) { | 676 } else if (!use_gl.empty()) { |
| 683 command_line->AppendSwitchASCII(switches::kUseGL, use_gl); | 677 command_line->AppendSwitchASCII(switches::kUseGL, use_gl); |
| 684 } | 678 } |
| 685 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) | 679 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) |
| 686 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "true"); | 680 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "true"); |
| 687 else | 681 else |
| 688 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "false"); | 682 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "false"); |
| 689 | 683 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 } | 717 } |
| 724 | 718 |
| 725 void GpuDataManagerImplPrivate::AppendPluginCommandLine( | 719 void GpuDataManagerImplPrivate::AppendPluginCommandLine( |
| 726 CommandLine* command_line) const { | 720 CommandLine* command_line) const { |
| 727 DCHECK(command_line); | 721 DCHECK(command_line); |
| 728 | 722 |
| 729 #if defined(OS_MACOSX) | 723 #if defined(OS_MACOSX) |
| 730 // TODO(jbauman): Add proper blacklist support for core animation plugins so | 724 // TODO(jbauman): Add proper blacklist support for core animation plugins so |
| 731 // special-casing this video card won't be necessary. See | 725 // special-casing this video card won't be necessary. See |
| 732 // http://crbug.com/134015 | 726 // http://crbug.com/134015 |
| 733 if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING)) { | 727 if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) { |
| 734 if (!command_line->HasSwitch( | 728 if (!command_line->HasSwitch( |
| 735 switches::kDisableCoreAnimationPlugins)) | 729 switches::kDisableCoreAnimationPlugins)) |
| 736 command_line->AppendSwitch( | 730 command_line->AppendSwitch( |
| 737 switches::kDisableCoreAnimationPlugins); | 731 switches::kDisableCoreAnimationPlugins); |
| 738 } | 732 } |
| 739 #endif | 733 #endif |
| 740 } | 734 } |
| 741 | 735 |
| 742 void GpuDataManagerImplPrivate::UpdateRendererWebPrefs( | 736 void GpuDataManagerImplPrivate::UpdateRendererWebPrefs( |
| 743 WebPreferences* prefs) const { | 737 WebPreferences* prefs) const { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 887 gpu_info_.secondary_gpus[ii].active = false; | 881 gpu_info_.secondary_gpus[ii].active = false; |
| 888 } | 882 } |
| 889 } | 883 } |
| 890 gpu_info_.gpu.active = false; | 884 gpu_info_.gpu.active = false; |
| 891 } | 885 } |
| 892 UpdateGpuInfoHelper(); | 886 UpdateGpuInfoHelper(); |
| 893 return true; | 887 return true; |
| 894 } | 888 } |
| 895 | 889 |
| 896 bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const { | 890 bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const { |
| 897 return !ShouldUseSwiftShader() && | 891 if (ShouldUseSwiftShader()) |
| 898 !IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING); | 892 return false; |
| 893 if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) |
| 894 return false; |
| 895 return true; |
| 899 } | 896 } |
| 900 | 897 |
| 901 void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs( | 898 void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs( |
| 902 const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) { | 899 const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) { |
| 903 BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now()); | 900 BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now()); |
| 904 } | 901 } |
| 905 | 902 |
| 906 bool GpuDataManagerImplPrivate::Are3DAPIsBlocked(const GURL& url, | 903 bool GpuDataManagerImplPrivate::Are3DAPIsBlocked(const GURL& url, |
| 907 int render_process_id, | 904 int render_process_id, |
| 908 int render_view_id, | 905 int render_view_id, |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1003 } | 1000 } |
| 1004 | 1001 |
| 1005 void GpuDataManagerImplPrivate::UpdateBlacklistedFeatures( | 1002 void GpuDataManagerImplPrivate::UpdateBlacklistedFeatures( |
| 1006 const std::set<int>& features) { | 1003 const std::set<int>& features) { |
| 1007 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 1004 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| 1008 blacklisted_features_ = features; | 1005 blacklisted_features_ = features; |
| 1009 | 1006 |
| 1010 // Force disable using the GPU for these features, even if they would | 1007 // Force disable using the GPU for these features, even if they would |
| 1011 // otherwise be allowed. | 1008 // otherwise be allowed. |
| 1012 if (card_blacklisted_ || | 1009 if (card_blacklisted_ || |
| 1013 command_line->HasSwitch(switches::kBlacklistAcceleratedCompositing)) { | 1010 command_line->HasSwitch(switches::kBlacklistGpuCompositing)) { |
| 1014 blacklisted_features_.insert( | 1011 blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING); |
| 1015 gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING); | |
| 1016 } | 1012 } |
| 1017 if (card_blacklisted_ || | 1013 if (card_blacklisted_ || |
| 1018 command_line->HasSwitch(switches::kBlacklistWebGL)) { | 1014 command_line->HasSwitch(switches::kBlacklistWebGL)) { |
| 1019 blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_WEBGL); | 1015 blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_WEBGL); |
| 1020 } | 1016 } |
| 1021 | 1017 |
| 1022 EnableSwiftShaderIfNecessary(); | 1018 EnableSwiftShaderIfNecessary(); |
| 1023 } | 1019 } |
| 1024 | 1020 |
| 1025 void GpuDataManagerImplPrivate::UpdatePreliminaryBlacklistedFeatures() { | 1021 void GpuDataManagerImplPrivate::UpdatePreliminaryBlacklistedFeatures() { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1160 | 1156 |
| 1161 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { | 1157 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { |
| 1162 gpu_process_accessible_ = false; | 1158 gpu_process_accessible_ = false; |
| 1163 gpu_info_.finalized = true; | 1159 gpu_info_.finalized = true; |
| 1164 complete_gpu_info_already_requested_ = true; | 1160 complete_gpu_info_already_requested_ = true; |
| 1165 // Some observers might be waiting. | 1161 // Some observers might be waiting. |
| 1166 NotifyGpuInfoUpdate(); | 1162 NotifyGpuInfoUpdate(); |
| 1167 } | 1163 } |
| 1168 | 1164 |
| 1169 } // namespace content | 1165 } // namespace content |
| OLD | NEW |