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 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 91 class 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