Elim cr-checkbox
[chromium-blink-merge.git] / gpu / config / gpu_test_config.h
blob10ab9de26c18c414dfc9f262054bf5d4f8bbfe3b
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.
5 #ifndef GPU_CONFIG_GPU_TEST_CONFIG_H_
6 #define GPU_CONFIG_GPU_TEST_CONFIG_H_
8 #include <string>
9 #include <vector>
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "gpu/gpu_export.h"
15 namespace gpu {
17 struct GPUInfo;
19 class GPU_EXPORT GPUTestConfig {
20 public:
21 enum OS {
22 kOsUnknown = 0,
23 kOsWinXP = 1 << 0,
24 kOsWinVista = 1 << 1,
25 kOsWin7 = 1 << 2,
26 kOsWin8 = 1 << 3,
27 kOsMacLeopard = 1 << 4,
28 kOsMacSnowLeopard = 1 << 5,
29 kOsMacLion = 1 << 6,
30 kOsMacMountainLion = 1 << 7,
31 kOsMacMavericks = 1 << 8,
32 kOsMacYosemite = 1 << 9,
33 kOsMac = kOsMacLeopard | kOsMacSnowLeopard | kOsMacLion |
34 kOsMacMountainLion | kOsMacMavericks | kOsMacYosemite,
35 kOsLinux = 1 << 10,
36 kOsChromeOS = 1 << 11,
37 kOsAndroid = 1 << 12,
38 kOsWin10 = 1 << 13,
39 kOsWin = kOsWinXP | kOsWinVista | kOsWin7 | kOsWin8 | kOsWin10,
42 enum BuildType {
43 kBuildTypeUnknown = 0,
44 kBuildTypeRelease = 1 << 0,
45 kBuildTypeDebug = 1 << 1,
48 enum API {
49 kAPIUnknown = 0,
50 kAPID3D9 = 1 << 0,
51 kAPID3D11 = 1 << 1,
52 kAPIGLDesktop = 1 << 2,
53 kAPIGLES = 1 << 3,
56 GPUTestConfig();
57 virtual ~GPUTestConfig();
59 void set_os(int32 os);
60 void set_gpu_device_id(uint32 id);
61 void set_build_type(int32 build_type);
62 void set_api(int32 api);
64 virtual void AddGPUVendor(uint32 gpu_vendor);
66 int32 os() const { return os_; }
67 const std::vector<uint32>& gpu_vendor() const { return gpu_vendor_; }
68 uint32 gpu_device_id() const { return gpu_device_id_; }
69 int32 build_type() const { return build_type_; }
70 int32 api() const { return api_; }
72 // Check if the config is valid. For example, if gpu_device_id_ is set, but
73 // gpu_vendor_ is unknown, then it's invalid.
74 virtual bool IsValid() const;
76 // Check if two configs overlap, i.e., if there exists a config that matches
77 // both configs.
78 bool OverlapsWith(const GPUTestConfig& config) const;
80 // Disable validation of GPU vendor and device ids.
81 void DisableGPUInfoValidation();
83 protected:
84 void ClearGPUVendor();
86 // Indicates that the OS has the notion of a numeric GPU vendor and device id
87 // and this data should be validated.
88 bool validate_gpu_info_;
90 private:
91 // operating system.
92 int32 os_;
94 // GPU vendor.
95 std::vector<uint32> gpu_vendor_;
97 // GPU device id (unique to each vendor).
98 uint32 gpu_device_id_;
100 // Release or Debug.
101 int32 build_type_;
103 // Back-end rendering APIs.
104 int32 api_;
107 class GPU_EXPORT GPUTestBotConfig : public GPUTestConfig {
108 public:
109 GPUTestBotConfig() { }
110 ~GPUTestBotConfig() override;
112 // This should only be called when no gpu_vendor is added.
113 void AddGPUVendor(uint32 gpu_vendor) override;
115 // Return false if gpu_info does not have valid vendor_id and device_id.
116 bool SetGPUInfo(const GPUInfo& gpu_info);
118 // Check if the bot config is valid, i.e., if it is one valid test-bot
119 // environment. For example, if a field is unknown, or if OS is not one
120 // fully defined OS, then it's valid.
121 bool IsValid() const override;
123 // Check if a bot config matches a test config, i.e., the test config is a
124 // superset of the bot config.
125 bool Matches(const GPUTestConfig& config) const;
126 bool Matches(const std::string& config_data) const;
128 // Setup the config with the current gpu testing environment.
129 // If gpu_info is NULL, collect GPUInfo first.
130 bool LoadCurrentConfig(const GPUInfo* gpu_info);
132 // Check if this bot's config matches |config_data| or any of the |configs|.
133 static bool CurrentConfigMatches(const std::string& config_data);
134 static bool CurrentConfigMatches(const std::vector<std::string>& configs);
136 // Check if the bot has blacklisted all GPU features.
137 static bool GpuBlacklistedOnBot();
140 } // namespace gpu
142 #endif // GPU_CONFIG_GPU_TEST_CONFIG_H_