gpu_test_config.h revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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
15namespace gpu {
16
17struct GPUInfo;
18
19class 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
54  int32 os() const { return os_; }
55  const std::vector<uint32>& gpu_vendor() const { return gpu_vendor_; }
56  uint32 gpu_device_id() const { return gpu_device_id_; }
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
91class GPU_EXPORT GPUTestBotConfig : public GPUTestConfig {
92 public:
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
121}  // namespace gpu
122
123#endif  // GPU_CONFIG_GPU_TEST_CONFIG_H_
124
125