tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestConfigManager.cpp (33527B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 #include "gtest/gtest.h"
      7 
      8 #include "gfxFeature.h"
      9 #include "mozilla/gfx/gfxConfigManager.h"
     10 #include "nsIGfxInfo.h"
     11 
     12 using namespace mozilla;
     13 using namespace mozilla::gfx;
     14 
     15 namespace mozilla {
     16 namespace gfx {
     17 
     18 class MockGfxInfo final : public nsIGfxInfo {
     19 public:
     20  NS_DECL_THREADSAFE_ISUPPORTS
     21 
     22  int32_t mStatusWr = nsIGfxInfo::FEATURE_STATUS_OK;
     23  int32_t mStatusWrCompositor = nsIGfxInfo::FEATURE_STATUS_OK;
     24  int32_t mStatusWrShaderCache = nsIGfxInfo::FEATURE_STATUS_OK;
     25  int32_t mStatusWrOptimizedShaders = nsIGfxInfo::FEATURE_STATUS_OK;
     26  int32_t mStatusWrPartialPresent = nsIGfxInfo::FEATURE_STATUS_OK;
     27  int32_t mStatusWrScissoredCacheClears = nsIGfxInfo::FEATURE_STATUS_OK;
     28  int32_t mStatusWrDComp = nsIGfxInfo::FEATURE_STATUS_OK;
     29  int32_t mStatusGLNorm16Textures = nsIGfxInfo::FEATURE_STATUS_OK;
     30  Maybe<bool> mHasBattery = Some(false);
     31  const char* mVendorId = "0x10de";
     32  const char* mDeviceId = "";
     33 
     34  // Default allows WebRender + compositor, and is desktop NVIDIA.
     35  MockGfxInfo() = default;
     36 
     37  NS_IMETHOD GetFeatureStatus(int32_t aFeature, nsACString& aFailureId,
     38                              int32_t* _retval) override {
     39    switch (aFeature) {
     40      case nsIGfxInfo::FEATURE_WEBRENDER:
     41        *_retval = mStatusWr;
     42        break;
     43      case nsIGfxInfo::FEATURE_WEBRENDER_COMPOSITOR:
     44        *_retval = mStatusWrCompositor;
     45        break;
     46      case nsIGfxInfo::FEATURE_WEBRENDER_SHADER_CACHE:
     47        *_retval = mStatusWrShaderCache;
     48        break;
     49      case nsIGfxInfo::FEATURE_WEBRENDER_OPTIMIZED_SHADERS:
     50        *_retval = mStatusWrOptimizedShaders;
     51        break;
     52      case nsIGfxInfo::FEATURE_WEBRENDER_PARTIAL_PRESENT:
     53        *_retval = mStatusWrPartialPresent;
     54        break;
     55      case nsIGfxInfo::FEATURE_WEBRENDER_SCISSORED_CACHE_CLEARS:
     56        *_retval = mStatusWrScissoredCacheClears;
     57        break;
     58      case nsIGfxInfo::FEATURE_WEBRENDER_DCOMP:
     59        *_retval = mStatusWrDComp;
     60        break;
     61      case nsIGfxInfo::FEATURE_GL_NORM16_TEXTURES:
     62        *_retval = mStatusGLNorm16Textures;
     63        break;
     64      default:
     65        return NS_ERROR_NOT_IMPLEMENTED;
     66    }
     67    return NS_OK;
     68  }
     69 
     70  NS_IMETHOD GetHasBattery(bool* aHasBattery) override {
     71    if (mHasBattery.isNothing()) {
     72      return NS_ERROR_NOT_IMPLEMENTED;
     73    }
     74    *aHasBattery = *mHasBattery;
     75    return NS_OK;
     76  }
     77 
     78  NS_IMETHOD GetAdapterVendorID(nsAString& aAdapterVendorID) override {
     79    if (!mVendorId) {
     80      return NS_ERROR_NOT_IMPLEMENTED;
     81    }
     82    aAdapterVendorID.AssignASCII(mVendorId);
     83    return NS_OK;
     84  }
     85 
     86  NS_IMETHOD GetAdapterDeviceID(nsAString& aAdapterDeviceID) override {
     87    if (!mDeviceId) {
     88      return NS_ERROR_NOT_IMPLEMENTED;
     89    }
     90    aAdapterDeviceID.AssignASCII(mDeviceId);
     91    return NS_OK;
     92  }
     93 
     94  NS_IMETHOD GetTextScaleFactor(float* aTextScaleFactor) override {
     95    return NS_ERROR_NOT_IMPLEMENTED;
     96  }
     97 
     98  NS_IMETHODIMP GetEmbeddedInFirefoxReality(
     99      bool* aEmbeddedInFirefoxReality) override {
    100    return NS_ERROR_NOT_IMPLEMENTED;
    101  }
    102 
    103  NS_IMETHOD GetAzureCanvasBackend(nsAString& aBackend) override {
    104    return NS_ERROR_NOT_IMPLEMENTED;
    105  }
    106 
    107  NS_IMETHOD GetAzureContentBackend(nsAString& aBackend) override {
    108    return NS_ERROR_NOT_IMPLEMENTED;
    109  }
    110 
    111  // The following methods we don't need for testing gfxConfigManager.
    112  NS_IMETHOD GetFeatureStatusStr(const nsAString& aFeature,
    113                                 nsACString& aFailureId,
    114                                 nsAString& _retval) override {
    115    return NS_ERROR_NOT_IMPLEMENTED;
    116  }
    117 
    118  NS_IMETHOD GetFeatureSuggestedDriverVersionStr(const nsAString& aFeature,
    119                                                 nsAString& _retval) override {
    120    return NS_ERROR_NOT_IMPLEMENTED;
    121  }
    122 
    123  NS_IMETHOD GetFeatureSuggestedDriverVersion(int32_t aFeature,
    124                                              nsAString& _retval) override {
    125    return NS_ERROR_NOT_IMPLEMENTED;
    126  }
    127 
    128  NS_IMETHOD GetMonitors(JSContext* cx,
    129                         JS::MutableHandle<JS::Value> _retval) override {
    130    return NS_ERROR_NOT_IMPLEMENTED;
    131  }
    132  NS_IMETHOD GetFailures(nsTArray<int32_t>& indices,
    133                         nsTArray<nsCString>& failures) override {
    134    return NS_ERROR_NOT_IMPLEMENTED;
    135  }
    136  NS_IMETHOD_(void) LogFailure(const nsACString& failure) override {}
    137  NS_IMETHOD GetInfo(JSContext*, JS::MutableHandle<JS::Value>) override {
    138    return NS_ERROR_NOT_IMPLEMENTED;
    139  }
    140  NS_IMETHOD GetFeatures(JSContext*, JS::MutableHandle<JS::Value>) override {
    141    return NS_ERROR_NOT_IMPLEMENTED;
    142  }
    143  NS_IMETHOD GetFeatureLog(JSContext*, JS::MutableHandle<JS::Value>) override {
    144    return NS_ERROR_NOT_IMPLEMENTED;
    145  }
    146  NS_IMETHOD GetActiveCrashGuards(JSContext*,
    147                                  JS::MutableHandle<JS::Value>) override {
    148    return NS_ERROR_NOT_IMPLEMENTED;
    149  }
    150  NS_IMETHOD GetFontVisibilityDetermination(
    151      nsIGfxInfo::FontVisibilityDeviceDetermination*
    152          aFontVisibilityDetermination) override {
    153    return NS_ERROR_NOT_IMPLEMENTED;
    154  }
    155  NS_IMETHOD GetFontVisibilityDeterminationStr(
    156      nsAString& aFontVisibilityDeterminationStr) override {
    157    return NS_ERROR_NOT_IMPLEMENTED;
    158  }
    159  NS_IMETHOD GetContentBackend(nsAString& aContentBackend) override {
    160    return NS_ERROR_NOT_IMPLEMENTED;
    161  }
    162  NS_IMETHOD GetUsingGPUProcess(bool* aOutValue) override {
    163    return NS_ERROR_NOT_IMPLEMENTED;
    164  }
    165  NS_IMETHOD GetUsingAcceleratedCanvas(bool* aOutValue) override {
    166    return NS_ERROR_NOT_IMPLEMENTED;
    167  }
    168  NS_IMETHOD GetIsHeadless(bool* aIsHeadless) override {
    169    return NS_ERROR_NOT_IMPLEMENTED;
    170  }
    171  NS_IMETHOD GetTargetFrameRate(uint32_t* aTargetFrameRate) override {
    172    return NS_ERROR_NOT_IMPLEMENTED;
    173  }
    174  NS_IMETHOD GetCodecSupportInfo(nsACString& aCodecSupportInfo) override {
    175    return NS_ERROR_NOT_IMPLEMENTED;
    176  }
    177  NS_IMETHOD_(void)
    178  SetCodecSupportInfo(const nsACString& aCodecSupportInfo) override {}
    179  NS_IMETHOD GetDWriteEnabled(bool* aDWriteEnabled) override {
    180    return NS_ERROR_NOT_IMPLEMENTED;
    181  }
    182  NS_IMETHOD GetDWriteVersion(nsAString& aDwriteVersion) override {
    183    return NS_ERROR_NOT_IMPLEMENTED;
    184  }
    185  NS_IMETHOD GetCleartypeParameters(nsAString& aCleartypeParams) override {
    186    return NS_ERROR_NOT_IMPLEMENTED;
    187  }
    188  NS_IMETHOD GetWindowProtocol(nsAString& aWindowProtocol) override {
    189    return NS_ERROR_NOT_IMPLEMENTED;
    190  }
    191  NS_IMETHOD GetTestType(nsAString& aTestType) override {
    192    return NS_ERROR_NOT_IMPLEMENTED;
    193  }
    194  NS_IMETHOD GetAdapterDescription(nsAString& aAdapterDescription) override {
    195    return NS_ERROR_NOT_IMPLEMENTED;
    196  }
    197  NS_IMETHOD GetAdapterDriver(nsAString& aAdapterDriver) override {
    198    return NS_ERROR_NOT_IMPLEMENTED;
    199  }
    200  NS_IMETHOD GetAdapterSubsysID(nsAString& aAdapterSubsysID) override {
    201    return NS_ERROR_NOT_IMPLEMENTED;
    202  }
    203  NS_IMETHOD GetAdapterRAM(uint32_t* aAdapterRAM) override {
    204    return NS_ERROR_NOT_IMPLEMENTED;
    205  }
    206  NS_IMETHOD GetAdapterDriverVendor(nsAString& aAdapterDriverVendor) override {
    207    return NS_ERROR_NOT_IMPLEMENTED;
    208  }
    209  NS_IMETHOD GetAdapterDriverVersion(
    210      nsAString& aAdapterDriverVersion) override {
    211    return NS_ERROR_NOT_IMPLEMENTED;
    212  }
    213  NS_IMETHOD GetAdapterDriverDate(nsAString& aAdapterDriverDate) override {
    214    return NS_ERROR_NOT_IMPLEMENTED;
    215  }
    216  NS_IMETHOD GetAdapterDescription2(nsAString& aAdapterDescription) override {
    217    return NS_ERROR_NOT_IMPLEMENTED;
    218  }
    219  NS_IMETHOD GetAdapterDriver2(nsAString& aAdapterDriver) override {
    220    return NS_ERROR_NOT_IMPLEMENTED;
    221  }
    222  NS_IMETHOD GetAdapterVendorID2(nsAString& aAdapterVendorID) override {
    223    return NS_ERROR_NOT_IMPLEMENTED;
    224  }
    225  NS_IMETHOD GetAdapterDeviceID2(nsAString& aAdapterDeviceID) override {
    226    return NS_ERROR_NOT_IMPLEMENTED;
    227  }
    228  NS_IMETHOD GetAdapterSubsysID2(nsAString& aAdapterSubsysID) override {
    229    return NS_ERROR_NOT_IMPLEMENTED;
    230  }
    231  NS_IMETHOD GetAdapterRAM2(uint32_t* aAdapterRAM) override {
    232    return NS_ERROR_NOT_IMPLEMENTED;
    233  }
    234  NS_IMETHOD GetAdapterDriverVendor2(nsAString& aAdapterDriverVendor) override {
    235    return NS_ERROR_NOT_IMPLEMENTED;
    236  }
    237  NS_IMETHOD GetAdapterDriverVersion2(
    238      nsAString& aAdapterDriverVersion) override {
    239    return NS_ERROR_NOT_IMPLEMENTED;
    240  }
    241  NS_IMETHOD GetAdapterDriverDate2(nsAString& aAdapterDriverDate) override {
    242    return NS_ERROR_NOT_IMPLEMENTED;
    243  }
    244  NS_IMETHOD GetIsGPU2Active(bool* aIsGPU2Active) override {
    245    return NS_ERROR_NOT_IMPLEMENTED;
    246  }
    247  NS_IMETHOD GetDrmRenderDevice(nsACString& aDrmRenderDevice) override {
    248    return NS_ERROR_NOT_IMPLEMENTED;
    249  }
    250  NS_IMETHOD ControlGPUProcessForXPCShell(bool aEnable,
    251                                          bool* _retval) override {
    252    return NS_ERROR_NOT_IMPLEMENTED;
    253  }
    254  NS_IMETHOD KillGPUProcessForTests() override {
    255    return NS_ERROR_NOT_IMPLEMENTED;
    256  }
    257  NS_IMETHOD CrashGPUProcessForTests() override {
    258    return NS_ERROR_NOT_IMPLEMENTED;
    259  }
    260 
    261  NS_IMETHOD_(void) GetData() override {}
    262 
    263 private:
    264  virtual ~MockGfxInfo() = default;
    265 };
    266 
    267 NS_IMPL_ISUPPORTS(MockGfxInfo, nsIGfxInfo)
    268 
    269 class GfxConfigManager : public ::testing::Test, public gfxConfigManager {
    270 public:
    271  GfxConfigManager() {
    272    mFeatureWr = &mFeatures.mWr;
    273    mFeatureWrCompositor = &mFeatures.mWrCompositor;
    274    mFeatureWrAngle = &mFeatures.mWrAngle;
    275    mFeatureWrDComp = &mFeatures.mWrDComp;
    276    mFeatureWrPartial = &mFeatures.mWrPartial;
    277    mFeatureWrShaderCache = &mFeatures.mWrShaderCache;
    278    mFeatureWrOptimizedShaders = &mFeatures.mWrOptimizedShaders;
    279    mFeatureWrScissoredCacheClears = &mFeatures.mWrScissoredCacheClears;
    280    mFeatureHwCompositing = &mFeatures.mHwCompositing;
    281    mFeatureGPUProcess = &mFeatures.mGPUProcess;
    282    mFeatureGLNorm16Textures = &mFeatures.mGLNorm16Textures;
    283  }
    284 
    285  void SetUp() override {
    286    mMockGfxInfo = new MockGfxInfo();
    287    mGfxInfo = mMockGfxInfo;
    288 
    289    mFeatureD3D11HwAngle = &mFeatures.mD3D11HwAngle;
    290    mFeatureD3D11Compositing = &mFeatures.mD3D11Compositing;
    291 
    292    // By default, turn everything on. This effectively assumes we are on
    293    // qualified nightly Windows 10 with DirectComposition support.
    294    mFeatureHwCompositing->EnableByDefault();
    295    mFeatureD3D11HwAngle->EnableByDefault();
    296    mFeatureD3D11Compositing->EnableByDefault();
    297    mFeatureGPUProcess->EnableByDefault();
    298 
    299    mWrCompositorEnabled.emplace(true);
    300    mWrPartialPresent = true;
    301    mWrShaderCache.emplace(true);
    302    mWrOptimizedShaders = true;
    303    mWrForceAngle = true;
    304    mWrDCompWinEnabled = true;
    305    mWrCompositorDCompRequired = true;
    306    mWrScissoredCacheClearsEnabled = true;
    307    ++mHwStretchingSupport.mBoth;
    308    mIsNightly = true;
    309    mIsEarlyBetaOrEarlier = true;
    310  }
    311 
    312  void TearDown() override {
    313    mFeatures.mWr.Reset();
    314    mFeatures.mWrCompositor.Reset();
    315    mFeatures.mWrAngle.Reset();
    316    mFeatures.mWrDComp.Reset();
    317    mFeatures.mWrPartial.Reset();
    318    mFeatures.mWrShaderCache.Reset();
    319    mFeatures.mWrOptimizedShaders.Reset();
    320    mFeatures.mWrScissoredCacheClears.Reset();
    321    mFeatures.mHwCompositing.Reset();
    322    mFeatures.mD3D11HwAngle.Reset();
    323    mFeatures.mD3D11Compositing.Reset();
    324    mFeatures.mGPUProcess.Reset();
    325    mFeatures.mGLNorm16Textures.Reset();
    326  }
    327 
    328  struct {
    329    FeatureState mWr;
    330    FeatureState mWrCompositor;
    331    FeatureState mWrAngle;
    332    FeatureState mWrDComp;
    333    FeatureState mWrPartial;
    334    FeatureState mWrShaderCache;
    335    FeatureState mWrOptimizedShaders;
    336    FeatureState mWrScissoredCacheClears;
    337    FeatureState mHwCompositing;
    338    FeatureState mD3D11HwAngle;
    339    FeatureState mD3D11Compositing;
    340    FeatureState mGPUProcess;
    341    FeatureState mGLNorm16Textures;
    342  } mFeatures;
    343 
    344  RefPtr<MockGfxInfo> mMockGfxInfo;
    345 };
    346 
    347 }  // namespace gfx
    348 }  // namespace mozilla
    349 
    350 TEST_F(GfxConfigManager, WebRenderDefault) {
    351  ConfigureWebRender();
    352 
    353  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    354  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    355  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    356  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    357  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    358  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    359  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    360  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    361  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    362  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    363  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    364  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    365 }
    366 
    367 TEST_F(GfxConfigManager, WebRenderDefaultRelease) {
    368  mIsNightly = mIsEarlyBetaOrEarlier = false;
    369  ConfigureWebRender();
    370 
    371  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    372  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    373  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    374  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    375  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    376  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    377  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    378  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    379  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    380  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    381  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    382  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    383 }
    384 
    385 TEST_F(GfxConfigManager, WebRenderNoPartialPresent) {
    386  mWrPartialPresent = false;
    387  ConfigureWebRender();
    388 
    389  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    390  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    391  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    392  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    393  EXPECT_FALSE(mFeatures.mWrPartial.IsEnabled());
    394  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    395  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    396  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    397  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    398  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    399  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    400  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    401 }
    402 
    403 TEST_F(GfxConfigManager, WebRenderPartialBlocked) {
    404  mWrPartialPresent = true;
    405  mMockGfxInfo->mStatusWrPartialPresent = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    406  ConfigureWebRender();
    407 
    408  EXPECT_FALSE(mFeatures.mWrPartial.IsEnabled());
    409 }
    410 
    411 TEST_F(GfxConfigManager, WebRenderForcePartialBlocked) {
    412  mWrForcePartialPresent = true;
    413  mMockGfxInfo->mStatusWrPartialPresent = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    414  ConfigureWebRender();
    415 
    416  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    417 }
    418 
    419 TEST_F(GfxConfigManager, WebRenderScaledResolutionWithHwStretching) {
    420  mScaledResolution = true;
    421  ConfigureWebRender();
    422 
    423  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    424  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    425  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    426  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    427  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    428  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    429  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    430  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    431  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    432  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    433  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    434  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    435 }
    436 
    437 TEST_F(GfxConfigManager, WebRenderScaledResolutionNoHwStretching) {
    438  ++mHwStretchingSupport.mNone;
    439  mScaledResolution = true;
    440  ConfigureWebRender();
    441 
    442  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    443  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    444  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    445  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    446  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    447  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    448  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    449  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    450  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    451  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    452  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    453  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    454 }
    455 
    456 TEST_F(GfxConfigManager, WebRenderEnabledWithDisableHwCompositingNoWr) {
    457  mDisableHwCompositingNoWr = true;
    458  ConfigureWebRender();
    459 
    460  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    461  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    462  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    463  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    464  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    465  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    466  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    467  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    468  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    469  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    470  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    471  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    472 }
    473 
    474 TEST_F(GfxConfigManager, WebRenderDisabledWithDisableHwCompositingNoWr) {
    475  mDisableHwCompositingNoWr = true;
    476  mMockGfxInfo->mStatusWr = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    477  ConfigureWebRender();
    478 
    479  EXPECT_FALSE(mFeatures.mWr.IsEnabled());
    480  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    481  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    482  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    483  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    484  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    485  EXPECT_FALSE(mFeatures.mWrOptimizedShaders.IsEnabled());
    486  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    487  EXPECT_FALSE(mFeatures.mHwCompositing.IsEnabled());
    488  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    489  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    490  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    491 }
    492 
    493 TEST_F(GfxConfigManager, WebRenderSafeMode) {
    494  mSafeMode = true;
    495  ConfigureWebRender();
    496 
    497  EXPECT_FALSE(mFeatures.mWr.IsEnabled());
    498  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    499  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    500  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    501  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    502  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    503  EXPECT_FALSE(mFeatures.mWrOptimizedShaders.IsEnabled());
    504  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    505  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    506  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    507  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    508  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    509 }
    510 
    511 TEST_F(GfxConfigManager, WebRenderDCompDisabled) {
    512  mWrDCompWinEnabled = false;
    513  ConfigureWebRender();
    514 
    515  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    516  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    517  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    518  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    519  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    520  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    521  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    522  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    523  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    524  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    525  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    526  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    527 }
    528 
    529 TEST_F(GfxConfigManager, WebRenderDCompNotRequired) {
    530  mWrDCompWinEnabled = false;
    531  mWrCompositorDCompRequired = false;
    532  ConfigureWebRender();
    533 
    534  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    535  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    536  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    537  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    538  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    539  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    540  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    541  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    542  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    543  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    544  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    545  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    546 }
    547 
    548 TEST_F(GfxConfigManager, WebRenderDCompBlocked) {
    549  mWrPartialPresent = true;
    550  mMockGfxInfo->mStatusWrDComp = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    551  ConfigureWebRender();
    552 
    553  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    554  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    555  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    556  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    557  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    558  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    559  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    560  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    561  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    562  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    563  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    564  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    565 }
    566 
    567 TEST_F(GfxConfigManager, WebRenderForceAngleDisabled) {
    568  mWrForceAngle = false;
    569  ConfigureWebRender();
    570 
    571  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    572  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    573  EXPECT_FALSE(mFeatures.mWrAngle.IsEnabled());
    574  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    575  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    576  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    577  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    578  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    579  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    580  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    581  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    582  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    583 }
    584 
    585 TEST_F(GfxConfigManager, WebRenderD3D11HwAngleDisabled) {
    586  mFeatures.mD3D11HwAngle.UserDisable("", ""_ns);
    587  ConfigureWebRender();
    588 
    589  EXPECT_FALSE(mFeatures.mWr.IsEnabled());
    590  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    591  EXPECT_FALSE(mFeatures.mWrAngle.IsEnabled());
    592  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    593  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    594  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    595  EXPECT_FALSE(mFeatures.mWrOptimizedShaders.IsEnabled());
    596  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    597  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    598  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    599  EXPECT_FALSE(mFeatures.mD3D11HwAngle.IsEnabled());
    600  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    601 }
    602 
    603 TEST_F(GfxConfigManager, WebRenderD3D11HwAngleAndForceAngleDisabled) {
    604  mWrForceAngle = false;
    605  mFeatures.mD3D11HwAngle.UserDisable("", ""_ns);
    606  ConfigureWebRender();
    607 
    608  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    609  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    610  EXPECT_FALSE(mFeatures.mWrAngle.IsEnabled());
    611  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    612  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    613  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    614  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    615  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    616  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    617  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    618  EXPECT_FALSE(mFeatures.mD3D11HwAngle.IsEnabled());
    619  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    620 }
    621 
    622 TEST_F(GfxConfigManager, WebRenderGPUProcessDisabled) {
    623  mFeatures.mGPUProcess.UserDisable("", ""_ns);
    624  ConfigureWebRender();
    625 
    626  EXPECT_FALSE(mFeatures.mWr.IsEnabled());
    627  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    628  EXPECT_FALSE(mFeatures.mWrAngle.IsEnabled());
    629  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    630  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    631  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    632  EXPECT_FALSE(mFeatures.mWrOptimizedShaders.IsEnabled());
    633  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    634  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    635  EXPECT_FALSE(mFeatures.mGPUProcess.IsEnabled());
    636  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    637  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    638 }
    639 
    640 TEST_F(GfxConfigManager, WebRenderIntelBatteryNoHwStretchingNotNightly) {
    641  mIsNightly = mIsEarlyBetaOrEarlier = false;
    642  ++mHwStretchingSupport.mNone;
    643  mScaledResolution = true;
    644  mMockGfxInfo->mHasBattery.ref() = true;
    645  mMockGfxInfo->mVendorId = "0x8086";
    646  ConfigureWebRender();
    647 
    648  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    649  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    650  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    651  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    652  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    653  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    654  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    655  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    656  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    657  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    658  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    659  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    660 }
    661 
    662 TEST_F(GfxConfigManager, WebRenderSofwareAndNotQualified) {
    663  mMockGfxInfo->mStatusWr = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    664  ConfigureWebRender();
    665 
    666  EXPECT_FALSE(mFeatures.mWr.IsEnabled());
    667  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    668  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    669  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    670  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    671  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    672  EXPECT_FALSE(mFeatures.mWrOptimizedShaders.IsEnabled());
    673  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    674  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    675  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    676  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    677  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    678 }
    679 
    680 TEST_F(GfxConfigManager, WebRenderForceEnabledEnvvar) {
    681  mWrEnvForceEnabled = true;
    682  mMockGfxInfo->mStatusWr = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    683  ConfigureWebRender();
    684 
    685  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    686  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    687  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    688  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    689  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    690  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    691  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    692  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    693  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    694  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    695  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    696  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    697 }
    698 
    699 TEST_F(GfxConfigManager, WebRenderSoftwareAllowedForceEnabledPref) {
    700  mWrForceEnabled = true;
    701  mMockGfxInfo->mStatusWr = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    702  ConfigureWebRender();
    703 
    704  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    705  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    706  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    707  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    708  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    709  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    710  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    711  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    712  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    713  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    714  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    715  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    716 }
    717 
    718 TEST_F(GfxConfigManager, WebRenderForceSoftwareForceEnabledEnvvar) {
    719  mWrEnvForceEnabled = true;
    720  mWrSoftwareForceEnabled = true;
    721  mMockGfxInfo->mStatusWr = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    722  ConfigureWebRender();
    723 
    724  EXPECT_FALSE(mFeatures.mWr.IsEnabled());
    725  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    726  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    727  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    728  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    729  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    730  EXPECT_FALSE(mFeatures.mWrOptimizedShaders.IsEnabled());
    731  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    732  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    733  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    734  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    735  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    736 }
    737 
    738 TEST_F(GfxConfigManager, WebRenderSoftwareReleaseWindowsGPUProcessDisabled) {
    739  mIsNightly = mIsEarlyBetaOrEarlier = false;
    740  mMockGfxInfo->mStatusWr = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    741  mFeatures.mGPUProcess.UserDisable("", ""_ns);
    742  ConfigureWebRender();
    743 
    744  EXPECT_FALSE(mFeatures.mWr.IsEnabled());
    745  EXPECT_FALSE(mFeatures.mWrCompositor.IsEnabled());
    746  EXPECT_FALSE(mFeatures.mWrAngle.IsEnabled());
    747  EXPECT_FALSE(mFeatures.mWrDComp.IsEnabled());
    748  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    749  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    750  EXPECT_FALSE(mFeatures.mWrOptimizedShaders.IsEnabled());
    751  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    752  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    753  EXPECT_FALSE(mFeatures.mGPUProcess.IsEnabled());
    754  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    755  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    756 }
    757 
    758 TEST_F(GfxConfigManager, WebRenderShaderCacheDisabled) {
    759  mWrShaderCache = Some(false);
    760  ConfigureWebRender();
    761 
    762  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    763  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    764  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    765  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    766  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    767  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    768  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    769  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    770  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    771  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    772  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    773  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    774 }
    775 
    776 TEST_F(GfxConfigManager, WebRenderShaderCacheBlocked) {
    777  mMockGfxInfo->mStatusWrShaderCache = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    778  ConfigureWebRender();
    779 
    780  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    781  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    782  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    783  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    784  EXPECT_FALSE(mFeatures.mWrShaderCache.IsEnabled());
    785  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    786  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    787  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    788  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    789  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    790  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    791  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    792 }
    793 
    794 TEST_F(GfxConfigManager, WebRenderScissoredCacheClearsDisabled) {
    795  mWrScissoredCacheClearsEnabled = false;
    796  ConfigureWebRender();
    797 
    798  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    799  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    800  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    801  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    802  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    803  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    804  EXPECT_FALSE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    805  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    806  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    807  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    808  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    809  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    810 }
    811 
    812 TEST_F(GfxConfigManager, WebRenderScissoredCacheClearsBlocked) {
    813  mMockGfxInfo->mStatusWrScissoredCacheClears =
    814      nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    815  ConfigureWebRender();
    816 
    817  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    818  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    819  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    820  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    821  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    822  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    823  EXPECT_FALSE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    824  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    825  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    826  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    827  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    828  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    829 }
    830 
    831 TEST_F(GfxConfigManager, WebRenderScissoredCacheClearsForceEnabled) {
    832  mWrScissoredCacheClearsForceEnabled = false;
    833  mMockGfxInfo->mStatusWrScissoredCacheClears =
    834      nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    835  ConfigureWebRender();
    836 
    837  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    838  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    839  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    840  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    841  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    842  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    843  EXPECT_FALSE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    844  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    845  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    846  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    847  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    848  EXPECT_TRUE(mFeatures.mGLNorm16Textures.IsEnabled());
    849 }
    850 
    851 TEST_F(GfxConfigManager, GLNorm16TexturesBlocked) {
    852  mMockGfxInfo->mStatusGLNorm16Textures = nsIGfxInfo::FEATURE_BLOCKED_DEVICE;
    853  ConfigureWebRender();
    854 
    855  EXPECT_TRUE(mFeatures.mWr.IsEnabled());
    856  EXPECT_TRUE(mFeatures.mWrCompositor.IsEnabled());
    857  EXPECT_TRUE(mFeatures.mWrAngle.IsEnabled());
    858  EXPECT_TRUE(mFeatures.mWrDComp.IsEnabled());
    859  EXPECT_TRUE(mFeatures.mWrShaderCache.IsEnabled());
    860  EXPECT_TRUE(mFeatures.mWrOptimizedShaders.IsEnabled());
    861  EXPECT_TRUE(mFeatures.mWrScissoredCacheClears.IsEnabled());
    862  EXPECT_TRUE(mFeatures.mWrPartial.IsEnabled());
    863  EXPECT_TRUE(mFeatures.mHwCompositing.IsEnabled());
    864  EXPECT_TRUE(mFeatures.mGPUProcess.IsEnabled());
    865  EXPECT_TRUE(mFeatures.mD3D11HwAngle.IsEnabled());
    866  EXPECT_FALSE(mFeatures.mGLNorm16Textures.IsEnabled());
    867 }