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     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 
     55   int32 os() const { return os_; }
     56   const std::vector<uint32>& gpu_vendor() const { return gpu_vendor_; }
     57   uint32 gpu_device_id() const { return gpu_device_id_; }
     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:
     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