// 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
