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/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 "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION_FIELD_TRIAL); | 30 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION_FIELD_TRIAL); |
31 } | 31 } |
32 | 32 |
33 return manager->IsFeatureBlacklisted( | 33 return manager->IsFeatureBlacklisted( |
34 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION); | 34 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION); |
35 } | 35 } |
36 | 36 |
37 const char* kGpuCompositingFeatureName = "gpu_compositing"; | 37 const char* kGpuCompositingFeatureName = "gpu_compositing"; |
38 const char* kWebGLFeatureName = "webgl"; | 38 const char* kWebGLFeatureName = "webgl"; |
39 const char* kRasterizationFeatureName = "rasterization"; | 39 const char* kRasterizationFeatureName = "rasterization"; |
| 40 const char* kThreadedRasterizationFeatureName = "threaded_rasterization"; |
40 | 41 |
41 struct GpuFeatureInfo { | 42 struct GpuFeatureInfo { |
42 std::string name; | 43 std::string name; |
43 uint32 blocked; | 44 bool blocked; |
44 bool disabled; | 45 bool disabled; |
45 std::string disabled_description; | 46 std::string disabled_description; |
46 bool fallback_to_software; | 47 bool fallback_to_software; |
47 }; | 48 }; |
48 | 49 |
49 const GpuFeatureInfo GetGpuFeatureInfo(size_t index, bool* eof) { | 50 const GpuFeatureInfo GetGpuFeatureInfo(size_t index, bool* eof) { |
50 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 51 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
51 GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance(); | 52 GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance(); |
52 | 53 |
53 const GpuFeatureInfo kGpuFeatureInfo[] = { | 54 const GpuFeatureInfo kGpuFeatureInfo[] = { |
(...skipping 23 matching lines...) Expand all Loading... |
77 command_line.HasSwitch(switches::kDisableExperimentalWebGL), | 78 command_line.HasSwitch(switches::kDisableExperimentalWebGL), |
78 "WebGL has been disabled, either via about:flags or command line.", | 79 "WebGL has been disabled, either via about:flags or command line.", |
79 false | 80 false |
80 }, | 81 }, |
81 { | 82 { |
82 "flash_3d", | 83 "flash_3d", |
83 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_FLASH3D), | 84 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_FLASH3D), |
84 command_line.HasSwitch(switches::kDisableFlash3d), | 85 command_line.HasSwitch(switches::kDisableFlash3d), |
85 "Using 3d in flash has been disabled, either via about:flags or" | 86 "Using 3d in flash has been disabled, either via about:flags or" |
86 " command line.", | 87 " command line.", |
87 false | 88 true |
88 }, | 89 }, |
89 { | 90 { |
90 "flash_stage3d", | 91 "flash_stage3d", |
91 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_FLASH_STAGE3D), | 92 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_FLASH_STAGE3D), |
92 command_line.HasSwitch(switches::kDisableFlashStage3d), | 93 command_line.HasSwitch(switches::kDisableFlashStage3d), |
93 "Using Stage3d in Flash has been disabled, either via about:flags or" | 94 "Using Stage3d in Flash has been disabled, either via about:flags or" |
94 " command line.", | 95 " command line.", |
95 false | 96 true |
96 }, | 97 }, |
97 { | 98 { |
98 "flash_stage3d_baseline", | 99 "flash_stage3d_baseline", |
99 manager->IsFeatureBlacklisted( | 100 manager->IsFeatureBlacklisted( |
100 gpu::GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE) || | 101 gpu::GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE) || |
101 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_FLASH_STAGE3D), | 102 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_FLASH_STAGE3D), |
102 command_line.HasSwitch(switches::kDisableFlashStage3d), | 103 command_line.HasSwitch(switches::kDisableFlashStage3d), |
103 "Using Stage3d Baseline profile in Flash has been disabled, either" | 104 "Using Stage3d Baseline profile in Flash has been disabled, either" |
104 " via about:flags or command line.", | 105 " via about:flags or command line.", |
105 false | 106 true |
106 }, | 107 }, |
107 { | 108 { |
108 "video_decode", | 109 "video_decode", |
109 manager->IsFeatureBlacklisted( | 110 manager->IsFeatureBlacklisted( |
110 gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE), | 111 gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE), |
111 command_line.HasSwitch(switches::kDisableAcceleratedVideoDecode), | 112 command_line.HasSwitch(switches::kDisableAcceleratedVideoDecode), |
112 "Accelerated video decode has been disabled, either via about:flags" | 113 "Accelerated video decode has been disabled, either via about:flags" |
113 " or command line.", | 114 " or command line.", |
114 true | 115 true |
115 }, | 116 }, |
(...skipping 17 matching lines...) Expand all Loading... |
133 " line.", | 134 " line.", |
134 false | 135 false |
135 }, | 136 }, |
136 #endif | 137 #endif |
137 { | 138 { |
138 kRasterizationFeatureName, | 139 kRasterizationFeatureName, |
139 IsGpuRasterizationBlacklisted() && | 140 IsGpuRasterizationBlacklisted() && |
140 !IsGpuRasterizationEnabled() && !IsForceGpuRasterizationEnabled(), | 141 !IsGpuRasterizationEnabled() && !IsForceGpuRasterizationEnabled(), |
141 !IsGpuRasterizationEnabled() && !IsForceGpuRasterizationEnabled() && | 142 !IsGpuRasterizationEnabled() && !IsForceGpuRasterizationEnabled() && |
142 !IsGpuRasterizationBlacklisted(), | 143 !IsGpuRasterizationBlacklisted(), |
143 "Accelerated rasterization has not been enabled or" | 144 "Accelerated rasterization has been disabled, either via about:flags" |
| 145 " or command line.", |
| 146 true |
| 147 }, |
| 148 { |
| 149 kThreadedRasterizationFeatureName, |
| 150 false, |
| 151 !IsImplSidePaintingEnabled(), |
| 152 "Threaded rasterization has not been enabled or" |
144 " is not supported by the current system.", | 153 " is not supported by the current system.", |
145 true | 154 false |
146 } | 155 } |
| 156 |
147 }; | 157 }; |
148 DCHECK(index < arraysize(kGpuFeatureInfo)); | 158 DCHECK(index < arraysize(kGpuFeatureInfo)); |
149 *eof = (index == arraysize(kGpuFeatureInfo) - 1); | 159 *eof = (index == arraysize(kGpuFeatureInfo) - 1); |
150 return kGpuFeatureInfo[index]; | 160 return kGpuFeatureInfo[index]; |
151 } | 161 } |
152 | 162 |
153 } // namespace | 163 } // namespace |
154 | 164 |
155 bool IsPinchVirtualViewportEnabled() { | 165 bool IsPinchVirtualViewportEnabled() { |
156 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 166 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 !manager->GpuAccessAllowed(&gpu_access_blocked_reason); | 271 !manager->GpuAccessAllowed(&gpu_access_blocked_reason); |
262 | 272 |
263 base::DictionaryValue* feature_status_dict = new base::DictionaryValue(); | 273 base::DictionaryValue* feature_status_dict = new base::DictionaryValue(); |
264 | 274 |
265 bool eof = false; | 275 bool eof = false; |
266 for (size_t i = 0; !eof; ++i) { | 276 for (size_t i = 0; !eof; ++i) { |
267 const GpuFeatureInfo gpu_feature_info = GetGpuFeatureInfo(i, &eof); | 277 const GpuFeatureInfo gpu_feature_info = GetGpuFeatureInfo(i, &eof); |
268 std::string status; | 278 std::string status; |
269 if (gpu_feature_info.disabled) { | 279 if (gpu_feature_info.disabled) { |
270 status = "disabled"; | 280 status = "disabled"; |
271 if (gpu_feature_info.name == kRasterizationFeatureName) { | |
272 if (IsImplSidePaintingEnabled()) | |
273 status += "_software_multithreaded"; | |
274 else | |
275 status += "_software"; | |
276 } else { | |
277 if (gpu_feature_info.fallback_to_software) | |
278 status += "_software"; | |
279 else | |
280 status += "_off"; | |
281 } | |
282 } else if (manager->ShouldUseSwiftShader()) { | |
283 status = "unavailable_software"; | |
284 } else if (gpu_feature_info.blocked || | |
285 gpu_access_blocked) { | |
286 status = "unavailable"; | |
287 if (gpu_feature_info.fallback_to_software) | 281 if (gpu_feature_info.fallback_to_software) |
288 status += "_software"; | 282 status += "_software"; |
289 else | 283 else |
290 status += "_off"; | 284 status += "_off"; |
| 285 if (gpu_feature_info.name == kThreadedRasterizationFeatureName) |
| 286 status += "_ok"; |
| 287 } else if (gpu_feature_info.blocked || |
| 288 gpu_access_blocked) { |
| 289 status = "unavailable"; |
| 290 if (gpu_feature_info.fallback_to_software) { |
| 291 status += "_software"; |
| 292 } else |
| 293 status += "_off"; |
291 } else { | 294 } else { |
292 status = "enabled"; | 295 status = "enabled"; |
293 if (gpu_feature_info.name == kWebGLFeatureName && | 296 if (gpu_feature_info.name == kWebGLFeatureName && |
294 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) | 297 manager->IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) |
295 status += "_readback"; | 298 status += "_readback"; |
296 if (gpu_feature_info.name == kRasterizationFeatureName) { | 299 if (gpu_feature_info.name == kRasterizationFeatureName) { |
297 if (IsForceGpuRasterizationEnabled()) | 300 if (IsForceGpuRasterizationEnabled()) |
298 status += "_force"; | 301 status += "_force"; |
299 } | 302 } |
| 303 if (gpu_feature_info.name == kThreadedRasterizationFeatureName) |
| 304 status += "_on"; |
300 } | 305 } |
301 if (gpu_feature_info.name == kGpuCompositingFeatureName) { | 306 if (gpu_feature_info.name == kGpuCompositingFeatureName) { |
302 if (IsThreadedCompositingEnabled()) | 307 if (IsThreadedCompositingEnabled()) |
303 status += "_threaded"; | 308 status += "_threaded"; |
304 } | 309 } |
| 310 if (gpu_feature_info.name == kWebGLFeatureName && |
| 311 (gpu_feature_info.blocked || gpu_access_blocked) && |
| 312 manager->ShouldUseSwiftShader()) { |
| 313 status = "unavailable_software"; |
| 314 } |
| 315 |
305 feature_status_dict->SetString( | 316 feature_status_dict->SetString( |
306 gpu_feature_info.name.c_str(), status.c_str()); | 317 gpu_feature_info.name.c_str(), status.c_str()); |
307 } | 318 } |
308 return feature_status_dict; | 319 return feature_status_dict; |
309 } | 320 } |
310 | 321 |
311 base::Value* GetProblems() { | 322 base::Value* GetProblems() { |
312 GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance(); | 323 GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance(); |
313 std::string gpu_access_blocked_reason; | 324 std::string gpu_access_blocked_reason; |
314 bool gpu_access_blocked = | 325 bool gpu_access_blocked = |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 return problem_list; | 360 return problem_list; |
350 } | 361 } |
351 | 362 |
352 base::Value* GetDriverBugWorkarounds() { | 363 base::Value* GetDriverBugWorkarounds() { |
353 base::ListValue* workaround_list = new base::ListValue(); | 364 base::ListValue* workaround_list = new base::ListValue(); |
354 GpuDataManagerImpl::GetInstance()->GetDriverBugWorkarounds(workaround_list); | 365 GpuDataManagerImpl::GetInstance()->GetDriverBugWorkarounds(workaround_list); |
355 return workaround_list; | 366 return workaround_list; |
356 } | 367 } |
357 | 368 |
358 } // namespace content | 369 } // namespace content |
OLD | NEW |