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

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

Issue 14947002: Updated OSX to blacklist multisampling when multiple monitors are connected (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased on GpuDataManagerImpl refactor Created 7 years, 7 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 #if defined(OS_MACOSX) 7 #if defined(OS_MACOSX)
8 #include <ApplicationServices/ApplicationServices.h> 8 #include <ApplicationServices/ApplicationServices.h>
9 #endif // OS_MACOSX 9 #endif // OS_MACOSX
10 10
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 rt += ","; 68 rt += ",";
69 rt += base::IntToString(*it); 69 rt += base::IntToString(*it);
70 } 70 }
71 return rt; 71 return rt;
72 } 72 }
73 73
74 #if defined(OS_MACOSX) 74 #if defined(OS_MACOSX)
75 void DisplayReconfigCallback(CGDirectDisplayID display, 75 void DisplayReconfigCallback(CGDirectDisplayID display,
76 CGDisplayChangeSummaryFlags flags, 76 CGDisplayChangeSummaryFlags flags,
77 void* gpu_data_manager) { 77 void* gpu_data_manager) {
78 if (flags & kCGDisplayAddFlag) { 78 if(flags == kCGDisplayBeginConfigurationFlag)
79 GpuDataManagerImpl* manager = 79 return; // This call contains no information about the display change
80 reinterpret_cast<GpuDataManagerImpl*>(gpu_data_manager); 80
81 DCHECK(manager); 81 GpuDataManagerImpl* manager =
82 reinterpret_cast<GpuDataManagerImpl*>(gpu_data_manager);
83 DCHECK(manager);
84
85 uint32_t displayCount;
86 CGGetActiveDisplayList(0, NULL, &displayCount);
87
88 bool fireGpuSwitch = flags & kCGDisplayAddFlag;
89
90 if (displayCount != manager->GetDisplayCount()) {
91 manager->SetDisplayCount(displayCount);
92 fireGpuSwitch = true;
93 }
94
95 if (fireGpuSwitch)
82 manager->HandleGpuSwitch(); 96 manager->HandleGpuSwitch();
83 }
84 } 97 }
85 #endif // OS_MACOSX 98 #endif // OS_MACOSX
86 99
87 // Block all domains' use of 3D APIs for this many milliseconds if 100 // Block all domains' use of 3D APIs for this many milliseconds if
88 // approaching a threshold where system stability might be compromised. 101 // approaching a threshold where system stability might be compromised.
89 const int64 kBlockAllDomainsMs = 10000; 102 const int64 kBlockAllDomainsMs = 10000;
90 const int kNumResetsWithinDuration = 1; 103 const int kNumResetsWithinDuration = 1;
91 104
92 // Enums for UMA histograms. 105 // Enums for UMA histograms.
93 enum BlockStatusHistogram { 106 enum BlockStatusHistogram {
(...skipping 25 matching lines...) Expand all
119 132
120 return (blacklisted_features_.count(feature) == 1); 133 return (blacklisted_features_.count(feature) == 1);
121 } 134 }
122 135
123 size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const { 136 size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const {
124 if (use_swiftshader_) 137 if (use_swiftshader_)
125 return 1; 138 return 1;
126 return blacklisted_features_.size(); 139 return blacklisted_features_.size();
127 } 140 }
128 141
142 void GpuDataManagerImplPrivate::SetDisplayCount(unsigned int display_count) {
143 display_count_ = display_count;
144 }
145
146 unsigned int GpuDataManagerImplPrivate::GetDisplayCount() const {
147 return display_count_;
148 }
149
129 GPUInfo GpuDataManagerImplPrivate::GetGPUInfo() const { 150 GPUInfo GpuDataManagerImplPrivate::GetGPUInfo() const {
130 return gpu_info_; 151 return gpu_info_;
131 } 152 }
132 153
133 void GpuDataManagerImplPrivate::GetGpuProcessHandles( 154 void GpuDataManagerImplPrivate::GetGpuProcessHandles(
134 const GpuDataManager::GetGpuProcessHandlesCallback& callback) const { 155 const GpuDataManager::GetGpuProcessHandlesCallback& callback) const {
135 GpuProcessHost::GetProcessHandles(callback); 156 GpuProcessHost::GetProcessHandles(callback);
136 } 157 }
137 158
138 bool GpuDataManagerImplPrivate::GpuAccessAllowed( 159 bool GpuDataManagerImplPrivate::GpuAccessAllowed(
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_FLASH3D)) 553 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_FLASH3D))
533 prefs->flash_3d_enabled = false; 554 prefs->flash_3d_enabled = false;
534 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_FLASH_STAGE3D)) { 555 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_FLASH_STAGE3D)) {
535 prefs->flash_stage3d_enabled = false; 556 prefs->flash_stage3d_enabled = false;
536 prefs->flash_stage3d_baseline_enabled = false; 557 prefs->flash_stage3d_baseline_enabled = false;
537 } 558 }
538 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE)) 559 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE))
539 prefs->flash_stage3d_baseline_enabled = false; 560 prefs->flash_stage3d_baseline_enabled = false;
540 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)) 561 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS))
541 prefs->accelerated_2d_canvas_enabled = false; 562 prefs->accelerated_2d_canvas_enabled = false;
542 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_MULTISAMPLING)) 563 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_MULTISAMPLING)
564 || display_count_ > 1)
543 prefs->gl_multisampling_enabled = false; 565 prefs->gl_multisampling_enabled = false;
544 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_3D_CSS)) { 566 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_3D_CSS)) {
545 prefs->accelerated_compositing_for_3d_transforms_enabled = false; 567 prefs->accelerated_compositing_for_3d_transforms_enabled = false;
546 prefs->accelerated_compositing_for_animation_enabled = false; 568 prefs->accelerated_compositing_for_animation_enabled = false;
547 } 569 }
548 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_ACCELERATED_VIDEO)) 570 if (IsFeatureBlacklisted(GPU_FEATURE_TYPE_ACCELERATED_VIDEO))
549 prefs->accelerated_compositing_for_video_enabled = false; 571 prefs->accelerated_compositing_for_video_enabled = false;
550 572
551 // Accelerated video and animation are slower than regular when using 573 // Accelerated video and animation are slower than regular when using
552 // SwiftShader. 3D CSS may also be too slow to be worthwhile. 574 // SwiftShader. 3D CSS may also be too slow to be worthwhile.
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 GpuDataManagerImplPrivate::GpuDataManagerImplPrivate( 702 GpuDataManagerImplPrivate::GpuDataManagerImplPrivate(
681 GpuDataManagerImpl* owner) 703 GpuDataManagerImpl* owner)
682 : complete_gpu_info_already_requested_(false), 704 : complete_gpu_info_already_requested_(false),
683 gpu_switching_(GPU_SWITCHING_OPTION_AUTOMATIC), 705 gpu_switching_(GPU_SWITCHING_OPTION_AUTOMATIC),
684 observer_list_(new GpuDataManagerObserverList), 706 observer_list_(new GpuDataManagerObserverList),
685 use_swiftshader_(false), 707 use_swiftshader_(false),
686 card_blacklisted_(false), 708 card_blacklisted_(false),
687 update_histograms_(true), 709 update_histograms_(true),
688 window_count_(0), 710 window_count_(0),
689 domain_blocking_enabled_(true), 711 domain_blocking_enabled_(true),
690 owner_(owner) { 712 owner_(owner),
713 display_count_(0) {
691 DCHECK(owner_); 714 DCHECK(owner_);
692 CommandLine* command_line = CommandLine::ForCurrentProcess(); 715 CommandLine* command_line = CommandLine::ForCurrentProcess();
693 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) { 716 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) {
694 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas); 717 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas);
695 command_line->AppendSwitch(switches::kDisableAcceleratedLayers); 718 command_line->AppendSwitch(switches::kDisableAcceleratedLayers);
696 } 719 }
697 if (command_line->HasSwitch(switches::kDisableGpu)) 720 if (command_line->HasSwitch(switches::kDisableGpu))
698 DisableHardwareAcceleration(); 721 DisableHardwareAcceleration();
699 if (command_line->HasSwitch(switches::kGpuSwitching)) { 722 if (command_line->HasSwitch(switches::kGpuSwitching)) {
700 std::string option_string = command_line->GetSwitchValueASCII( 723 std::string option_string = command_line->GetSwitchValueASCII(
701 switches::kGpuSwitching); 724 switches::kGpuSwitching);
702 GpuSwitchingOption option = StringToGpuSwitchingOption(option_string); 725 GpuSwitchingOption option = StringToGpuSwitchingOption(option_string);
703 if (option != GPU_SWITCHING_OPTION_UNKNOWN) 726 if (option != GPU_SWITCHING_OPTION_UNKNOWN)
704 gpu_switching_ = option; 727 gpu_switching_ = option;
705 } 728 }
706 729
707 #if defined(OS_MACOSX) 730 #if defined(OS_MACOSX)
731 CGGetActiveDisplayList (0, NULL, &display_count_);
708 CGDisplayRegisterReconfigurationCallback(DisplayReconfigCallback, owner_); 732 CGDisplayRegisterReconfigurationCallback(DisplayReconfigCallback, owner_);
709 #endif // OS_MACOSX 733 #endif // OS_MACOSX
710 } 734 }
711 735
712 GpuDataManagerImplPrivate::~GpuDataManagerImplPrivate() { 736 GpuDataManagerImplPrivate::~GpuDataManagerImplPrivate() {
713 #if defined(OS_MACOSX) 737 #if defined(OS_MACOSX)
714 CGDisplayRemoveReconfigurationCallback(DisplayReconfigCallback, owner_); 738 CGDisplayRemoveReconfigurationCallback(DisplayReconfigCallback, owner_);
715 #endif 739 #endif
716 } 740 }
717 741
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 int render_process_id, 930 int render_process_id,
907 int render_view_id, 931 int render_view_id,
908 ThreeDAPIType requester) { 932 ThreeDAPIType requester) {
909 GpuDataManagerImpl::UnlockedSession session(owner_); 933 GpuDataManagerImpl::UnlockedSession session(owner_);
910 observer_list_->Notify(&GpuDataManagerObserver::DidBlock3DAPIs, 934 observer_list_->Notify(&GpuDataManagerObserver::DidBlock3DAPIs,
911 url, render_process_id, render_view_id, requester); 935 url, render_process_id, render_view_id, requester);
912 } 936 }
913 937
914 } // namespace content 938 } // namespace content
915 939
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698