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