Home | History | Annotate | Download | only in config
      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