• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 GPU_CONFIG_GPU_TEST_CONFIG_H_
6 #define GPU_CONFIG_GPU_TEST_CONFIG_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "gpu/gpu_export.h"
14 
15 namespace gpu {
16 
17 struct GPUInfo;
18 
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     kOsWin = kOsWinXP | kOsWinVista | kOsWin7 | kOsWin8,
28     kOsMacLeopard = 1 << 4,
29     kOsMacSnowLeopard = 1 << 5,
30     kOsMacLion = 1 << 6,
31     kOsMacMountainLion = 1 << 7,
32     kOsMac = kOsMacLeopard | kOsMacSnowLeopard | kOsMacLion |
33              kOsMacMountainLion,
34     kOsLinux = 1 << 8,
35     kOsChromeOS = 1 << 9,
36     kOsAndroid = 1 << 10,
37   };
38 
39   enum BuildType {
40     kBuildTypeUnknown = 0,
41     kBuildTypeRelease = 1 << 0,
42     kBuildTypeDebug = 1 << 1,
43   };
44 
45   GPUTestConfig();
46   virtual ~GPUTestConfig();
47 
48   void set_os(int32 os);
49   void set_gpu_device_id(uint32 id);
50   void set_build_type(int32 build_type);
51 
52   virtual void AddGPUVendor(uint32 gpu_vendor);
53 
os()54   int32 os() const { return os_; }
gpu_vendor()55   const std::vector<uint32>& gpu_vendor() const { return gpu_vendor_; }
gpu_device_id()56   uint32 gpu_device_id() const { return gpu_device_id_; }
build_type()57   int32 build_type() const { return build_type_; }
58 
59   // Check if the config is valid. For example, if gpu_device_id_ is set, but
60   // gpu_vendor_ is unknown, then it's invalid.
61   virtual bool IsValid() const;
62 
63   // Check if two configs overlap, i.e., if there exists a config that matches
64   // both configs.
65   bool OverlapsWith(const GPUTestConfig& config) const;
66 
67   // Disable validation of GPU vendor and device ids.
68   void DisableGPUInfoValidation();
69 
70  protected:
71   void ClearGPUVendor();
72 
73   // Indicates that the OS has the notion of a numeric GPU vendor and device id
74   // and this data should be validated.
75   bool validate_gpu_info_;
76 
77  private:
78   // operating system.
79   int32 os_;
80 
81   // GPU vendor.
82   std::vector<uint32> gpu_vendor_;
83 
84   // GPU device id (unique to each vendor).
85   uint32 gpu_device_id_;
86 
87   // Release or Debug.
88   int32 build_type_;
89 };
90 
91 class GPU_EXPORT GPUTestBotConfig : public GPUTestConfig {
92  public:
GPUTestBotConfig()93   GPUTestBotConfig() { }
94   virtual ~GPUTestBotConfig();
95 
96   // This should only be called when no gpu_vendor is added.
97   virtual void AddGPUVendor(uint32 gpu_vendor) OVERRIDE;
98 
99   // Return false if gpu_info does not have valid vendor_id and device_id.
100   bool SetGPUInfo(const GPUInfo& gpu_info);
101 
102   // Check if the bot config is valid, i.e., if it is one valid test-bot
103   // environment. For example, if a field is unknown, or if OS is not one
104   // fully defined OS, then it's valid.
105   virtual bool IsValid() const OVERRIDE;
106 
107   // Check if a bot config matches a test config, i.e., the test config is a
108   // superset of the bot config.
109   bool Matches(const GPUTestConfig& config) const;
110   bool Matches(const std::string& config_data) const;
111 
112   // Setup the config with the current gpu testing environment.
113   // If gpu_info is NULL, collect GPUInfo first.
114   bool LoadCurrentConfig(const GPUInfo* gpu_info);
115 
116   // Check if this bot's config matches |config_data| or any of the |configs|.
117   static bool CurrentConfigMatches(const std::string& config_data);
118   static bool CurrentConfigMatches(const std::vector<std::string>& configs);
119 
120   // Check if the bot has blacklisted all GPU features.
121   static bool GpuBlacklistedOnBot();
122 };
123 
124 }  // namespace gpu
125 
126 #endif  // GPU_CONFIG_GPU_TEST_CONFIG_H_
127 
128