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

Side by Side Diff: gpu/config/gpu_util.cc

Issue 2654993004: Move GPU blacklist calculation to GPU proc (Closed)
Patch Set: cleanup Created 3 years, 11 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 unified diff | Download patch
OLDNEW
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 "gpu/config/gpu_util.h" 5 #include "gpu/config/gpu_util.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_split.h" 13 #include "base/strings/string_split.h"
14 #include "base/strings/string_util.h" 14 #include "base/strings/string_util.h"
15 #include "gpu/config/gpu_blacklist.h"
15 #include "gpu/config/gpu_control_list_jsons.h" 16 #include "gpu/config/gpu_control_list_jsons.h"
16 #include "gpu/config/gpu_driver_bug_list.h" 17 #include "gpu/config/gpu_driver_bug_list.h"
18 #include "gpu/config/gpu_feature_type.h"
19 #include "gpu/config/gpu_features.h"
17 #include "gpu/config/gpu_info_collector.h" 20 #include "gpu/config/gpu_info_collector.h"
18 #include "gpu/config/gpu_switches.h" 21 #include "gpu/config/gpu_switches.h"
19 #include "ui/gl/gl_switches.h" 22 #include "ui/gl/gl_switches.h"
20 #include "ui/gl/gpu_switching_manager.h" 23 #include "ui/gl/gpu_switching_manager.h"
21 24
22 namespace gpu { 25 namespace gpu {
23 26
24 namespace { 27 namespace {
25 28
26 // Combine the integers into a string, seperated by ','. 29 // Combine the integers into a string, seperated by ','.
(...skipping 25 matching lines...) Expand all
52 DCHECK(list); 55 DCHECK(list);
53 for (const base::StringPiece& piece : base::SplitStringPiece( 56 for (const base::StringPiece& piece : base::SplitStringPiece(
54 str, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) { 57 str, ";", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL)) {
55 uint32_t id = 0; 58 uint32_t id = 0;
56 bool succeed = base::HexStringToUInt(piece, &id); 59 bool succeed = base::HexStringToUInt(piece, &id);
57 DCHECK(succeed); 60 DCHECK(succeed);
58 list->push_back(id); 61 list->push_back(id);
59 } 62 }
60 } 63 }
61 64
65 bool IsGpuRasterizationEnabled(const std::set<int>& blacklisted_features,
66 const base::CommandLine& command_line) {
67 if (command_line.HasSwitch(switches::kDisableGpuRasterization))
68 return false;
69 else if (command_line.HasSwitch(switches::kEnableGpuRasterization))
70 return true;
71
72 if (blacklisted_features.count(GPU_FEATURE_TYPE_GPU_RASTERIZATION))
73 return false;
74
75 // Gpu Rasterization on platforms that are not fully enabled is controlled by
76 // a finch experiment.
77 return base::FeatureList::IsEnabled(features::kDefaultEnableGpuRasterization);
78 }
79
62 } // namespace anonymous 80 } // namespace anonymous
63 81
64 void ApplyGpuDriverBugWorkarounds(const GPUInfo& gpu_info, 82 void ApplyGpuDriverBugWorkarounds(const GPUInfo& gpu_info,
65 base::CommandLine* command_line) { 83 base::CommandLine* command_line) {
66 std::unique_ptr<GpuDriverBugList> list(GpuDriverBugList::Create()); 84 std::unique_ptr<GpuDriverBugList> list(GpuDriverBugList::Create());
67 list->LoadList(kGpuDriverBugListJson, 85 list->LoadList(kGpuDriverBugListJson,
68 GpuControlList::kCurrentOsOnly); 86 GpuControlList::kCurrentOsOnly);
69 std::set<int> workarounds = list->MakeDecision( 87 std::set<int> workarounds = list->MakeDecision(
70 GpuControlList::kOsAny, std::string(), gpu_info); 88 GpuControlList::kOsAny, std::string(), gpu_info);
71 GpuDriverBugList::AppendWorkaroundsFromCommandLine( 89 GpuDriverBugList::AppendWorkaroundsFromCommandLine(
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 ui::GpuSwitchingManager* switching_manager = 162 ui::GpuSwitchingManager* switching_manager =
145 ui::GpuSwitchingManager::GetInstance(); 163 ui::GpuSwitchingManager::GetInstance();
146 if (!switching_manager->SupportsDualGpus()) 164 if (!switching_manager->SupportsDualGpus())
147 return; 165 return;
148 if (driver_bug_workarounds.count(gpu::FORCE_DISCRETE_GPU) == 1) 166 if (driver_bug_workarounds.count(gpu::FORCE_DISCRETE_GPU) == 1)
149 ui::GpuSwitchingManager::GetInstance()->ForceUseOfDiscreteGpu(); 167 ui::GpuSwitchingManager::GetInstance()->ForceUseOfDiscreteGpu();
150 else if (driver_bug_workarounds.count(gpu::FORCE_INTEGRATED_GPU) == 1) 168 else if (driver_bug_workarounds.count(gpu::FORCE_INTEGRATED_GPU) == 1)
151 ui::GpuSwitchingManager::GetInstance()->ForceUseOfIntegratedGpu(); 169 ui::GpuSwitchingManager::GetInstance()->ForceUseOfIntegratedGpu();
152 } 170 }
153 171
172 GPUFeatureStatus GetGpuFeatureStatus(const GPUInfo& gpu_info,
173 const base::CommandLine& command_line) {
174 GPUFeatureStatus feature_status;
175 std::unique_ptr<GpuBlacklist> list(GpuBlacklist::Create());
176 list->LoadList(kSoftwareRenderingListJson, GpuControlList::kCurrentOsOnly);
177 feature_status.blacklisted_features =
178 list->MakeDecision(GpuControlList::kOsAny, std::string(), gpu_info);
179
180 // Currently only used for GPU rasterization.
181 if (IsGpuRasterizationEnabled(feature_status.blacklisted_features,
182 command_line)) {
183 feature_status.enabled_features.insert(GPU_FEATURE_TYPE_GPU_RASTERIZATION);
184 }
185
186 return feature_status;
187 }
188
154 } // namespace gpu 189 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698