Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 313 }; | 313 }; |
| 314 | 314 |
| 315 } // namespace anonymous | 315 } // namespace anonymous |
| 316 | 316 |
| 317 void GpuDataManagerImplPrivate::InitializeForTesting( | 317 void GpuDataManagerImplPrivate::InitializeForTesting( |
| 318 const std::string& gpu_blacklist_json, | 318 const std::string& gpu_blacklist_json, |
| 319 const gpu::GPUInfo& gpu_info) { | 319 const gpu::GPUInfo& gpu_info) { |
| 320 // This function is for testing only, so disable histograms. | 320 // This function is for testing only, so disable histograms. |
| 321 update_histograms_ = false; | 321 update_histograms_ = false; |
| 322 | 322 |
| 323 // Prevent all further initialization. | |
| 324 finalized_ = true; | |
| 325 | |
| 323 InitializeImpl(gpu_blacklist_json, std::string(), std::string(), gpu_info); | 326 InitializeImpl(gpu_blacklist_json, std::string(), std::string(), gpu_info); |
| 324 } | 327 } |
| 325 | 328 |
| 326 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { | 329 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { |
| 327 #if defined(OS_CHROMEOS) | 330 #if defined(OS_CHROMEOS) |
| 328 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING && | 331 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING && |
| 329 CommandLine::ForCurrentProcess()->HasSwitch( | 332 CommandLine::ForCurrentProcess()->HasSwitch( |
| 330 switches::kDisablePanelFitting)) { | 333 switches::kDisablePanelFitting)) { |
| 331 return true; | 334 return true; |
| 332 } | 335 } |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 526 std::string* gl_version) { | 529 std::string* gl_version) { |
| 527 DCHECK(gl_vendor && gl_renderer && gl_version); | 530 DCHECK(gl_vendor && gl_renderer && gl_version); |
| 528 | 531 |
| 529 *gl_vendor = gpu_info_.gl_vendor; | 532 *gl_vendor = gpu_info_.gl_vendor; |
| 530 *gl_renderer = gpu_info_.gl_renderer; | 533 *gl_renderer = gpu_info_.gl_renderer; |
| 531 *gl_version = gpu_info_.gl_version_string; | 534 *gl_version = gpu_info_.gl_version_string; |
| 532 } | 535 } |
| 533 | 536 |
| 534 void GpuDataManagerImplPrivate::Initialize() { | 537 void GpuDataManagerImplPrivate::Initialize() { |
| 535 TRACE_EVENT0("startup", "GpuDataManagerImpl::Initialize"); | 538 TRACE_EVENT0("startup", "GpuDataManagerImpl::Initialize"); |
| 536 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 539 if (finalized_) { |
| 537 if (command_line->HasSwitch(switches::kSkipGpuDataLoading) && | 540 DLOG(INFO) << "GpuDataManagerImpl marked as finalized; skipping Initialize"; |
| 538 !command_line->HasSwitch(switches::kUseGpuInTests)) | 541 return; |
| 542 } | |
| 543 | |
| 544 const CommandLine* command_line = CommandLine::ForCurrentProcess(); | |
| 545 if (command_line->HasSwitch(switches::kSkipGpuDataLoading)) | |
|
gab
2013/10/16 15:12:09
Otherwise I just realized that this lost the previ
Zhenyao Mo
2013/10/16 19:35:23
I don't think perf bots run with kUseGpuInTests sw
| |
| 539 return; | 546 return; |
| 540 | 547 |
| 541 gpu::GPUInfo gpu_info; | 548 gpu::GPUInfo gpu_info; |
| 542 { | 549 if (command_line->GetSwitchValueASCII( |
| 550 switches::kUseGL) == gfx::kGLImplementationOSMesaName) { | |
| 551 // If using the OSMesa GL implementation, use fake vendor and device ids to | |
| 552 // make sure it never gets blacklisted. This is better than simply | |
| 553 // cancelling GPUInfo gathering as it allows us to proceed with loading the | |
| 554 // blacklist below which may have non-device specific entries we want to | |
| 555 // apply anyways (e.g., OS version blacklisting). | |
| 556 gpu_info.gpu.vendor_id = 0xffff; | |
| 557 gpu_info.gpu.device_id = 0xffff; | |
| 558 | |
| 559 // Also declare the driver_vendor to be osmesa to be able to specify | |
| 560 // exceptions based on driver_vendor==osmesa for some blacklist rules. | |
| 561 gpu_info.driver_vendor = gfx::kGLImplementationOSMesaName; | |
| 562 } else { | |
| 543 TRACE_EVENT0("startup", | 563 TRACE_EVENT0("startup", |
| 544 "GpuDataManagerImpl::Initialize:CollectBasicGraphicsInfo"); | 564 "GpuDataManagerImpl::Initialize:CollectBasicGraphicsInfo"); |
| 545 gpu::CollectBasicGraphicsInfo(&gpu_info); | 565 gpu::CollectBasicGraphicsInfo(&gpu_info); |
| 546 } | 566 } |
| 547 #if defined(ARCH_CPU_X86_FAMILY) | 567 #if defined(ARCH_CPU_X86_FAMILY) |
| 548 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) | 568 if (!gpu_info.gpu.vendor_id || !gpu_info.gpu.device_id) |
| 549 gpu_info.finalized = true; | 569 gpu_info.finalized = true; |
| 550 #endif | 570 #endif |
| 551 | 571 |
| 552 std::string gpu_blacklist_string; | 572 std::string gpu_blacklist_string; |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 966 gpu_switching_(gpu::GPU_SWITCHING_OPTION_AUTOMATIC), | 986 gpu_switching_(gpu::GPU_SWITCHING_OPTION_AUTOMATIC), |
| 967 observer_list_(new GpuDataManagerObserverList), | 987 observer_list_(new GpuDataManagerObserverList), |
| 968 use_swiftshader_(false), | 988 use_swiftshader_(false), |
| 969 card_blacklisted_(false), | 989 card_blacklisted_(false), |
| 970 update_histograms_(true), | 990 update_histograms_(true), |
| 971 window_count_(0), | 991 window_count_(0), |
| 972 domain_blocking_enabled_(true), | 992 domain_blocking_enabled_(true), |
| 973 owner_(owner), | 993 owner_(owner), |
| 974 display_count_(0), | 994 display_count_(0), |
| 975 gpu_process_accessible_(true), | 995 gpu_process_accessible_(true), |
| 976 use_software_compositor_(false) { | 996 use_software_compositor_(false), |
| 997 finalized_(false) { | |
| 977 DCHECK(owner_); | 998 DCHECK(owner_); |
| 978 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 999 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| 979 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) { | 1000 if (command_line->HasSwitch(switches::kDisableAcceleratedCompositing)) { |
| 980 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas); | 1001 command_line->AppendSwitch(switches::kDisableAccelerated2dCanvas); |
| 981 command_line->AppendSwitch(switches::kDisableAcceleratedLayers); | 1002 command_line->AppendSwitch(switches::kDisableAcceleratedLayers); |
| 982 } | 1003 } |
| 983 if (command_line->HasSwitch(switches::kDisableGpu)) | 1004 if (command_line->HasSwitch(switches::kDisableGpu)) |
| 984 DisableHardwareAcceleration(); | 1005 DisableHardwareAcceleration(); |
| 985 if (command_line->HasSwitch(switches::kEnableSoftwareCompositing)) | 1006 if (command_line->HasSwitch(switches::kEnableSoftwareCompositing)) |
| 986 use_software_compositor_ = true; | 1007 use_software_compositor_ = true; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 1011 | 1032 |
| 1012 void GpuDataManagerImplPrivate::InitializeImpl( | 1033 void GpuDataManagerImplPrivate::InitializeImpl( |
| 1013 const std::string& gpu_blacklist_json, | 1034 const std::string& gpu_blacklist_json, |
| 1014 const std::string& gpu_switching_list_json, | 1035 const std::string& gpu_switching_list_json, |
| 1015 const std::string& gpu_driver_bug_list_json, | 1036 const std::string& gpu_driver_bug_list_json, |
| 1016 const gpu::GPUInfo& gpu_info) { | 1037 const gpu::GPUInfo& gpu_info) { |
| 1017 std::string browser_version_string = ProcessVersionString( | 1038 std::string browser_version_string = ProcessVersionString( |
| 1018 GetContentClient()->GetProduct()); | 1039 GetContentClient()->GetProduct()); |
| 1019 CHECK(!browser_version_string.empty()); | 1040 CHECK(!browser_version_string.empty()); |
| 1020 | 1041 |
| 1042 const bool log_gpu_control_list_decisions = | |
| 1043 CommandLine::ForCurrentProcess()->HasSwitch( | |
| 1044 switches::kLogGpuControlListDecisions); | |
| 1045 | |
| 1021 if (!gpu_blacklist_json.empty()) { | 1046 if (!gpu_blacklist_json.empty()) { |
| 1022 gpu_blacklist_.reset(gpu::GpuBlacklist::Create()); | 1047 gpu_blacklist_.reset(gpu::GpuBlacklist::Create()); |
| 1048 if (log_gpu_control_list_decisions) | |
| 1049 gpu_blacklist_->enable_control_list_logging("gpu_blacklist"); | |
| 1023 bool success = gpu_blacklist_->LoadList( | 1050 bool success = gpu_blacklist_->LoadList( |
| 1024 browser_version_string, gpu_blacklist_json, | 1051 browser_version_string, gpu_blacklist_json, |
| 1025 gpu::GpuControlList::kCurrentOsOnly); | 1052 gpu::GpuControlList::kCurrentOsOnly); |
| 1026 DCHECK(success); | 1053 DCHECK(success); |
| 1027 } | 1054 } |
| 1028 if (!gpu_switching_list_json.empty()) { | 1055 if (!gpu_switching_list_json.empty()) { |
| 1029 gpu_switching_list_.reset(gpu::GpuSwitchingList::Create()); | 1056 gpu_switching_list_.reset(gpu::GpuSwitchingList::Create()); |
| 1057 if (log_gpu_control_list_decisions) | |
| 1058 gpu_switching_list_->enable_control_list_logging("gpu_switching_list"); | |
| 1030 bool success = gpu_switching_list_->LoadList( | 1059 bool success = gpu_switching_list_->LoadList( |
| 1031 browser_version_string, gpu_switching_list_json, | 1060 browser_version_string, gpu_switching_list_json, |
| 1032 gpu::GpuControlList::kCurrentOsOnly); | 1061 gpu::GpuControlList::kCurrentOsOnly); |
| 1033 DCHECK(success); | 1062 DCHECK(success); |
| 1034 } | 1063 } |
| 1035 if (!gpu_driver_bug_list_json.empty()) { | 1064 if (!gpu_driver_bug_list_json.empty()) { |
| 1036 gpu_driver_bug_list_.reset(gpu::GpuDriverBugList::Create()); | 1065 gpu_driver_bug_list_.reset(gpu::GpuDriverBugList::Create()); |
| 1066 if (log_gpu_control_list_decisions) | |
| 1067 gpu_driver_bug_list_->enable_control_list_logging("gpu_driver_bug_list"); | |
| 1037 bool success = gpu_driver_bug_list_->LoadList( | 1068 bool success = gpu_driver_bug_list_->LoadList( |
| 1038 browser_version_string, gpu_driver_bug_list_json, | 1069 browser_version_string, gpu_driver_bug_list_json, |
| 1039 gpu::GpuControlList::kCurrentOsOnly); | 1070 gpu::GpuControlList::kCurrentOsOnly); |
| 1040 DCHECK(success); | 1071 DCHECK(success); |
| 1041 } | 1072 } |
| 1042 | 1073 |
| 1043 gpu_info_ = gpu_info; | 1074 gpu_info_ = gpu_info; |
| 1044 UpdateGpuInfo(gpu_info); | 1075 UpdateGpuInfo(gpu_info); |
| 1045 UpdateGpuSwitchingManager(gpu_info); | 1076 UpdateGpuSwitchingManager(gpu_info); |
| 1046 UpdatePreliminaryBlacklistedFeatures(); | 1077 UpdatePreliminaryBlacklistedFeatures(); |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1226 | 1257 |
| 1227 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { | 1258 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { |
| 1228 gpu_process_accessible_ = false; | 1259 gpu_process_accessible_ = false; |
| 1229 gpu_info_.finalized = true; | 1260 gpu_info_.finalized = true; |
| 1230 complete_gpu_info_already_requested_ = true; | 1261 complete_gpu_info_already_requested_ = true; |
| 1231 // Some observers might be waiting. | 1262 // Some observers might be waiting. |
| 1232 NotifyGpuInfoUpdate(); | 1263 NotifyGpuInfoUpdate(); |
| 1233 } | 1264 } |
| 1234 | 1265 |
| 1235 } // namespace content | 1266 } // namespace content |
| OLD | NEW |