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

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

Issue 57633007: Merge gpu_switching_list into gpu_driver_bug_list. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: always apply user-specified switching option Created 7 years, 1 month 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 | Annotate | Revision Log
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 "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 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 std::stringstream size; 292 std::stringstream size;
293 size << default_tile_size; 293 size << default_tile_size;
294 command_line->AppendSwitchASCII( 294 command_line->AppendSwitchASCII(
295 switches::kDefaultTileWidth, size.str()); 295 switches::kDefaultTileWidth, size.str());
296 command_line->AppendSwitchASCII( 296 command_line->AppendSwitchASCII(
297 switches::kDefaultTileHeight, size.str()); 297 switches::kDefaultTileHeight, size.str());
298 } 298 }
299 } 299 }
300 #endif // OS_ANDROID 300 #endif // OS_ANDROID
301 301
302 // Overwrite force gpu workaround if a commandline switch exists.
303 void AdjustGpuSwitchingOption(std::set<int>* workarounds) {
304 DCHECK(workarounds);
305 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
306 std::string option = command_line.GetSwitchValueASCII(
307 switches::kGpuSwitching);
308 if (option == switches::kGpuSwitchingOptionNameForceDiscrete) {
309 workarounds->erase(gpu::FORCE_INTEGRATED_GPU);
310 workarounds->insert(gpu::FORCE_DISCRETE_GPU);
311 }
312 if (option == switches::kGpuSwitchingOptionNameForceIntegrated) {
no sievers 2013/11/05 19:41:23 nit: else if
Zhenyao Mo 2013/11/05 19:45:02 Done.
313 workarounds->erase(gpu::FORCE_DISCRETE_GPU);
314 workarounds->insert(gpu::FORCE_INTEGRATED_GPU);
315 }
316 }
317
302 // Block all domains' use of 3D APIs for this many milliseconds if 318 // Block all domains' use of 3D APIs for this many milliseconds if
303 // approaching a threshold where system stability might be compromised. 319 // approaching a threshold where system stability might be compromised.
304 const int64 kBlockAllDomainsMs = 10000; 320 const int64 kBlockAllDomainsMs = 10000;
305 const int kNumResetsWithinDuration = 1; 321 const int kNumResetsWithinDuration = 1;
306 322
307 // Enums for UMA histograms. 323 // Enums for UMA histograms.
308 enum BlockStatusHistogram { 324 enum BlockStatusHistogram {
309 BLOCK_STATUS_NOT_BLOCKED, 325 BLOCK_STATUS_NOT_BLOCKED,
310 BLOCK_STATUS_SPECIFIC_DOMAIN_BLOCKED, 326 BLOCK_STATUS_SPECIFIC_DOMAIN_BLOCKED,
311 BLOCK_STATUS_ALL_DOMAINS_BLOCKED, 327 BLOCK_STATUS_ALL_DOMAINS_BLOCKED,
312 BLOCK_STATUS_MAX 328 BLOCK_STATUS_MAX
313 }; 329 };
314 330
315 } // namespace anonymous 331 } // namespace anonymous
316 332
317 void GpuDataManagerImplPrivate::InitializeForTesting( 333 void GpuDataManagerImplPrivate::InitializeForTesting(
318 const std::string& gpu_blacklist_json, 334 const std::string& gpu_blacklist_json,
319 const gpu::GPUInfo& gpu_info) { 335 const gpu::GPUInfo& gpu_info) {
320 // This function is for testing only, so disable histograms. 336 // This function is for testing only, so disable histograms.
321 update_histograms_ = false; 337 update_histograms_ = false;
322 338
323 // Prevent all further initialization. 339 // Prevent all further initialization.
324 finalized_ = true; 340 finalized_ = true;
325 341
326 InitializeImpl(gpu_blacklist_json, std::string(), std::string(), gpu_info); 342 InitializeImpl(gpu_blacklist_json, std::string(), gpu_info);
327 } 343 }
328 344
329 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { 345 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const {
330 #if defined(OS_CHROMEOS) 346 #if defined(OS_CHROMEOS)
331 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING && 347 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING &&
332 CommandLine::ForCurrentProcess()->HasSwitch( 348 CommandLine::ForCurrentProcess()->HasSwitch(
333 switches::kDisablePanelFitting)) { 349 switches::kDisablePanelFitting)) {
334 return true; 350 return true;
335 } 351 }
336 #endif // OS_CHROMEOS 352 #endif // OS_CHROMEOS
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 TRACE_EVENT0("startup", 579 TRACE_EVENT0("startup",
564 "GpuDataManagerImpl::Initialize:CollectBasicGraphicsInfo"); 580 "GpuDataManagerImpl::Initialize:CollectBasicGraphicsInfo");
565 gpu::CollectBasicGraphicsInfo(&gpu_info); 581 gpu::CollectBasicGraphicsInfo(&gpu_info);
566 } 582 }
567 #if defined(ARCH_CPU_X86_FAMILY) 583 #if defined(ARCH_CPU_X86_FAMILY)
568 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) 584 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id)
569 gpu_info.finalized = true; 585 gpu_info.finalized = true;
570 #endif 586 #endif
571 587
572 std::string gpu_blacklist_string; 588 std::string gpu_blacklist_string;
573 std::string gpu_switching_list_string;
574 std::string gpu_driver_bug_list_string; 589 std::string gpu_driver_bug_list_string;
575 if (!command_line->HasSwitch(switches::kIgnoreGpuBlacklist) && 590 if (!command_line->HasSwitch(switches::kIgnoreGpuBlacklist) &&
576 !command_line->HasSwitch(switches::kUseGpuInTests)) { 591 !command_line->HasSwitch(switches::kUseGpuInTests)) {
577 gpu_blacklist_string = gpu::kSoftwareRenderingListJson; 592 gpu_blacklist_string = gpu::kSoftwareRenderingListJson;
578 gpu_switching_list_string = gpu::kGpuSwitchingListJson;
579 } 593 }
580 if (!command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) { 594 if (!command_line->HasSwitch(switches::kDisableGpuDriverBugWorkarounds)) {
581 gpu_driver_bug_list_string = gpu::kGpuDriverBugListJson; 595 gpu_driver_bug_list_string = gpu::kGpuDriverBugListJson;
582 } 596 }
583 InitializeImpl(gpu_blacklist_string, 597 InitializeImpl(gpu_blacklist_string,
584 gpu_switching_list_string,
585 gpu_driver_bug_list_string, 598 gpu_driver_bug_list_string,
586 gpu_info); 599 gpu_info);
587 } 600 }
588 601
589 void GpuDataManagerImplPrivate::UpdateGpuInfo(const gpu::GPUInfo& gpu_info) { 602 void GpuDataManagerImplPrivate::UpdateGpuInfo(const gpu::GPUInfo& gpu_info) {
590 // No further update of gpu_info if falling back to SwiftShader. 603 // No further update of gpu_info if falling back to SwiftShader.
591 if (use_swiftshader_) 604 if (use_swiftshader_)
592 return; 605 return;
593 606
594 gpu::MergeGPUInfo(&gpu_info_, gpu_info); 607 gpu::MergeGPUInfo(&gpu_info_, gpu_info);
595 complete_gpu_info_already_requested_ = 608 complete_gpu_info_already_requested_ =
596 complete_gpu_info_already_requested_ || gpu_info_.finalized; 609 complete_gpu_info_already_requested_ || gpu_info_.finalized;
597 610
598 GetContentClient()->SetGpuInfo(gpu_info_); 611 GetContentClient()->SetGpuInfo(gpu_info_);
599 612
600 if (gpu_blacklist_) { 613 if (gpu_blacklist_) {
601 std::set<int> features = gpu_blacklist_->MakeDecision( 614 std::set<int> features = gpu_blacklist_->MakeDecision(
602 gpu::GpuControlList::kOsAny, std::string(), gpu_info_); 615 gpu::GpuControlList::kOsAny, std::string(), gpu_info_);
603 if (update_histograms_) 616 if (update_histograms_)
604 UpdateStats(gpu_info_, gpu_blacklist_.get(), features); 617 UpdateStats(gpu_info_, gpu_blacklist_.get(), features);
605 618
606 UpdateBlacklistedFeatures(features); 619 UpdateBlacklistedFeatures(features);
607 } 620 }
608 if (gpu_switching_list_) {
609 std::set<int> option = gpu_switching_list_->MakeDecision(
610 gpu::GpuControlList::kOsAny, std::string(), gpu_info_);
611 if (option.size() == 1) {
612 // Blacklist decision should not overwrite commandline switch from users.
613 CommandLine* command_line = CommandLine::ForCurrentProcess();
614 if (!command_line->HasSwitch(switches::kGpuSwitching)) {
615 gpu_switching_ = static_cast<gpu::GpuSwitchingOption>(
616 *(option.begin()));
617 }
618 }
619 }
620 if (gpu_driver_bug_list_) { 621 if (gpu_driver_bug_list_) {
621 gpu_driver_bugs_ = gpu_driver_bug_list_->MakeDecision( 622 gpu_driver_bugs_ = gpu_driver_bug_list_->MakeDecision(
622 gpu::GpuControlList::kOsAny, std::string(), gpu_info_); 623 gpu::GpuControlList::kOsAny, std::string(), gpu_info_);
623 } 624 }
625 AdjustGpuSwitchingOption(&gpu_driver_bugs_);
624 626
625 // We have to update GpuFeatureType before notify all the observers. 627 // We have to update GpuFeatureType before notify all the observers.
626 NotifyGpuInfoUpdate(); 628 NotifyGpuInfoUpdate();
627 } 629 }
628 630
629 void GpuDataManagerImplPrivate::UpdateVideoMemoryUsageStats( 631 void GpuDataManagerImplPrivate::UpdateVideoMemoryUsageStats(
630 const GPUVideoMemoryUsageStats& video_memory_usage_stats) { 632 const GPUVideoMemoryUsageStats& video_memory_usage_stats) {
631 GpuDataManagerImpl::UnlockedSession session(owner_); 633 GpuDataManagerImpl::UnlockedSession session(owner_);
632 observer_list_->Notify(&GpuDataManagerObserver::OnVideoMemoryUsageStatsUpdate, 634 observer_list_->Notify(&GpuDataManagerObserver::OnVideoMemoryUsageStatsUpdate,
633 video_memory_usage_stats); 635 video_memory_usage_stats);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 IsFeatureBlacklisted( 698 IsFeatureBlacklisted(
697 gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) || 699 gpu::GPU_FEATURE_TYPE_ACCELERATED_COMPOSITING) ||
698 IsFeatureBlacklisted( 700 IsFeatureBlacklisted(
699 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) && 701 gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) &&
700 (use_gl == "any")) { 702 (use_gl == "any")) {
701 command_line->AppendSwitchASCII( 703 command_line->AppendSwitchASCII(
702 switches::kUseGL, gfx::kGLImplementationOSMesaName); 704 switches::kUseGL, gfx::kGLImplementationOSMesaName);
703 } else if (!use_gl.empty()) { 705 } else if (!use_gl.empty()) {
704 command_line->AppendSwitchASCII(switches::kUseGL, use_gl); 706 command_line->AppendSwitchASCII(switches::kUseGL, use_gl);
705 } 707 }
706 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) { 708 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus())
707 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "true"); 709 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "true");
708 switch (gpu_switching_) { 710 else
709 case gpu::GPU_SWITCHING_OPTION_FORCE_DISCRETE:
710 command_line->AppendSwitchASCII(switches::kGpuSwitching,
711 switches::kGpuSwitchingOptionNameForceDiscrete);
712 break;
713 case gpu::GPU_SWITCHING_OPTION_FORCE_INTEGRATED:
714 command_line->AppendSwitchASCII(switches::kGpuSwitching,
715 switches::kGpuSwitchingOptionNameForceIntegrated);
716 break;
717 case gpu::GPU_SWITCHING_OPTION_AUTOMATIC:
718 case gpu::GPU_SWITCHING_OPTION_UNKNOWN:
719 break;
720 }
721 } else {
722 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "false"); 711 command_line->AppendSwitchASCII(switches::kSupportsDualGpus, "false");
723 }
724 712
725 if (!swiftshader_path.empty()) { 713 if (!swiftshader_path.empty()) {
726 command_line->AppendSwitchPath(switches::kSwiftShaderPath, 714 command_line->AppendSwitchPath(switches::kSwiftShaderPath,
727 swiftshader_path); 715 swiftshader_path);
728 } 716 }
729 717
730 if (!gpu_driver_bugs_.empty()) { 718 if (!gpu_driver_bugs_.empty()) {
731 command_line->AppendSwitchASCII(switches::kGpuDriverBugWorkarounds, 719 command_line->AppendSwitchASCII(switches::kGpuDriverBugWorkarounds,
732 IntSetToString(gpu_driver_bugs_)); 720 IntSetToString(gpu_driver_bugs_));
733 } 721 }
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 prefs->accelerated_compositing_for_plugins_enabled = true; 821 prefs->accelerated_compositing_for_plugins_enabled = true;
834 prefs->accelerated_compositing_for_video_enabled = true; 822 prefs->accelerated_compositing_for_video_enabled = true;
835 } 823 }
836 824
837 #if defined(USE_AURA) 825 #if defined(USE_AURA)
838 if (!CanUseGpuBrowserCompositor()) 826 if (!CanUseGpuBrowserCompositor())
839 prefs->accelerated_2d_canvas_enabled = false; 827 prefs->accelerated_2d_canvas_enabled = false;
840 #endif 828 #endif
841 } 829 }
842 830
843 gpu::GpuSwitchingOption
844 GpuDataManagerImplPrivate::GetGpuSwitchingOption() const {
845 if (!ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus())
846 return gpu::GPU_SWITCHING_OPTION_UNKNOWN;
847 return gpu_switching_;
848 }
849
850 void GpuDataManagerImplPrivate::DisableHardwareAcceleration() { 831 void GpuDataManagerImplPrivate::DisableHardwareAcceleration() {
851 card_blacklisted_ = true; 832 card_blacklisted_ = true;
852 833
853 for (int i = 0; i < gpu::NUMBER_OF_GPU_FEATURE_TYPES; ++i) 834 for (int i = 0; i < gpu::NUMBER_OF_GPU_FEATURE_TYPES; ++i)
854 blacklisted_features_.insert(i); 835 blacklisted_features_.insert(i);
855 836
856 EnableSwiftShaderIfNecessary(); 837 EnableSwiftShaderIfNecessary();
857 NotifyGpuInfoUpdate(); 838 NotifyGpuInfoUpdate();
858 } 839 }
859 840
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 956
976 // static 957 // static
977 GpuDataManagerImplPrivate* GpuDataManagerImplPrivate::Create( 958 GpuDataManagerImplPrivate* GpuDataManagerImplPrivate::Create(
978 GpuDataManagerImpl* owner) { 959 GpuDataManagerImpl* owner) {
979 return new GpuDataManagerImplPrivate(owner); 960 return new GpuDataManagerImplPrivate(owner);
980 } 961 }
981 962
982 GpuDataManagerImplPrivate::GpuDataManagerImplPrivate( 963 GpuDataManagerImplPrivate::GpuDataManagerImplPrivate(
983 GpuDataManagerImpl* owner) 964 GpuDataManagerImpl* owner)
984 : complete_gpu_info_already_requested_(false), 965 : complete_gpu_info_already_requested_(false),
985 gpu_switching_(gpu::GPU_SWITCHING_OPTION_AUTOMATIC),
986 observer_list_(new GpuDataManagerObserverList), 966 observer_list_(new GpuDataManagerObserverList),
987 use_swiftshader_(false), 967 use_swiftshader_(false),
988 card_blacklisted_(false), 968 card_blacklisted_(false),
989 update_histograms_(true), 969 update_histograms_(true),
990 window_count_(0), 970 window_count_(0),
991 domain_blocking_enabled_(true), 971 domain_blocking_enabled_(true),
992 owner_(owner), 972 owner_(owner),
993 display_count_(0), 973 display_count_(0),
994 gpu_process_accessible_(true), 974 gpu_process_accessible_(true),
995 use_software_compositor_(false), 975 use_software_compositor_(false),
996 finalized_(false) { 976 finalized_(false) {
997 DCHECK(owner_); 977 DCHECK(owner_);
998 CommandLine* command_line = CommandLine::ForCurrentProcess(); 978 CommandLine* command_line = CommandLine::ForCurrentProcess();
999 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) { 979 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) {
1000 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas); 980 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas);
1001 command_line->AppendSwitch(switches::kDisableAcceleratedLayers); 981 command_line->AppendSwitch(switches::kDisableAcceleratedLayers);
1002 } 982 }
1003 if (command_line->HasSwitch(switches::kDisableGpu)) 983 if (command_line->HasSwitch(switches::kDisableGpu))
1004 DisableHardwareAcceleration(); 984 DisableHardwareAcceleration();
1005 if (command_line->HasSwitch(switches::kEnableSoftwareCompositing)) 985 if (command_line->HasSwitch(switches::kEnableSoftwareCompositing))
1006 use_software_compositor_ = true; 986 use_software_compositor_ = true;
1007 //TODO(jbauman): enable for Chrome OS and Linux 987 //TODO(jbauman): enable for Chrome OS and Linux
1008 #if defined(USE_AURA) && !defined(OS_CHROMEOS) 988 #if defined(USE_AURA) && !defined(OS_CHROMEOS)
1009 use_software_compositor_ = true; 989 use_software_compositor_ = true;
1010 #endif 990 #endif
1011 if (command_line->HasSwitch(switches::kGpuSwitching)) {
1012 std::string option_string = command_line->GetSwitchValueASCII(
1013 switches::kGpuSwitching);
1014 gpu::GpuSwitchingOption option =
1015 gpu::StringToGpuSwitchingOption(option_string);
1016 if (option != gpu::GPU_SWITCHING_OPTION_UNKNOWN)
1017 gpu_switching_ = option;
1018 }
1019 991
1020 #if defined(OS_MACOSX) 992 #if defined(OS_MACOSX)
1021 CGGetActiveDisplayList (0, NULL, &display_count_); 993 CGGetActiveDisplayList (0, NULL, &display_count_);
1022 CGDisplayRegisterReconfigurationCallback(DisplayReconfigCallback, owner_); 994 CGDisplayRegisterReconfigurationCallback(DisplayReconfigCallback, owner_);
1023 #endif // OS_MACOSX 995 #endif // OS_MACOSX
1024 996
1025 // For testing only. 997 // For testing only.
1026 if (command_line->HasSwitch(switches::kDisableDomainBlockingFor3DAPIs)) { 998 if (command_line->HasSwitch(switches::kDisableDomainBlockingFor3DAPIs)) {
1027 domain_blocking_enabled_ = false; 999 domain_blocking_enabled_ = false;
1028 } 1000 }
1029 } 1001 }
1030 1002
1031 GpuDataManagerImplPrivate::~GpuDataManagerImplPrivate() { 1003 GpuDataManagerImplPrivate::~GpuDataManagerImplPrivate() {
1032 #if defined(OS_MACOSX) 1004 #if defined(OS_MACOSX)
1033 CGDisplayRemoveReconfigurationCallback(DisplayReconfigCallback, owner_); 1005 CGDisplayRemoveReconfigurationCallback(DisplayReconfigCallback, owner_);
1034 #endif 1006 #endif
1035 } 1007 }
1036 1008
1037 void GpuDataManagerImplPrivate::InitializeImpl( 1009 void GpuDataManagerImplPrivate::InitializeImpl(
1038 const std::string& gpu_blacklist_json, 1010 const std::string& gpu_blacklist_json,
1039 const std::string& gpu_switching_list_json,
1040 const std::string& gpu_driver_bug_list_json, 1011 const std::string& gpu_driver_bug_list_json,
1041 const gpu::GPUInfo& gpu_info) { 1012 const gpu::GPUInfo& gpu_info) {
1042 std::string browser_version_string = ProcessVersionString( 1013 std::string browser_version_string = ProcessVersionString(
1043 GetContentClient()->GetProduct()); 1014 GetContentClient()->GetProduct());
1044 CHECK(!browser_version_string.empty()); 1015 CHECK(!browser_version_string.empty());
1045 1016
1046 const bool log_gpu_control_list_decisions = 1017 const bool log_gpu_control_list_decisions =
1047 CommandLine::ForCurrentProcess()->HasSwitch( 1018 CommandLine::ForCurrentProcess()->HasSwitch(
1048 switches::kLogGpuControlListDecisions); 1019 switches::kLogGpuControlListDecisions);
1049 1020
1050 if (!gpu_blacklist_json.empty()) { 1021 if (!gpu_blacklist_json.empty()) {
1051 gpu_blacklist_.reset(gpu::GpuBlacklist::Create()); 1022 gpu_blacklist_.reset(gpu::GpuBlacklist::Create());
1052 if (log_gpu_control_list_decisions) 1023 if (log_gpu_control_list_decisions)
1053 gpu_blacklist_->enable_control_list_logging("gpu_blacklist"); 1024 gpu_blacklist_->enable_control_list_logging("gpu_blacklist");
1054 bool success = gpu_blacklist_->LoadList( 1025 bool success = gpu_blacklist_->LoadList(
1055 browser_version_string, gpu_blacklist_json, 1026 browser_version_string, gpu_blacklist_json,
1056 gpu::GpuControlList::kCurrentOsOnly); 1027 gpu::GpuControlList::kCurrentOsOnly);
1057 DCHECK(success); 1028 DCHECK(success);
1058 } 1029 }
1059 if (!gpu_switching_list_json.empty()) {
1060 gpu_switching_list_.reset(gpu::GpuSwitchingList::Create());
1061 if (log_gpu_control_list_decisions)
1062 gpu_switching_list_->enable_control_list_logging("gpu_switching_list");
1063 bool success = gpu_switching_list_->LoadList(
1064 browser_version_string, gpu_switching_list_json,
1065 gpu::GpuControlList::kCurrentOsOnly);
1066 DCHECK(success);
1067 }
1068 if (!gpu_driver_bug_list_json.empty()) { 1030 if (!gpu_driver_bug_list_json.empty()) {
1069 gpu_driver_bug_list_.reset(gpu::GpuDriverBugList::Create()); 1031 gpu_driver_bug_list_.reset(gpu::GpuDriverBugList::Create());
1070 if (log_gpu_control_list_decisions) 1032 if (log_gpu_control_list_decisions)
1071 gpu_driver_bug_list_->enable_control_list_logging("gpu_driver_bug_list"); 1033 gpu_driver_bug_list_->enable_control_list_logging("gpu_driver_bug_list");
1072 bool success = gpu_driver_bug_list_->LoadList( 1034 bool success = gpu_driver_bug_list_->LoadList(
1073 browser_version_string, gpu_driver_bug_list_json, 1035 browser_version_string, gpu_driver_bug_list_json,
1074 gpu::GpuControlList::kCurrentOsOnly); 1036 gpu::GpuControlList::kCurrentOsOnly);
1075 DCHECK(success); 1037 DCHECK(success);
1076 } 1038 }
1077 1039
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 void GpuDataManagerImplPrivate::UpdatePreliminaryBlacklistedFeatures() { 1081 void GpuDataManagerImplPrivate::UpdatePreliminaryBlacklistedFeatures() {
1120 preliminary_blacklisted_features_ = blacklisted_features_; 1082 preliminary_blacklisted_features_ = blacklisted_features_;
1121 } 1083 }
1122 1084
1123 void GpuDataManagerImplPrivate::UpdateGpuSwitchingManager( 1085 void GpuDataManagerImplPrivate::UpdateGpuSwitchingManager(
1124 const gpu::GPUInfo& gpu_info) { 1086 const gpu::GPUInfo& gpu_info) {
1125 ui::GpuSwitchingManager::GetInstance()->SetGpuCount( 1087 ui::GpuSwitchingManager::GetInstance()->SetGpuCount(
1126 gpu_info.secondary_gpus.size() + 1); 1088 gpu_info.secondary_gpus.size() + 1);
1127 1089
1128 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) { 1090 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) {
1129 switch (gpu_switching_) { 1091 if (gpu_driver_bugs_.count(gpu::FORCE_DISCRETE_GPU) == 1)
1130 case gpu::GPU_SWITCHING_OPTION_FORCE_DISCRETE: 1092 ui::GpuSwitchingManager::GetInstance()->ForceUseOfDiscreteGpu();
1131 ui::GpuSwitchingManager::GetInstance()->ForceUseOfDiscreteGpu(); 1093 else if (gpu_driver_bugs_.count(gpu::FORCE_INTEGRATED_GPU) == 1)
1132 break; 1094 ui::GpuSwitchingManager::GetInstance()->ForceUseOfIntegratedGpu();
1133 case gpu::GPU_SWITCHING_OPTION_FORCE_INTEGRATED:
1134 ui::GpuSwitchingManager::GetInstance()->ForceUseOfIntegratedGpu();
1135 break;
1136 case gpu::GPU_SWITCHING_OPTION_AUTOMATIC:
1137 case gpu::GPU_SWITCHING_OPTION_UNKNOWN:
1138 break;
1139 }
1140 } 1095 }
1141 } 1096 }
1142 1097
1143 void GpuDataManagerImplPrivate::NotifyGpuInfoUpdate() { 1098 void GpuDataManagerImplPrivate::NotifyGpuInfoUpdate() {
1144 observer_list_->Notify(&GpuDataManagerObserver::OnGpuInfoUpdate); 1099 observer_list_->Notify(&GpuDataManagerObserver::OnGpuInfoUpdate);
1145 } 1100 }
1146 1101
1147 void GpuDataManagerImplPrivate::EnableSwiftShaderIfNecessary() { 1102 void GpuDataManagerImplPrivate::EnableSwiftShaderIfNecessary() {
1148 if (!GpuAccessAllowed(NULL) || 1103 if (!GpuAccessAllowed(NULL) ||
1149 blacklisted_features_.count(gpu::GPU_FEATURE_TYPE_WEBGL)) { 1104 blacklisted_features_.count(gpu::GPU_FEATURE_TYPE_WEBGL)) {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 1216
1262 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { 1217 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() {
1263 gpu_process_accessible_ = false; 1218 gpu_process_accessible_ = false;
1264 gpu_info_.finalized = true; 1219 gpu_info_.finalized = true;
1265 complete_gpu_info_already_requested_ = true; 1220 complete_gpu_info_already_requested_ = true;
1266 // Some observers might be waiting. 1221 // Some observers might be waiting.
1267 NotifyGpuInfoUpdate(); 1222 NotifyGpuInfoUpdate();
1268 } 1223 }
1269 1224
1270 } // namespace content 1225 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698