// Copyright (c) 2012 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.

#ifndef CHROME_BROWSER_GPU_UTIL_H_
#define CHROME_BROWSER_GPU_UTIL_H_

#include <string>

#include "content/public/common/gpu_feature_type.h"

namespace base {
class DictionaryValue;
class Value;
}

namespace gpu_util {

// Maps string to GpuFeatureType; returns GPU_FEATURE_TYPE_UNKNOWN if none of
// the following is input (case-sensitive):
//   "accelerated_2d_canvas"
//   "accelerated_compositing"
//   "webgl"
//   "multisampling"
content::GpuFeatureType StringToGpuFeatureType(
    const std::string& feature_string);

// Gets a string version of a feature type for use in about:gpu. Will yield
// strings from StringToGpuFeatureType, e.g.
// GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS becomes "accelerated_2d_canvas"
std::string GpuFeatureTypeToString(content::GpuFeatureType feature);

// Returns status of various GPU features. This is two parted:
// {
//    featureStatus: []
//    problems: []
// }
//
// Each entry in feature_status has:
// {
//    name:  "name of feature"
//    status: "enabled" | "unavailable_software" | "unavailable_off" |
//            "software" | "disabled_off" | "disabled_softare";
// }
//
// The features reported are not 1:1 with GpuFeatureType. Rather, they are:
//    '2d_canvas'
//    '3d_css'
//    'composting',
//    'webgl',
//    'multisampling',
//    'flash_3d',
//    'flash_stage3d',
//    'texture_sharing'
//    'video_decode'
//
// Each problems has:
// {
//    "description": "Your GPU is too old",
//    "crBugs": [1234],
//    "webkitBugs": []
// }
//
// Caller is responsible for deleting the returned value.
base::Value* GetFeatureStatus();

// Returns the GpuInfo as a DictionaryValue.
base::DictionaryValue* GpuInfoAsDictionaryValue();

// Send UMA histograms about the enabled features.
void UpdateStats();

// Sets up force-compositing-mode and threaded compositing field trials.
void InitializeCompositingFieldTrial();

}  // namespace gpu_util

#endif  // CHROME_BROWSER_GPU_UTIL_H_