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

Side by Side Diff: content/browser/gpu/compositor_util.cc

Issue 519923002: Make the number of raster threads appear in chrome://gpu. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: numrasterthreads: . Created 6 years, 3 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 "content/browser/gpu/compositor_util.h" 5 #include "content/browser/gpu/compositor_util.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/strings/string_number_conversions.h"
10 #include "build/build_config.h" 11 #include "build/build_config.h"
11 #include "cc/base/switches.h" 12 #include "cc/base/switches.h"
12 #include "content/browser/gpu/gpu_data_manager_impl.h" 13 #include "content/browser/gpu/gpu_data_manager_impl.h"
13 #include "content/public/common/content_switches.h" 14 #include "content/public/common/content_switches.h"
14 #include "gpu/config/gpu_feature_type.h" 15 #include "gpu/config/gpu_feature_type.h"
15 16
16 namespace content { 17 namespace content {
17 18
18 namespace { 19 namespace {
19 20
20 static bool IsGpuRasterizationBlacklisted() { 21 static bool IsGpuRasterizationBlacklisted() {
21 GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance(); 22 GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance();
22 return manager->IsFeatureBlacklisted( 23 return manager->IsFeatureBlacklisted(
23 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION); 24 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION);
24 } 25 }
25 26
26 const char* kGpuCompositingFeatureName = "gpu_compositing"; 27 const char* kGpuCompositingFeatureName = "gpu_compositing";
27 const char* kWebGLFeatureName = "webgl"; 28 const char* kWebGLFeatureName = "webgl";
28 const char* kRasterizationFeatureName = "rasterization"; 29 const char* kRasterizationFeatureName = "rasterization";
29 const char* kThreadedRasterizationFeatureName = "threaded_rasterization"; 30 const char* kThreadedRasterizationFeatureName = "threaded_rasterization";
31 const char* kMultipleRasterThreadsFeatureName = "multiple_raster_threads";
32
33 const int kMinRasterThreads = 1;
34 const int kMaxRasterThreads = 64;
30 35
31 struct GpuFeatureInfo { 36 struct GpuFeatureInfo {
32 std::string name; 37 std::string name;
33 bool blocked; 38 bool blocked;
34 bool disabled; 39 bool disabled;
35 std::string disabled_description; 40 std::string disabled_description;
36 bool fallback_to_software; 41 bool fallback_to_software;
37 }; 42 };
38 43
39 const GpuFeatureInfo GetGpuFeatureInfo(size_t index, bool* eof) { 44 const GpuFeatureInfo GetGpuFeatureInfo(size_t index, bool* eof) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 " or command line.", 140 " or command line.",
136 true 141 true
137 }, 142 },
138 { 143 {
139 kThreadedRasterizationFeatureName, 144 kThreadedRasterizationFeatureName,
140 false, 145 false,
141 !IsImplSidePaintingEnabled(), 146 !IsImplSidePaintingEnabled(),
142 "Threaded rasterization has not been enabled or" 147 "Threaded rasterization has not been enabled or"
143 " is not supported by the current system.", 148 " is not supported by the current system.",
144 false 149 false
145 } 150 },
146 151 {
152 kMultipleRasterThreadsFeatureName,
153 false,
154 NumberOfRendererRasterThreads() == 1,
155 "Raster is using a single thread.",
156 false
157 },
147 }; 158 };
148 DCHECK(index < arraysize(kGpuFeatureInfo)); 159 DCHECK(index < arraysize(kGpuFeatureInfo));
149 *eof = (index == arraysize(kGpuFeatureInfo) - 1); 160 *eof = (index == arraysize(kGpuFeatureInfo) - 1);
150 return kGpuFeatureInfo[index]; 161 return kGpuFeatureInfo[index];
151 } 162 }
152 163
153 } // namespace 164 } // namespace
154 165
155 bool IsPinchVirtualViewportEnabled() { 166 bool IsPinchVirtualViewportEnabled() {
156 const base::CommandLine& command_line = 167 const base::CommandLine& command_line =
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 return false; 204 return false;
194 else if (command_line.HasSwitch(switches::kEnableImplSidePainting)) 205 else if (command_line.HasSwitch(switches::kEnableImplSidePainting))
195 return true; 206 return true;
196 else if (command_line.HasSwitch( 207 else if (command_line.HasSwitch(
197 switches::kEnableBleedingEdgeRenderingFastPaths)) 208 switches::kEnableBleedingEdgeRenderingFastPaths))
198 return true; 209 return true;
199 210
200 return true; 211 return true;
201 } 212 }
202 213
214 int NumberOfRendererRasterThreads() {
215 int num_raster_threads = 1;
216
217 int force_num_raster_threads = ForceNumberOfRendererRasterThreads();
218 if (force_num_raster_threads)
219 num_raster_threads = force_num_raster_threads;
220
221 return num_raster_threads;
222 }
223
224 int ForceNumberOfRendererRasterThreads() {
225 const base::CommandLine& command_line =
226 *base::CommandLine::ForCurrentProcess();
227
228 if (!command_line.HasSwitch(switches::kNumRasterThreads))
229 return 0;
230 std::string string_value =
231 command_line.GetSwitchValueASCII(switches::kNumRasterThreads);
232 int force_num_raster_threads = 0;
233 if (base::StringToInt(string_value, &force_num_raster_threads) &&
234 force_num_raster_threads >= kMinRasterThreads &&
235 force_num_raster_threads <= kMaxRasterThreads) {
236 return force_num_raster_threads;
237 } else {
238 LOG(WARNING) << "Failed to parse switch " <<
239 switches::kNumRasterThreads << ": " << string_value;
240 return 0;
241 }
242 }
243
203 bool IsGpuRasterizationEnabled() { 244 bool IsGpuRasterizationEnabled() {
204 const base::CommandLine& command_line = 245 const base::CommandLine& command_line =
205 *base::CommandLine::ForCurrentProcess(); 246 *base::CommandLine::ForCurrentProcess();
206 247
207 if (!IsImplSidePaintingEnabled()) 248 if (!IsImplSidePaintingEnabled())
208 return false; 249 return false;
209 250
210 if (command_line.HasSwitch(switches::kDisableGpuRasterization)) 251 if (command_line.HasSwitch(switches::kDisableGpuRasterization))
211 return false; 252 return false;
212 else if (command_line.HasSwitch(switches::kEnableGpuRasterization)) 253 else if (command_line.HasSwitch(switches::kEnableGpuRasterization))
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 status = "disabled"; 286 status = "disabled";
246 if (gpu_feature_info.fallback_to_software) 287 if (gpu_feature_info.fallback_to_software)
247 status += "_software"; 288 status += "_software";
248 else 289 else
249 status += "_off"; 290 status += "_off";
250 if (gpu_feature_info.name == kThreadedRasterizationFeatureName) 291 if (gpu_feature_info.name == kThreadedRasterizationFeatureName)
251 status += "_ok"; 292 status += "_ok";
252 } else if (gpu_feature_info.blocked || 293 } else if (gpu_feature_info.blocked ||
253 gpu_access_blocked) { 294 gpu_access_blocked) {
254 status = "unavailable"; 295 status = "unavailable";
255 if (gpu_feature_info.fallback_to_software) { 296 if (gpu_feature_info.fallback_to_software)
256 status += "_software"; 297 status += "_software";
257 } else 298 else
258 status += "_off"; 299 status += "_off";
259 } else { 300 } else {
260 status = "enabled"; 301 status = "enabled";
261 if (gpu_feature_info.name == kWebGLFeatureName && 302 if (gpu_feature_info.name == kWebGLFeatureName &&
262 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) 303 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING))
263 status += "_readback"; 304 status += "_readback";
264 if (gpu_feature_info.name == kRasterizationFeatureName) { 305 if (gpu_feature_info.name == kRasterizationFeatureName) {
265 if (IsForceGpuRasterizationEnabled()) 306 if (IsForceGpuRasterizationEnabled())
266 status += "_force"; 307 status += "_force";
267 } 308 }
268 if (gpu_feature_info.name == kThreadedRasterizationFeatureName) 309 if (gpu_feature_info.name == kMultipleRasterThreadsFeatureName) {
310 if (ForceNumberOfRendererRasterThreads() > 0)
311 status += "_force";
312 }
313 if (gpu_feature_info.name == kThreadedRasterizationFeatureName ||
314 gpu_feature_info.name == kMultipleRasterThreadsFeatureName)
269 status += "_on"; 315 status += "_on";
270 } 316 }
271 if (gpu_feature_info.name == kWebGLFeatureName && 317 if (gpu_feature_info.name == kWebGLFeatureName &&
272 (gpu_feature_info.blocked || gpu_access_blocked) && 318 (gpu_feature_info.blocked || gpu_access_blocked) &&
273 manager->ShouldUseSwiftShader()) { 319 manager->ShouldUseSwiftShader()) {
274 status = "unavailable_software"; 320 status = "unavailable_software";
275 } 321 }
276 322
277 feature_status_dict->SetString( 323 feature_status_dict->SetString(
278 gpu_feature_info.name.c_str(), status.c_str()); 324 gpu_feature_info.name.c_str(), status.c_str());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 return problem_list; 367 return problem_list;
322 } 368 }
323 369
324 base::Value* GetDriverBugWorkarounds() { 370 base::Value* GetDriverBugWorkarounds() {
325 base::ListValue* workaround_list = new base::ListValue(); 371 base::ListValue* workaround_list = new base::ListValue();
326 GpuDataManagerImpl::GetInstance()->GetDriverBugWorkarounds(workaround_list); 372 GpuDataManagerImpl::GetInstance()->GetDriverBugWorkarounds(workaround_list);
327 return workaround_list; 373 return workaround_list;
328 } 374 }
329 375
330 } // namespace content 376 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698