| 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 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 } | 264 } |
| 265 | 265 |
| 266 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { | 266 bool GpuDataManagerImplPrivate::IsFeatureBlacklisted(int feature) const { |
| 267 #if defined(OS_CHROMEOS) | 267 #if defined(OS_CHROMEOS) |
| 268 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING && | 268 if (feature == gpu::GPU_FEATURE_TYPE_PANEL_FITTING && |
| 269 base::CommandLine::ForCurrentProcess()->HasSwitch( | 269 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 270 switches::kDisablePanelFitting)) { | 270 switches::kDisablePanelFitting)) { |
| 271 return true; | 271 return true; |
| 272 } | 272 } |
| 273 #endif // OS_CHROMEOS | 273 #endif // OS_CHROMEOS |
| 274 if (use_swiftshader_) { | 274 if (use_swiftshader_ || ShouldUseWarp()) { |
| 275 // Skia's software rendering is probably more efficient than going through | 275 // Skia's software rendering is probably more efficient than going through |
| 276 // software emulation of the GPU, so use that. | 276 // software emulation of the GPU, so use that. |
| 277 if (feature == gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS) | 277 if (feature == gpu::GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS) |
| 278 return true; | 278 return true; |
| 279 return false; | 279 return false; |
| 280 } | 280 } |
| 281 | 281 |
| 282 return (blacklisted_features_.count(feature) == 1); | 282 return (blacklisted_features_.count(feature) == 1); |
| 283 } | 283 } |
| 284 | 284 |
| 285 bool GpuDataManagerImplPrivate::IsDriverBugWorkaroundActive(int feature) const { | 285 bool GpuDataManagerImplPrivate::IsDriverBugWorkaroundActive(int feature) const { |
| 286 return (gpu_driver_bugs_.count(feature) == 1); | 286 return (gpu_driver_bugs_.count(feature) == 1); |
| 287 } | 287 } |
| 288 | 288 |
| 289 size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const { | 289 size_t GpuDataManagerImplPrivate::GetBlacklistedFeatureCount() const { |
| 290 if (use_swiftshader_) | 290 if (use_swiftshader_ || ShouldUseWarp()) |
| 291 return 1; | 291 return 1; |
| 292 return blacklisted_features_.size(); | 292 return blacklisted_features_.size(); |
| 293 } | 293 } |
| 294 | 294 |
| 295 void GpuDataManagerImplPrivate::SetDisplayCount(unsigned int display_count) { | 295 void GpuDataManagerImplPrivate::SetDisplayCount(unsigned int display_count) { |
| 296 display_count_ = display_count; | 296 display_count_ = display_count; |
| 297 } | 297 } |
| 298 | 298 |
| 299 unsigned int GpuDataManagerImplPrivate::GetDisplayCount() const { | 299 unsigned int GpuDataManagerImplPrivate::GetDisplayCount() const { |
| 300 return display_count_; | 300 return display_count_; |
| 301 } | 301 } |
| 302 | 302 |
| 303 gpu::GPUInfo GpuDataManagerImplPrivate::GetGPUInfo() const { | 303 gpu::GPUInfo GpuDataManagerImplPrivate::GetGPUInfo() const { |
| 304 return gpu_info_; | 304 return gpu_info_; |
| 305 } | 305 } |
| 306 | 306 |
| 307 void GpuDataManagerImplPrivate::GetGpuProcessHandles( | 307 void GpuDataManagerImplPrivate::GetGpuProcessHandles( |
| 308 const GpuDataManager::GetGpuProcessHandlesCallback& callback) const { | 308 const GpuDataManager::GetGpuProcessHandlesCallback& callback) const { |
| 309 GpuProcessHost::GetProcessHandles(callback); | 309 GpuProcessHost::GetProcessHandles(callback); |
| 310 } | 310 } |
| 311 | 311 |
| 312 bool GpuDataManagerImplPrivate::GpuAccessAllowed( | 312 bool GpuDataManagerImplPrivate::GpuAccessAllowed( |
| 313 std::string* reason) const { | 313 std::string* reason) const { |
| 314 if (use_swiftshader_) | 314 if (use_swiftshader_ || ShouldUseWarp()) |
| 315 return true; | 315 return true; |
| 316 | 316 |
| 317 if (!gpu_process_accessible_) { | 317 if (!gpu_process_accessible_) { |
| 318 if (reason) { | 318 if (reason) { |
| 319 *reason = "GPU process launch failed."; | 319 *reason = "GPU process launch failed."; |
| 320 } | 320 } |
| 321 return false; | 321 return false; |
| 322 } | 322 } |
| 323 | 323 |
| 324 if (card_blacklisted_) { | 324 if (card_blacklisted_) { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 bool GpuDataManagerImplPrivate::ShouldUseSwiftShader() const { | 391 bool GpuDataManagerImplPrivate::ShouldUseSwiftShader() const { |
| 392 return use_swiftshader_; | 392 return use_swiftshader_; |
| 393 } | 393 } |
| 394 | 394 |
| 395 void GpuDataManagerImplPrivate::RegisterSwiftShaderPath( | 395 void GpuDataManagerImplPrivate::RegisterSwiftShaderPath( |
| 396 const base::FilePath& path) { | 396 const base::FilePath& path) { |
| 397 swiftshader_path_ = path; | 397 swiftshader_path_ = path; |
| 398 EnableSwiftShaderIfNecessary(); | 398 EnableSwiftShaderIfNecessary(); |
| 399 } | 399 } |
| 400 | 400 |
| 401 bool GpuDataManagerImplPrivate::ShouldUseWarp() const { |
| 402 return use_warp_ || |
| 403 CommandLine::ForCurrentProcess()->HasSwitch(switches::kUseWarp); |
| 404 } |
| 405 |
| 401 void GpuDataManagerImplPrivate::AddObserver(GpuDataManagerObserver* observer) { | 406 void GpuDataManagerImplPrivate::AddObserver(GpuDataManagerObserver* observer) { |
| 402 GpuDataManagerImpl::UnlockedSession session(owner_); | 407 GpuDataManagerImpl::UnlockedSession session(owner_); |
| 403 observer_list_->AddObserver(observer); | 408 observer_list_->AddObserver(observer); |
| 404 } | 409 } |
| 405 | 410 |
| 406 void GpuDataManagerImplPrivate::RemoveObserver( | 411 void GpuDataManagerImplPrivate::RemoveObserver( |
| 407 GpuDataManagerObserver* observer) { | 412 GpuDataManagerObserver* observer) { |
| 408 GpuDataManagerImpl::UnlockedSession session(owner_); | 413 GpuDataManagerImpl::UnlockedSession session(owner_); |
| 409 observer_list_->RemoveObserver(observer); | 414 observer_list_->RemoveObserver(observer); |
| 410 } | 415 } |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 538 } | 543 } |
| 539 gpu::GpuDriverBugList::AppendWorkaroundsFromCommandLine( | 544 gpu::GpuDriverBugList::AppendWorkaroundsFromCommandLine( |
| 540 &gpu_driver_bugs_, *base::CommandLine::ForCurrentProcess()); | 545 &gpu_driver_bugs_, *base::CommandLine::ForCurrentProcess()); |
| 541 | 546 |
| 542 // We have to update GpuFeatureType before notify all the observers. | 547 // We have to update GpuFeatureType before notify all the observers. |
| 543 NotifyGpuInfoUpdate(); | 548 NotifyGpuInfoUpdate(); |
| 544 } | 549 } |
| 545 | 550 |
| 546 void GpuDataManagerImplPrivate::UpdateGpuInfo(const gpu::GPUInfo& gpu_info) { | 551 void GpuDataManagerImplPrivate::UpdateGpuInfo(const gpu::GPUInfo& gpu_info) { |
| 547 // No further update of gpu_info if falling back to SwiftShader. | 552 // No further update of gpu_info if falling back to SwiftShader. |
| 548 if (use_swiftshader_) | 553 if (use_swiftshader_ || ShouldUseWarp()) |
| 549 return; | 554 return; |
| 550 | 555 |
| 551 gpu::MergeGPUInfo(&gpu_info_, gpu_info); | 556 gpu::MergeGPUInfo(&gpu_info_, gpu_info); |
| 552 complete_gpu_info_already_requested_ = | 557 complete_gpu_info_already_requested_ = |
| 553 complete_gpu_info_already_requested_ || gpu_info_.finalized; | 558 complete_gpu_info_already_requested_ || gpu_info_.finalized; |
| 554 | 559 |
| 555 UpdateGpuInfoHelper(); | 560 UpdateGpuInfoHelper(); |
| 556 } | 561 } |
| 557 | 562 |
| 558 void GpuDataManagerImplPrivate::UpdateVideoMemoryUsageStats( | 563 void GpuDataManagerImplPrivate::UpdateVideoMemoryUsageStats( |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 638 // device_id, driver_vendor, driver_version for deciding whether we need to | 643 // device_id, driver_vendor, driver_version for deciding whether we need to |
| 639 // collect full info (on Linux) and for crash reporting purpose. | 644 // collect full info (on Linux) and for crash reporting purpose. |
| 640 command_line->AppendSwitchASCII(switches::kGpuVendorID, | 645 command_line->AppendSwitchASCII(switches::kGpuVendorID, |
| 641 base::StringPrintf("0x%04x", gpu_info_.gpu.vendor_id)); | 646 base::StringPrintf("0x%04x", gpu_info_.gpu.vendor_id)); |
| 642 command_line->AppendSwitchASCII(switches::kGpuDeviceID, | 647 command_line->AppendSwitchASCII(switches::kGpuDeviceID, |
| 643 base::StringPrintf("0x%04x", gpu_info_.gpu.device_id)); | 648 base::StringPrintf("0x%04x", gpu_info_.gpu.device_id)); |
| 644 command_line->AppendSwitchASCII(switches::kGpuDriverVendor, | 649 command_line->AppendSwitchASCII(switches::kGpuDriverVendor, |
| 645 gpu_info_.driver_vendor); | 650 gpu_info_.driver_vendor); |
| 646 command_line->AppendSwitchASCII(switches::kGpuDriverVersion, | 651 command_line->AppendSwitchASCII(switches::kGpuDriverVersion, |
| 647 gpu_info_.driver_version); | 652 gpu_info_.driver_version); |
| 653 |
| 654 if (ShouldUseWarp()) |
| 655 command_line->AppendSwitch(switches::kUseWarp); |
| 648 } | 656 } |
| 649 | 657 |
| 650 void GpuDataManagerImplPrivate::AppendPluginCommandLine( | 658 void GpuDataManagerImplPrivate::AppendPluginCommandLine( |
| 651 base::CommandLine* command_line) const { | 659 base::CommandLine* command_line) const { |
| 652 DCHECK(command_line); | 660 DCHECK(command_line); |
| 653 | 661 |
| 654 #if defined(OS_MACOSX) | 662 #if defined(OS_MACOSX) |
| 655 // TODO(jbauman): Add proper blacklist support for core animation plugins so | 663 // TODO(jbauman): Add proper blacklist support for core animation plugins so |
| 656 // special-casing this video card won't be necessary. See | 664 // special-casing this video card won't be necessary. See |
| 657 // http://crbug.com/134015 | 665 // http://crbug.com/134015 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 prefs->pepper_accelerated_video_decode_enabled = true; | 708 prefs->pepper_accelerated_video_decode_enabled = true; |
| 701 } | 709 } |
| 702 } | 710 } |
| 703 | 711 |
| 704 void GpuDataManagerImplPrivate::DisableHardwareAcceleration() { | 712 void GpuDataManagerImplPrivate::DisableHardwareAcceleration() { |
| 705 card_blacklisted_ = true; | 713 card_blacklisted_ = true; |
| 706 | 714 |
| 707 for (int i = 0; i < gpu::NUMBER_OF_GPU_FEATURE_TYPES; ++i) | 715 for (int i = 0; i < gpu::NUMBER_OF_GPU_FEATURE_TYPES; ++i) |
| 708 blacklisted_features_.insert(i); | 716 blacklisted_features_.insert(i); |
| 709 | 717 |
| 718 EnableWarpIfNecessary(); |
| 710 EnableSwiftShaderIfNecessary(); | 719 EnableSwiftShaderIfNecessary(); |
| 711 NotifyGpuInfoUpdate(); | 720 NotifyGpuInfoUpdate(); |
| 712 } | 721 } |
| 713 | 722 |
| 714 std::string GpuDataManagerImplPrivate::GetBlacklistVersion() const { | 723 std::string GpuDataManagerImplPrivate::GetBlacklistVersion() const { |
| 715 if (gpu_blacklist_) | 724 if (gpu_blacklist_) |
| 716 return gpu_blacklist_->version(); | 725 return gpu_blacklist_->version(); |
| 717 return "0"; | 726 return "0"; |
| 718 } | 727 } |
| 719 | 728 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 gpu_info_.secondary_gpus[ii].active = false; | 815 gpu_info_.secondary_gpus[ii].active = false; |
| 807 } | 816 } |
| 808 } | 817 } |
| 809 gpu_info_.gpu.active = false; | 818 gpu_info_.gpu.active = false; |
| 810 } | 819 } |
| 811 UpdateGpuInfoHelper(); | 820 UpdateGpuInfoHelper(); |
| 812 return true; | 821 return true; |
| 813 } | 822 } |
| 814 | 823 |
| 815 bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const { | 824 bool GpuDataManagerImplPrivate::CanUseGpuBrowserCompositor() const { |
| 825 if (ShouldUseWarp()) |
| 826 return true; |
| 816 if (ShouldUseSwiftShader()) | 827 if (ShouldUseSwiftShader()) |
| 817 return false; | 828 return false; |
| 818 if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) | 829 if (IsFeatureBlacklisted(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING)) |
| 819 return false; | 830 return false; |
| 820 return true; | 831 return true; |
| 821 } | 832 } |
| 822 | 833 |
| 823 void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs( | 834 void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs( |
| 824 const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) { | 835 const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) { |
| 825 BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now()); | 836 BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 852 GpuDataManagerImplPrivate* GpuDataManagerImplPrivate::Create( | 863 GpuDataManagerImplPrivate* GpuDataManagerImplPrivate::Create( |
| 853 GpuDataManagerImpl* owner) { | 864 GpuDataManagerImpl* owner) { |
| 854 return new GpuDataManagerImplPrivate(owner); | 865 return new GpuDataManagerImplPrivate(owner); |
| 855 } | 866 } |
| 856 | 867 |
| 857 GpuDataManagerImplPrivate::GpuDataManagerImplPrivate( | 868 GpuDataManagerImplPrivate::GpuDataManagerImplPrivate( |
| 858 GpuDataManagerImpl* owner) | 869 GpuDataManagerImpl* owner) |
| 859 : complete_gpu_info_already_requested_(false), | 870 : complete_gpu_info_already_requested_(false), |
| 860 observer_list_(new GpuDataManagerObserverList), | 871 observer_list_(new GpuDataManagerObserverList), |
| 861 use_swiftshader_(false), | 872 use_swiftshader_(false), |
| 873 use_warp_(false), |
| 862 card_blacklisted_(false), | 874 card_blacklisted_(false), |
| 863 update_histograms_(true), | 875 update_histograms_(true), |
| 864 window_count_(0), | 876 window_count_(0), |
| 865 domain_blocking_enabled_(true), | 877 domain_blocking_enabled_(true), |
| 866 owner_(owner), | 878 owner_(owner), |
| 867 display_count_(0), | 879 display_count_(0), |
| 868 gpu_process_accessible_(true), | 880 gpu_process_accessible_(true), |
| 869 finalized_(false) { | 881 finalized_(false) { |
| 870 DCHECK(owner_); | 882 DCHECK(owner_); |
| 871 const base::CommandLine* command_line = | 883 const base::CommandLine* command_line = |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 const std::set<int>& features) { | 937 const std::set<int>& features) { |
| 926 blacklisted_features_ = features; | 938 blacklisted_features_ = features; |
| 927 | 939 |
| 928 // Force disable using the GPU for these features, even if they would | 940 // Force disable using the GPU for these features, even if they would |
| 929 // otherwise be allowed. | 941 // otherwise be allowed. |
| 930 if (card_blacklisted_) { | 942 if (card_blacklisted_) { |
| 931 blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING); | 943 blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_GPU_COMPOSITING); |
| 932 blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_WEBGL); | 944 blacklisted_features_.insert(gpu::GPU_FEATURE_TYPE_WEBGL); |
| 933 } | 945 } |
| 934 | 946 |
| 947 EnableWarpIfNecessary(); |
| 935 EnableSwiftShaderIfNecessary(); | 948 EnableSwiftShaderIfNecessary(); |
| 936 } | 949 } |
| 937 | 950 |
| 938 void GpuDataManagerImplPrivate::UpdatePreliminaryBlacklistedFeatures() { | 951 void GpuDataManagerImplPrivate::UpdatePreliminaryBlacklistedFeatures() { |
| 939 preliminary_blacklisted_features_ = blacklisted_features_; | 952 preliminary_blacklisted_features_ = blacklisted_features_; |
| 940 } | 953 } |
| 941 | 954 |
| 942 void GpuDataManagerImplPrivate::UpdateGpuSwitchingManager( | 955 void GpuDataManagerImplPrivate::UpdateGpuSwitchingManager( |
| 943 const gpu::GPUInfo& gpu_info) { | 956 const gpu::GPUInfo& gpu_info) { |
| 944 ui::GpuSwitchingManager::GetInstance()->SetGpuCount( | 957 ui::GpuSwitchingManager::GetInstance()->SetGpuCount( |
| 945 gpu_info.secondary_gpus.size() + 1); | 958 gpu_info.secondary_gpus.size() + 1); |
| 946 | 959 |
| 947 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) { | 960 if (ui::GpuSwitchingManager::GetInstance()->SupportsDualGpus()) { |
| 948 if (gpu_driver_bugs_.count(gpu::FORCE_DISCRETE_GPU) == 1) | 961 if (gpu_driver_bugs_.count(gpu::FORCE_DISCRETE_GPU) == 1) |
| 949 ui::GpuSwitchingManager::GetInstance()->ForceUseOfDiscreteGpu(); | 962 ui::GpuSwitchingManager::GetInstance()->ForceUseOfDiscreteGpu(); |
| 950 else if (gpu_driver_bugs_.count(gpu::FORCE_INTEGRATED_GPU) == 1) | 963 else if (gpu_driver_bugs_.count(gpu::FORCE_INTEGRATED_GPU) == 1) |
| 951 ui::GpuSwitchingManager::GetInstance()->ForceUseOfIntegratedGpu(); | 964 ui::GpuSwitchingManager::GetInstance()->ForceUseOfIntegratedGpu(); |
| 952 } | 965 } |
| 953 } | 966 } |
| 954 | 967 |
| 955 void GpuDataManagerImplPrivate::NotifyGpuInfoUpdate() { | 968 void GpuDataManagerImplPrivate::NotifyGpuInfoUpdate() { |
| 956 observer_list_->Notify(&GpuDataManagerObserver::OnGpuInfoUpdate); | 969 observer_list_->Notify(&GpuDataManagerObserver::OnGpuInfoUpdate); |
| 957 } | 970 } |
| 958 | 971 |
| 959 void GpuDataManagerImplPrivate::EnableSwiftShaderIfNecessary() { | 972 void GpuDataManagerImplPrivate::EnableSwiftShaderIfNecessary() { |
| 973 if (ShouldUseWarp()) |
| 974 return; |
| 975 |
| 960 if (!GpuAccessAllowed(NULL) || | 976 if (!GpuAccessAllowed(NULL) || |
| 961 blacklisted_features_.count(gpu::GPU_FEATURE_TYPE_WEBGL)) { | 977 blacklisted_features_.count(gpu::GPU_FEATURE_TYPE_WEBGL)) { |
| 962 if (!swiftshader_path_.empty() && | 978 if (!swiftshader_path_.empty() && |
| 963 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 979 !base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 964 switches::kDisableSoftwareRasterizer)) | 980 switches::kDisableSoftwareRasterizer)) |
| 965 use_swiftshader_ = true; | 981 use_swiftshader_ = true; |
| 966 } | 982 } |
| 967 } | 983 } |
| 968 | 984 |
| 985 void GpuDataManagerImplPrivate::EnableWarpIfNecessary() { |
| 986 #if defined(OS_WIN) |
| 987 // We should only use WARP if we are unable to use the regular GPU for |
| 988 // compositing, and if we should fall back. |
| 989 use_warp_ = !CanUseGpuBrowserCompositor() && |
| 990 gpu::ShouldFallbackToWarp(); |
| 991 #endif |
| 992 } |
| 993 |
| 969 std::string GpuDataManagerImplPrivate::GetDomainFromURL( | 994 std::string GpuDataManagerImplPrivate::GetDomainFromURL( |
| 970 const GURL& url) const { | 995 const GURL& url) const { |
| 971 // For the moment, we just use the host, or its IP address, as the | 996 // For the moment, we just use the host, or its IP address, as the |
| 972 // entry in the set, rather than trying to figure out the top-level | 997 // entry in the set, rather than trying to figure out the top-level |
| 973 // domain. This does mean that a.foo.com and b.foo.com will be | 998 // domain. This does mean that a.foo.com and b.foo.com will be |
| 974 // treated independently in the blocking of a given domain, but it | 999 // treated independently in the blocking of a given domain, but it |
| 975 // would require a third-party library to reliably figure out the | 1000 // would require a third-party library to reliably figure out the |
| 976 // top-level domain from a URL. | 1001 // top-level domain from a URL. |
| 977 if (!url.has_host()) { | 1002 if (!url.has_host()) { |
| 978 return std::string(); | 1003 return std::string(); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1073 | 1098 |
| 1074 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { | 1099 void GpuDataManagerImplPrivate::OnGpuProcessInitFailure() { |
| 1075 gpu_process_accessible_ = false; | 1100 gpu_process_accessible_ = false; |
| 1076 gpu_info_.finalized = true; | 1101 gpu_info_.finalized = true; |
| 1077 complete_gpu_info_already_requested_ = true; | 1102 complete_gpu_info_already_requested_ = true; |
| 1078 // Some observers might be waiting. | 1103 // Some observers might be waiting. |
| 1079 NotifyGpuInfoUpdate(); | 1104 NotifyGpuInfoUpdate(); |
| 1080 } | 1105 } |
| 1081 | 1106 |
| 1082 } // namespace content | 1107 } // namespace content |
| OLD | NEW |