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