[tbb-commits] [tor-browser/tor-browser-84.0-10.0-1] Bug 1676474 - Disable webrender partial present on Mali-Gxx. r=aosmond, a=RyanVM

sysrqb at torproject.org sysrqb at torproject.org
Fri Dec 11 18:25:48 UTC 2020


commit 0d1c263a3403f7d74899ed89b37bd3787171a9e3
Author: Jamie Nicol <jnicol at mozilla.com>
Date:   Wed Dec 9 13:07:33 2020 +0000

    Bug 1676474 - Disable webrender partial present on Mali-Gxx. r=aosmond, a=RyanVM
    
    Due to rendering issues reported on a Mali-G77, disable partial
    present on all Mali-Gxx devices.
    
    Differential Revision: https://phabricator.services.mozilla.com/D99216
---
 gfx/config/gfxConfigManager.cpp       | 10 ++++++++++
 gfx/tests/gtest/TestConfigManager.cpp | 23 +++++++++++++++++++----
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/gfx/config/gfxConfigManager.cpp b/gfx/config/gfxConfigManager.cpp
index 1f75d301ea66..994658d90228 100644
--- a/gfx/config/gfxConfigManager.cpp
+++ b/gfx/config/gfxConfigManager.cpp
@@ -386,6 +386,16 @@ void gfxConfigManager::ConfigureWebRender() {
   if (mWrPartialPresent) {
     if (mFeatureWr->IsEnabled()) {
       mFeatureWrPartial->EnableByDefault();
+
+      nsString adapter;
+      mGfxInfo->GetAdapterDeviceID(adapter);
+      // Block partial present on Mali-Gxx GPUs due to rendering issues.
+      // See bug 1676474.
+      if (adapter.Find("Mali-G", /*ignoreCase*/ true) >= 0) {
+        mFeatureWrPartial->Disable(FeatureStatus::Blocked,
+                                   "Partial present blocked on Mali-Gxx",
+                                   "FEATURE_FAILURE_PARTIAL_PRESENT_MALI"_ns);
+      }
     }
   }
 }
diff --git a/gfx/tests/gtest/TestConfigManager.cpp b/gfx/tests/gtest/TestConfigManager.cpp
index bf43001ac419..707e3b277e90 100644
--- a/gfx/tests/gtest/TestConfigManager.cpp
+++ b/gfx/tests/gtest/TestConfigManager.cpp
@@ -26,6 +26,7 @@ class MockGfxInfo final : public nsIGfxInfo {
   bool mHasMixedRefreshRate;
   Maybe<bool> mHasBattery;
   const char* mVendorId;
+  const char* mDeviceId;
 
   // Default allows WebRender + compositor, and is desktop NVIDIA.
   MockGfxInfo()
@@ -35,7 +36,8 @@ class MockGfxInfo final : public nsIGfxInfo {
         mMaxRefreshRate(-1),
         mHasMixedRefreshRate(false),
         mHasBattery(Some(false)),
-        mVendorId("0x10de") {}
+        mVendorId("0x10de"),
+        mDeviceId("") {}
 
   NS_IMETHOD GetFeatureStatus(int32_t aFeature, nsACString& aFailureId,
                               int32_t* _retval) override {
@@ -71,6 +73,14 @@ class MockGfxInfo final : public nsIGfxInfo {
     return NS_OK;
   }
 
+  NS_IMETHOD GetAdapterDeviceID(nsAString& aAdapterDeviceID) override {
+    if (!mDeviceId) {
+      return NS_ERROR_NOT_IMPLEMENTED;
+    }
+    aAdapterDeviceID.AssignASCII(mDeviceId);
+    return NS_OK;
+  }
+
   NS_IMETHOD_(int32_t) GetMaxRefreshRate(bool* aMixed) override {
     if (aMixed) {
       *aMixed = mHasMixedRefreshRate;
@@ -164,9 +174,6 @@ class MockGfxInfo final : public nsIGfxInfo {
   NS_IMETHOD GetAdapterDriver(nsAString& aAdapterDriver) override {
     return NS_ERROR_NOT_IMPLEMENTED;
   }
-  NS_IMETHOD GetAdapterDeviceID(nsAString& aAdapterDeviceID) override {
-    return NS_ERROR_NOT_IMPLEMENTED;
-  }
   NS_IMETHOD GetAdapterSubsysID(nsAString& aAdapterSubsysID) override {
     return NS_ERROR_NOT_IMPLEMENTED;
   }
@@ -333,6 +340,14 @@ TEST_F(GfxConfigManager, WebRenderNoPartialPresent) {
   EXPECT_FALSE(mFeatures.mWrSoftware.IsEnabled());
 }
 
+TEST_F(GfxConfigManager, WebRenderPartialPresentMali) {
+  mWrPartialPresent = true;
+  mMockGfxInfo->mDeviceId = "Mali-G77";
+  ConfigureWebRender();
+
+  EXPECT_FALSE(mFeatures.mWrPartial.IsEnabled());
+}
+
 TEST_F(GfxConfigManager, WebRenderScaledResolutionWithHwStretching) {
   mScaledResolution = true;
   ConfigureWebRender();





More information about the tbb-commits mailing list