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

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

Issue 2756793003: Move GPU blacklist and driver bug workaround list from json to data struct. (Closed)
Patch Set: pure rebase Created 3 years, 8 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) 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 <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 16 matching lines...) Expand all
27 #include "content/common/gpu_host_messages.h" 27 #include "content/common/gpu_host_messages.h"
28 #include "content/public/browser/browser_thread.h" 28 #include "content/public/browser/browser_thread.h"
29 #include "content/public/browser/gpu_data_manager_observer.h" 29 #include "content/public/browser/gpu_data_manager_observer.h"
30 #include "content/public/common/content_client.h" 30 #include "content/public/common/content_client.h"
31 #include "content/public/common/content_constants.h" 31 #include "content/public/common/content_constants.h"
32 #include "content/public/common/content_features.h" 32 #include "content/public/common/content_features.h"
33 #include "content/public/common/content_switches.h" 33 #include "content/public/common/content_switches.h"
34 #include "content/public/common/web_preferences.h" 34 #include "content/public/common/web_preferences.h"
35 #include "gpu/command_buffer/service/gpu_preferences.h" 35 #include "gpu/command_buffer/service/gpu_preferences.h"
36 #include "gpu/command_buffer/service/gpu_switches.h" 36 #include "gpu/command_buffer/service/gpu_switches.h"
37 #include "gpu/config/gpu_control_list_jsons.h" 37 #include "gpu/config/gpu_driver_bug_list_autogen.h"
38 #include "gpu/config/gpu_driver_bug_workaround_type.h" 38 #include "gpu/config/gpu_driver_bug_workaround_type.h"
39 #include "gpu/config/gpu_feature_type.h"
40 #include "gpu/config/gpu_info_collector.h" 39 #include "gpu/config/gpu_info_collector.h"
41 #include "gpu/config/gpu_switches.h" 40 #include "gpu/config/gpu_switches.h"
42 #include "gpu/config/gpu_util.h" 41 #include "gpu/config/gpu_util.h"
42 #include "gpu/config/software_rendering_list_autogen.h"
43 #include "gpu/ipc/common/memory_stats.h" 43 #include "gpu/ipc/common/memory_stats.h"
44 #include "gpu/ipc/service/switches.h" 44 #include "gpu/ipc/service/switches.h"
45 #include "media/media_features.h" 45 #include "media/media_features.h"
46 #include "ui/base/ui_base_switches.h" 46 #include "ui/base/ui_base_switches.h"
47 #include "ui/gl/gl_features.h" 47 #include "ui/gl/gl_features.h"
48 #include "ui/gl/gl_implementation.h" 48 #include "ui/gl/gl_implementation.h"
49 #include "ui/gl/gl_switches.h" 49 #include "ui/gl/gl_switches.h"
50 #include "ui/gl/gpu_switching_manager.h" 50 #include "ui/gl/gpu_switching_manager.h"
51 51
52 #if defined(USE_OZONE) 52 #if defined(USE_OZONE)
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 const gpu::GpuBlacklist* blacklist, 133 const gpu::GpuBlacklist* blacklist,
134 const std::set<int>& blacklisted_features) { 134 const std::set<int>& blacklisted_features) {
135 uint32_t max_entry_id = blacklist->max_entry_id(); 135 uint32_t max_entry_id = blacklist->max_entry_id();
136 if (max_entry_id == 0) { 136 if (max_entry_id == 0) {
137 // GPU Blacklist was not loaded. No need to go further. 137 // GPU Blacklist was not loaded. No need to go further.
138 return; 138 return;
139 } 139 }
140 140
141 const base::CommandLine& command_line = 141 const base::CommandLine& command_line =
142 *base::CommandLine::ForCurrentProcess(); 142 *base::CommandLine::ForCurrentProcess();
143 bool disabled = false;
144 143
145 // Use entry 0 to capture the total number of times that data 144 // Use entry 0 to capture the total number of times that data
146 // was recorded in this histogram in order to have a convenient 145 // was recorded in this histogram in order to have a convenient
147 // denominator to compute blacklist percentages for the rest of the 146 // denominator to compute blacklist percentages for the rest of the
148 // entries. 147 // entries.
149 UMA_HISTOGRAM_EXACT_LINEAR("GPU.BlacklistTestResultsPerEntry", 0, 148 UMA_HISTOGRAM_EXACT_LINEAR("GPU.BlacklistTestResultsPerEntry", 0,
150 max_entry_id + 1); 149 max_entry_id + 1);
151 150
152 if (blacklisted_features.size() != 0) { 151 if (blacklisted_features.size() != 0) {
153 std::vector<uint32_t> flag_entries; 152 std::vector<uint32_t> flag_entries;
154 blacklist->GetDecisionEntries(&flag_entries, disabled); 153 blacklist->GetDecisionEntries(&flag_entries);
155 DCHECK_GT(flag_entries.size(), 0u); 154 DCHECK_GT(flag_entries.size(), 0u);
156 for (size_t i = 0; i < flag_entries.size(); ++i) { 155 for (size_t i = 0; i < flag_entries.size(); ++i) {
157 UMA_HISTOGRAM_EXACT_LINEAR("GPU.BlacklistTestResultsPerEntry", 156 UMA_HISTOGRAM_EXACT_LINEAR("GPU.BlacklistTestResultsPerEntry",
158 flag_entries[i], max_entry_id + 1); 157 flag_entries[i], max_entry_id + 1);
159 } 158 }
160 } 159 }
161 160
162 // This counts how many users are affected by a disabled entry - this allows
163 // us to understand the impact of an entry before enable it.
164 std::vector<uint32_t> flag_disabled_entries;
165 disabled = true;
166 blacklist->GetDecisionEntries(&flag_disabled_entries, disabled);
167 for (uint32_t disabled_entry : flag_disabled_entries) {
168 UMA_HISTOGRAM_EXACT_LINEAR("GPU.BlacklistTestResultsPerDisabledEntry",
169 disabled_entry, max_entry_id + 1);
170 }
171
172 const gpu::GpuFeatureType kGpuFeatures[] = { 161 const gpu::GpuFeatureType kGpuFeatures[] = {
173 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, 162 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
174 gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING, 163 gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING,
175 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION, 164 gpu::GPU_FEATURE_TYPE_GPU_RASTERIZATION,
176 gpu::GPU_FEATURE_TYPE_ACCELERATED_WEBGL, gpu::GPU_FEATURE_TYPE_WEBGL2}; 165 gpu::GPU_FEATURE_TYPE_ACCELERATED_WEBGL, gpu::GPU_FEATURE_TYPE_WEBGL2};
177 const std::string kGpuBlacklistFeatureHistogramNames[] = { 166 const std::string kGpuBlacklistFeatureHistogramNames[] = {
178 "GPU.BlacklistFeatureTestResults.Accelerated2dCanvas", 167 "GPU.BlacklistFeatureTestResults.Accelerated2dCanvas",
179 "GPU.BlacklistFeatureTestResults.GpuCompositing", 168 "GPU.BlacklistFeatureTestResults.GpuCompositing",
180 "GPU.BlacklistFeatureTestResults.GpuRasterization", 169 "GPU.BlacklistFeatureTestResults.GpuRasterization",
181 "GPU.BlacklistFeatureTestResults.Webgl", 170 "GPU.BlacklistFeatureTestResults.Webgl",
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 [](const gpu::GPUInfo& gpu_info) { 286 [](const gpu::GPUInfo& gpu_info) {
298 TRACE_EVENT0("test_gpu", "OnGraphicsInfoCollected"); 287 TRACE_EVENT0("test_gpu", "OnGraphicsInfoCollected");
299 GpuDataManagerImpl::GetInstance()->UpdateGpuInfo(gpu_info); 288 GpuDataManagerImpl::GetInstance()->UpdateGpuInfo(gpu_info);
300 }, 289 },
301 gpu_info)); 290 gpu_info));
302 } 291 }
303 292
304 } // namespace anonymous 293 } // namespace anonymous
305 294
306 void GpuDataManagerImplPrivate::InitializeForTesting( 295 void GpuDataManagerImplPrivate::InitializeForTesting(
307 const std::string& gpu_blacklist_json, 296 const gpu::GpuControlListData& gpu_blacklist_data,
308 const gpu::GPUInfo& gpu_info) { 297 const gpu::GPUInfo& gpu_info) {
309 // This function is for testing only, so disable histograms. 298 // This function is for testing only, so disable histograms.
310 update_histograms_ = false; 299 update_histograms_ = false;
311 300
312 // Prevent all further initialization. 301 // Prevent all further initialization.
313 finalized_ = true; 302 finalized_ = true;
314 303
315 InitializeImpl(gpu_blacklist_json, std::string(), gpu_info); 304 gpu::GpuControlListData gpu_driver_bug_list_data;
305 InitializeImpl(gpu_blacklist_data, gpu_driver_bug_list_data, gpu_info);
316 } 306 }
317 307
318 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { 308 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const {
319 #if defined(OS_CHROMEOS) 309 #if defined(OS_CHROMEOS)
320 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING && 310 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING &&
321 base::CommandLine::ForCurrentProcess()->HasSwitch( 311 base::CommandLine::ForCurrentProcess()->HasSwitch(
322 switches::kDisablePanelFitting)) { 312 switches::kDisablePanelFitting)) {
323 return true; 313 return true;
324 } 314 }
325 #endif // OS_CHROMEOS 315 #endif // OS_CHROMEOS
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 } 607 }
618 #if defined(ARCH_CPU_X86_FAMILY) 608 #if defined(ARCH_CPU_X86_FAMILY)
619 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) { 609 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) {
620 gpu_info.context_info_state = gpu::kCollectInfoNonFatalFailure; 610 gpu_info.context_info_state = gpu::kCollectInfoNonFatalFailure;
621 #if defined(OS_WIN) 611 #if defined(OS_WIN)
622 gpu_info.dx_diagnostics_info_state = gpu::kCollectInfoNonFatalFailure; 612 gpu_info.dx_diagnostics_info_state = gpu::kCollectInfoNonFatalFailure;
623 #endif // OS_WIN 613 #endif // OS_WIN
624 } 614 }
625 #endif // ARCH_CPU_X86_FAMILY 615 #endif // ARCH_CPU_X86_FAMILY
626 616
627 std::string gpu_blacklist_string; 617 gpu::GpuControlListData gpu_blacklist_data;
628 std::string gpu_driver_bug_list_string;
629 if (!force_software_gl && 618 if (!force_software_gl &&
630 !command_line->HasSwitch(switches::kIgnoreGpuBlacklist) && 619 !command_line->HasSwitch(switches::kIgnoreGpuBlacklist) &&
631 !command_line->HasSwitch(switches::kUseGpuInTests)) { 620 !command_line->HasSwitch(switches::kUseGpuInTests)) {
632 gpu_blacklist_string = gpu::kSoftwareRenderingListJson; 621 gpu_blacklist_data = {gpu::kSoftwareRenderingListVersion,
622 gpu::kSoftwareRenderingListEntryCount,
623 gpu::kSoftwareRenderingListEntries};
633 } 624 }
625 gpu::GpuControlListData gpu_driver_bug_list_data;
634 if (!force_software_gl && 626 if (!force_software_gl &&
635 !command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { 627 !command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) {
636 gpu_driver_bug_list_string = gpu::kGpuDriverBugListJson; 628 gpu_driver_bug_list_data = {gpu::kGpuDriverBugListVersion,
629 gpu::kGpuDriverBugListEntryCount,
630 gpu::kGpuDriverBugListEntries};
637 } 631 }
638 InitializeImpl(gpu_blacklist_string, 632 InitializeImpl(gpu_blacklist_data, gpu_driver_bug_list_data, gpu_info);
639 gpu_driver_bug_list_string,
640 gpu_info);
641 633
642 if (in_process_gpu_) { 634 if (in_process_gpu_) {
643 command_line->AppendSwitch(switches::kDisableGpuWatchdog); 635 command_line->AppendSwitch(switches::kDisableGpuWatchdog);
644 AppendGpuCommandLine(command_line, nullptr); 636 AppendGpuCommandLine(command_line, nullptr);
645 } 637 }
646 } 638 }
647 639
648 void GpuDataManagerImplPrivate::UpdateGpuInfoHelper() { 640 void GpuDataManagerImplPrivate::UpdateGpuInfoHelper() {
649 GetContentClient()->SetGpuInfo(gpu_info_); 641 GetContentClient()->SetGpuInfo(gpu_info_);
650 642
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 } 1182 }
1191 } 1183 }
1192 1184
1193 GpuDataManagerImplPrivate::~GpuDataManagerImplPrivate() { 1185 GpuDataManagerImplPrivate::~GpuDataManagerImplPrivate() {
1194 #if defined(OS_MACOSX) 1186 #if defined(OS_MACOSX)
1195 CGDisplayRemoveReconfigurationCallback(DisplayReconfigCallback, owner_); 1187 CGDisplayRemoveReconfigurationCallback(DisplayReconfigCallback, owner_);
1196 #endif 1188 #endif
1197 } 1189 }
1198 1190
1199 void GpuDataManagerImplPrivate::InitializeImpl( 1191 void GpuDataManagerImplPrivate::InitializeImpl(
1200 const std::string& gpu_blacklist_json, 1192 const gpu::GpuControlListData& gpu_blacklist_data,
1201 const std::string& gpu_driver_bug_list_json, 1193 const gpu::GpuControlListData& gpu_driver_bug_list_data,
1202 const gpu::GPUInfo& gpu_info) { 1194 const gpu::GPUInfo& gpu_info) {
1203 const bool log_gpu_control_list_decisions = 1195 const bool log_gpu_control_list_decisions =
1204 base::CommandLine::ForCurrentProcess()->HasSwitch( 1196 base::CommandLine::ForCurrentProcess()->HasSwitch(
1205 switches::kLogGpuControlListDecisions); 1197 switches::kLogGpuControlListDecisions);
1206 1198
1207 if (!gpu_blacklist_json.empty()) { 1199 if (gpu_blacklist_data.entry_count) {
1208 gpu_blacklist_.reset(gpu::GpuBlacklist::Create()); 1200 gpu_blacklist_ = gpu::GpuBlacklist::Create(gpu_blacklist_data);
1209 if (log_gpu_control_list_decisions) 1201 if (log_gpu_control_list_decisions)
1210 gpu_blacklist_->enable_control_list_logging("gpu_blacklist"); 1202 gpu_blacklist_->EnableControlListLogging("gpu_blacklist");
1211 bool success = gpu_blacklist_->LoadList(
1212 gpu_blacklist_json, gpu::GpuControlList::kCurrentOsOnly);
1213 DCHECK(success);
1214 } 1203 }
1215 if (!gpu_driver_bug_list_json.empty()) { 1204 if (gpu_driver_bug_list_data.entry_count) {
1216 gpu_driver_bug_list_.reset(gpu::GpuDriverBugList::Create()); 1205 gpu_driver_bug_list_ =
1206 gpu::GpuDriverBugList::Create(gpu_driver_bug_list_data);
1217 if (log_gpu_control_list_decisions) 1207 if (log_gpu_control_list_decisions)
1218 gpu_driver_bug_list_->enable_control_list_logging("gpu_driver_bug_list"); 1208 gpu_driver_bug_list_->EnableControlListLogging("gpu_driver_bug_list");
1219 bool success = gpu_driver_bug_list_->LoadList(
1220 gpu_driver_bug_list_json, gpu::GpuControlList::kCurrentOsOnly);
1221 DCHECK(success);
1222 } 1209 }
1223 1210
1224 gpu_info_ = gpu_info; 1211 gpu_info_ = gpu_info;
1225 UpdateGpuInfo(gpu_info); 1212 UpdateGpuInfo(gpu_info);
1226 UpdateGpuSwitchingManager(gpu_info); 1213 UpdateGpuSwitchingManager(gpu_info);
1227 UpdatePreliminaryBlacklistedFeatures(); 1214 UpdatePreliminaryBlacklistedFeatures();
1228 1215
1229 RunPostInitTasks(); 1216 RunPostInitTasks();
1230 } 1217 }
1231 1218
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 gpu_info_.context_info_state = gpu::kCollectInfoFatalFailure; 1379 gpu_info_.context_info_state = gpu::kCollectInfoFatalFailure;
1393 #if defined(OS_WIN) 1380 #if defined(OS_WIN)
1394 gpu_info_.dx_diagnostics_info_state = gpu::kCollectInfoFatalFailure; 1381 gpu_info_.dx_diagnostics_info_state = gpu::kCollectInfoFatalFailure;
1395 #endif 1382 #endif
1396 complete_gpu_info_already_requested_ = true; 1383 complete_gpu_info_already_requested_ = true;
1397 // Some observers might be waiting. 1384 // Some observers might be waiting.
1398 NotifyGpuInfoUpdate(); 1385 NotifyGpuInfoUpdate();
1399 } 1386 }
1400 1387
1401 } // namespace content 1388 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gpu/gpu_data_manager_impl_private.h ('k') | content/browser/gpu/gpu_data_manager_impl_private_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698