1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_GPU_GPU_FEATURE_CHECKER_H_
6#define CHROME_BROWSER_GPU_GPU_FEATURE_CHECKER_H_
7
8#include "base/callback.h"
9#include "base/memory/ref_counted.h"
10#include "content/public/browser/gpu_data_manager_observer.h"
11#include "gpu/config/gpu_feature_type.h"
12
13namespace content {
14class GpuDataManager;
15}  // namespace content
16
17class GPUFeatureChecker : public base::RefCountedThreadSafe<GPUFeatureChecker>,
18                          public content::GpuDataManagerObserver {
19 public:
20  typedef base::Callback<void(bool feature_available)> FeatureAvailableCallback;
21
22  GPUFeatureChecker(gpu::GpuFeatureType feature,
23                    FeatureAvailableCallback callback);
24
25  // Check to see if |feature_| is available on the current GPU. |callback_|
26  // will be called to indicate the availability of the feature. Must be called
27  // from the the UI thread.
28  void CheckGPUFeatureAvailability();
29
30  // content::GpuDataManagerObserver
31  virtual void OnGpuInfoUpdate() OVERRIDE;
32 private:
33  friend class base::RefCountedThreadSafe<GPUFeatureChecker>;
34
35  virtual ~GPUFeatureChecker();
36
37  gpu::GpuFeatureType feature_;
38  FeatureAvailableCallback callback_;
39
40  DISALLOW_COPY_AND_ASSIGN(GPUFeatureChecker);
41};
42
43#endif  // CHROME_BROWSER_GPU_GPU_FEATURE_CHECKER_H_
44