#ifndef CONTENT_PUBLIC_BROWSER_GPU_DATA_MANAGER_H_
#define CONTENT_PUBLIC_BROWSER_GPU_DATA_MANAGER_H_
#include <string>
#include "base/functional/callback_forward.h"
#include "base/process/process.h"
#include "content/common/content_export.h"
#include "gpu/config/gpu_feature_info.h"
#include "gpu/config/gpu_feature_type.h"
namespace base {
class CommandLine;
}
namespace gpu {
struct GPUInfo;
struct VideoMemoryUsageStats;
}
namespace content {
enum GpuProcessKind {
GPU_PROCESS_KIND_INFO_COLLECTION,
GPU_PROCESS_KIND_SANDBOXED,
GPU_PROCESS_KIND_COUNT
};
class GpuDataManagerObserver;
class GpuDataManager {
public:
using VideoMemoryUsageStatsCallback =
base::OnceCallback<void(const gpu::VideoMemoryUsageStats&)>;
CONTENT_EXPORT static GpuDataManager* GetInstance();
CONTENT_EXPORT static bool Initialized();
virtual void BlocklistWebGLForTesting() = 0;
virtual gpu::GPUInfo GetGPUInfo() = 0;
virtual gpu::GpuFeatureStatus GetFeatureStatus(
gpu::GpuFeatureType feature) = 0;
virtual bool GpuAccessAllowed(std::string* reason) = 0;
virtual bool IsEssentialGpuInfoAvailable() = 0;
virtual void RequestVideoMemoryUsageStatsUpdate(
VideoMemoryUsageStatsCallback callback) = 0;
virtual void AddObserver(GpuDataManagerObserver* observer) = 0;
virtual void RemoveObserver(GpuDataManagerObserver* observer) = 0;
virtual void DisableHardwareAcceleration() = 0;
virtual bool HardwareAccelerationEnabled() = 0;
virtual void AppendGpuCommandLine(base::CommandLine* command_line,
GpuProcessKind kind) = 0;
protected:
virtual ~GpuDataManager() {}
};
}
#endif