| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/browser/gpu/gpu_feature_checker_impl.h" |
| |
| #include "base/logging.h" |
| #include "build/build_config.h" |
| #include "content/browser/gpu/gpu_data_manager_impl.h" |
| #include "content/public/browser/browser_thread.h" |
| |
| namespace content { |
| |
| // static |
| scoped_refptr<GpuFeatureChecker> GpuFeatureChecker::Create( |
| gpu::GpuFeatureType feature, |
| FeatureAvailableCallback callback) { |
| return new GpuFeatureCheckerImpl(feature, std::move(callback)); |
| } |
| |
| GpuFeatureCheckerImpl::GpuFeatureCheckerImpl(gpu::GpuFeatureType feature, |
| FeatureAvailableCallback callback) |
| : feature_(feature), callback_(callback) {} |
| |
| GpuFeatureCheckerImpl::~GpuFeatureCheckerImpl() {} |
| |
| void GpuFeatureCheckerImpl::CheckGpuFeatureAvailability() { |
| CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| AddRef(); // Matched with a Release in OnGpuInfoUpdate. |
| GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance(); |
| manager->AddObserver(this); |
| OnGpuInfoUpdate(); |
| } |
| |
| void GpuFeatureCheckerImpl::OnGpuInfoUpdate() { |
| GpuDataManagerImpl* manager = GpuDataManagerImpl::GetInstance(); |
| if (manager->IsGpuFeatureInfoAvailable()) { |
| manager->RemoveObserver(this); |
| bool feature_allowed = |
| manager->GetFeatureStatus(feature_) == gpu::kGpuFeatureStatusEnabled; |
| callback_.Run(feature_allowed); |
| Release(); // Matches the AddRef in CheckGpuFeatureAvailability(). |
| } |
| } |
| |
| } // namespace content |