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