diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 1f0d987..e2a63e3 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -125,10 +125,8 @@
 #if BUILDFLAG(IS_APPLE)
   return FXDIB_Format::kRgb32;
 #else
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return FXDIB_Format::kRgb32;
-  }
   return FXDIB_Format::kRgb;
 #endif
 }
@@ -173,8 +171,7 @@
   ScopedSkiaDeviceFlush& operator=(const ScopedSkiaDeviceFlush&) = delete;
 
   ~ScopedSkiaDeviceFlush() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
       m_pDevice->Flush(/*release=*/false);
     }
   }
@@ -722,8 +719,7 @@
   bitmap_render.Initialize(nullptr, nullptr);
   bitmap_render.ProcessObjectNoClip(pPageObj, new_matrix);
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     bitmap_device.Flush(true);
     bitmap->UnPreMultiply();
   }
diff --git a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
index 0cd4cbd..6780516 100644
--- a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
+++ b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
@@ -336,10 +336,8 @@
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderPathWithColorScheme) {
   // Test rendering of paths with forced color scheme on.
   const char* rectangles_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "4b0f850a94698d07b6cd2814d1b4ccb7";
-    }
     return "249f59b0d066c4f6bd89782a80822219";
   }();
 
@@ -355,10 +353,8 @@
   // Test rendering of paths with forced color scheme on and conversion from
   // fill to stroke enabled. The fill paths should be rendered as stroke.
   const char* rectangles_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "c1cbbd2ce6921f608a3c55140592419b";
-    }
     return "0ebcc11e617635eca1fa9ce475383a80";
   }();
 
@@ -428,10 +424,8 @@
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderInkWithColorScheme) {
   // Test rendering of multiple ink with forced color scheme on.
   const char* content_with_ink_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "ebc57721e4c8da34156e09b9b2e62fb0";
-    }
     return "797bce7dc6c50ee86b095405df9fe5aa";
   }();
 
@@ -445,10 +439,8 @@
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderStampWithColorScheme) {
   // Test rendering of static annotation with forced color scheme on.
   const char* content_with_stamp_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "a791fdb4f595bb6c4187cc2aeed5e9e8";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "7a209e29caeeab7d2b25b34570a4ace6";
 #else
@@ -466,10 +458,8 @@
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderFormWithColorScheme) {
   // Test rendering of form does not change with forced color scheme on.
   const char* content_with_form_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "9f75d98afc6d6313bd87e6562ea6df15";
-    }
     return "080f7a4381606659301440e1b14dca35";
   }();
 
diff --git a/core/fxge/cfx_defaultrenderdevice.cpp b/core/fxge/cfx_defaultrenderdevice.cpp
index d50d4a1..52babf7 100644
--- a/core/fxge/cfx_defaultrenderdevice.cpp
+++ b/core/fxge/cfx_defaultrenderdevice.cpp
@@ -17,17 +17,6 @@
     CFX_DefaultRenderDevice::RendererType::kSkia;
 #endif
 
-#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-bool IsSkiaVariant() {
-#if defined(_SKIA_SUPPORT_)
-  return g_default_renderer_type ==
-         CFX_DefaultRenderDevice::RendererType::kSkia;
-#elif defined(_SKIA_SUPPORT_PATHS_)
-  return true;
-#endif
-}
-#endif  // defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-
 }  // namespace
 
 // static
@@ -48,6 +37,11 @@
 #endif
 }
 
+// static
+bool CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer() {
+  return SkiaIsDefaultRenderer() || SkiaPathsIsDefaultRenderer();
+}
+
 #if defined(_SKIA_SUPPORT_)
 // static
 void CFX_DefaultRenderDevice::SetDefaultRenderer(RendererType renderer_type) {
@@ -59,7 +53,7 @@
 
 CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() {
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (IsSkiaVariant())
+  if (SkiaVariantIsDefaultRenderer())
     Flush(true);
 #endif
 }
@@ -88,7 +82,7 @@
     RetainPtr<CFX_DIBitmap> pBackdropBitmap,
     bool bGroupKnockout) {
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (IsSkiaVariant()) {
+  if (SkiaVariantIsDefaultRenderer()) {
     return AttachSkiaImpl(pBitmap, bRgbByteOrder, pBackdropBitmap,
                           bGroupKnockout);
   }
@@ -101,7 +95,7 @@
                                      FXDIB_Format format,
                                      RetainPtr<CFX_DIBitmap> pBackdropBitmap) {
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (IsSkiaVariant())
+  if (SkiaVariantIsDefaultRenderer())
     return CreateSkia(width, height, format, pBackdropBitmap);
 #endif
   return CreateAgg(width, height, format, pBackdropBitmap);
diff --git a/core/fxge/cfx_defaultrenderdevice.h b/core/fxge/cfx_defaultrenderdevice.h
index 0e7d77f..fea123e 100644
--- a/core/fxge/cfx_defaultrenderdevice.h
+++ b/core/fxge/cfx_defaultrenderdevice.h
@@ -49,6 +49,10 @@
   // Runtime check to see if SkiaPaths is the renderer variant in use.
   static bool SkiaPathsIsDefaultRenderer();
 
+  // Convenient way to check if either SkiaIsDefaultRenderer() or
+  // SkiaPathsIsDefaultRenderer() returns true.
+  static bool SkiaVariantIsDefaultRenderer();
+
 #if defined(_SKIA_SUPPORT_)
   // This internal definition of renderer types must stay updated with respect
   // to the public definition of `FPDF_RENDERER_TYPE`, so that all public
diff --git a/core/fxge/cfx_glyphcache.cpp b/core/fxge/cfx_glyphcache.cpp
index ce8d58b..f211e53 100644
--- a/core/fxge/cfx_glyphcache.cpp
+++ b/core/fxge/cfx_glyphcache.cpp
@@ -263,9 +263,9 @@
   ByteString FaceGlyphsKey(keygen.key_, keygen.key_len_);
 
 #if BUILDFLAG(IS_APPLE)
-  const bool bDoLookUp = !text_options->native_text ||
-                         CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-                         CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer();
+  const bool bDoLookUp =
+      !text_options->native_text ||
+      CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer();
 #else
   const bool bDoLookUp = true;
 #endif
@@ -275,8 +275,7 @@
   }
 
 #if BUILDFLAG(IS_APPLE)
-  DCHECK(!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer());
-  DCHECK(!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer());
+  DCHECK(!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer());
 
   std::unique_ptr<CFX_GlyphBitmap> pGlyphBitmap;
   auto it = m_SizeMap.find(FaceGlyphsKey);
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index c50afe6..23793f7 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -490,10 +490,8 @@
 CFX_RenderDevice::~CFX_RenderDevice() {
   RestoreState(false);
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     Flush(true);
-  }
 #endif
 }
 
@@ -807,10 +805,8 @@
     return false;
   }
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     bitmap_device.GetDeviceDriver()->Flush();
-  }
 #endif
   FX_RECT src_rect(0, 0, rect.Width(), rect.Height());
   return m_pDeviceDriver->SetDIBits(bitmap, 0, src_rect, rect.left, rect.top,
@@ -1056,8 +1052,7 @@
         // one expires 10/7/19.  This makes LCD anti-aliasing very ugly, so we
         // instead fall back on NORMAL anti-aliasing.
         anti_alias = FT_RENDER_MODE_NORMAL;
-        if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-            CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+        if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
           // Since |anti_alias| doesn't affect Skia rendering, and Skia only
           // follows strictly to the options provided by |text_options|, we need
           // to update |text_options| so that Skia falls back on normal
@@ -1223,8 +1218,7 @@
   }
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATH_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     // DrawNormalTextHelper() can result in unpremultiplied bitmaps for
     // rendering glyphs. Make sure `bitmap` is premultiplied before proceeding
     // or CFX_DIBBase::DebugVerifyBufferIsPreMultiplied() check will fail.
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index 887c2cc..4060e0a 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -147,18 +147,14 @@
 }  // namespace
 
 TEST(fxge, SkiaStateEmpty) {
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return;
-  }
   Harness(&EmptyTest, {});
 }
 
 TEST(fxge, SkiaStatePath) {
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return;
-  }
   Harness(&CommonTest, {State::Change::kNo, State::Save::kYes,
                         State::Clip::kSame, State::Graphic::kPath, 0xFF112233});
   Harness(&CommonTest,
@@ -187,9 +183,7 @@
 #endif
 
 TEST(fxge, SkiaStateOOSClip) {
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return;
-  }
   Harness(&OutOfSequenceClipTest, {});
 }
diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp
index 8f3cf43..a36177e 100644
--- a/fpdfsdk/fpdf_annot_embeddertest.cpp
+++ b/fpdfsdk/fpdf_annot_embeddertest.cpp
@@ -405,10 +405,8 @@
 
 TEST_F(FPDFAnnotEmbedderTest, RenderMultilineMarkupAnnotWithoutAP) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "ec1f4ccbd0aecfdea6d53893387a0101";
-    }
     return "76512832d88017668d9acc7aacd13dae";
   }();
 
@@ -1117,10 +1115,8 @@
 
 TEST_F(FPDFAnnotEmbedderTest, AddAndModifyPath) {
   const char* md5_modified_path = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "f671765166acf45d80e833ea3aff8b90";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "e31421f86c61d4e9cda138f15f561ca3";
 #else
@@ -1128,10 +1124,8 @@
 #endif
   }();
   const char* md5_two_paths = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "7d2db46e1ae6bcf88d18d334af309551";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "58d932492f9d485d6a4bc0ba76c04557";
 #else
@@ -1139,10 +1133,8 @@
 #endif
   }();
   const char* md5_new_annot = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "92bfb06058ff608571a3baf65f7fc05d";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "61f9ad13f2fd235753db198cf9704773";
 #else
@@ -1359,10 +1351,8 @@
 #endif
   }();
   const char* md5_modified_image = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "5806fadc1a192bc4bb07511a0711c957";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "8068eb568e5c1c5fbe84e98f7a980ac3";
 #else
@@ -1592,10 +1582,8 @@
   UnloadPage(page);
 
   const char* md5 = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "2b9078043cd6130fef4e8542dcda943e";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "cd90315b250dfe08265ce0ac335c5f76";
 #else
@@ -2134,10 +2122,8 @@
 
 TEST_F(FPDFAnnotEmbedderTest, BUG_1206) {
   const char* expected_bitmap = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "a1ea1ceebb26922fae576cb79ce63af0";
-    }
     return "0d9fc05c6762fd788bd23fd87a4967bc";
   }();
   static constexpr size_t kExpectedSize = 1590;
@@ -3060,10 +3046,8 @@
 
   {
     const char* md5_sum = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "7b08d6e8c0423302755c110e17abf7de";
-      }
 #if BUILDFLAG(IS_APPLE)
       return "108a46c517c4eaace9982ee83e8e3296";
 #else
@@ -3090,10 +3074,8 @@
 
   {
     const char* md5_sum = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "371171ea3f000db6354b24a702b0312b";
-      }
 #if BUILDFLAG(IS_APPLE)
       return "eb3869335e7a219e1b5f25c1c6037b97";
 #else
@@ -3111,10 +3093,8 @@
 
   {
     const char* md5_sum = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "4aba010a83b9d91722921fde6bf30cdc";
-      }
 #if BUILDFLAG(IS_APPLE)
       return "d20b1978da2362d3942ea0fc6d230997";
 #else
@@ -3690,19 +3670,15 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "522a4a6b6c7eab5bf95ded1f21ea372e";
-    }
 #endif
     return "12127303aecd80c6288460f7c0d79f3f";
   }();
   const char* modified_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "6844019e07b83cc01723415f58218d06";
-    }
 #endif
     return "73d06ff4c665fe85029acef30240dcca";
   }();
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index ab6b50d..4fb4cc2 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -46,20 +46,16 @@
 
 const char* BottomTextChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "81636489006a31fcb00cf29efcdf7909";
-  }
 #endif
   return "891dcb6e914c8360998055f1f47c9727";
 }
 
 const char* FirstRemovedChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "a1dc2812692fcc7ee4f01ca77435df9d";
-  }
 #endif
   return "e1477dc3b5b3b9c560814c4d1135a02b";
 }
@@ -67,10 +63,8 @@
 const wchar_t kLoadedFontText[] = L"I am testing my loaded font, WEE.";
 
 const char* LoadedFontTextChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "d58570cc045dfb818b92cbabbd1a364c";
-  }
 #if BUILDFLAG(IS_APPLE)
   return "0f3e4a7d71f9e7eb8a1a0d69403b9848";
 #else
@@ -525,10 +519,8 @@
   EXPECT_TRUE(FPDFPath_Close(blue_path));
   FPDFPage_InsertObject(page, blue_path);
   const char* last_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "ed14c60702b1489c597c7d46ece7f86d";
-    }
     return "9823e1a21bd9b72b6a442ba4f12af946";
   }();
   {
@@ -729,10 +721,8 @@
 
   const char* changed_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "b720e83476fd6819d47c533f1f43c728";
-    }
 #endif
     return "9a85b9354a69c61772ed24151c140f46";
   }();
@@ -788,10 +778,8 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "ae7a25c85e0e2dd0c5cb9dd5cd37f6df";
-    }
 #endif
     return "7af7fe5b281298261eb66ac2d22f5054";
   }();
@@ -855,10 +843,8 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "1226bc2b8072622eb28f52321876e814";
-    }
 #endif
     return "c5241eef60b9eac68ed1f2a5fd002703";
   }();
@@ -1395,10 +1381,8 @@
   ASSERT_EQ(2, FPDFPage_CountObjects(page));
   const char* hello_removed_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "5508c2f06d104050f74f655693e38c2c";
-    }
 #endif
     return "a8cd82499cf744e0862ca468c9d4ceb8";
   }();
@@ -1919,10 +1903,8 @@
   // Verify the black rectangle was added.
   ASSERT_EQ(kOriginalObjectCount + 1, FPDFPage_CountObjects(page));
   const char* plus_rectangle_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "0d3715fcfb9bd0dd25dcce60800bff47";
-    }
     return "6b9396ab570754b32b04ca629e902f77";
   }();
   {
@@ -2070,10 +2052,8 @@
   // Render and check the result.
   ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "8a48b019826492331454f2809990aba8";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "279693baca9f48da2d75a8e289aed58e";
 #else
@@ -2103,10 +2083,8 @@
   FPDFPage_InsertObject(page, red_rect);
 
   const char* original_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "1e82fbdd21490cee9d3479fe6125af67";
-    }
     return "ad04e5bd0f471a9a564fb034bd0fb073";
   }();
   ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
@@ -2135,10 +2113,8 @@
   EXPECT_TRUE(FPDFPath_SetDrawMode(green_rect2, FPDF_FILLMODE_ALTERNATE, 0));
   FPDFPage_InsertObject(saved_page, green_rect2);
   const char* last_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "8705d023e5fec3499d1e30cf2bcc5dc1";
-    }
     return "4b5b00f824620f8c9b8801ebb98e1cdd";
   }();
   {
@@ -2176,10 +2152,8 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     const char* checksum_1 = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "1469acf60e7647ebeb8e1fb08c5d6c7a";
-      }
       return "64bd31f862a89e0a9e505a5af6efd506";
     }();
     CompareBitmap(page_bitmap.get(), 612, 792, checksum_1);
@@ -2198,10 +2172,8 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     const char* checksum_2 = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "68b3194f74abd9d471695ce1415be43f";
-      }
       return "4b6f3b9d25c4e194821217d5016c3724";
     }();
     CompareBitmap(page_bitmap.get(), 612, 792, checksum_2);
@@ -2221,10 +2193,8 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     const char* checksum_3 = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "ea784068651df2b9ba132ce9215e6780";
-      }
       return "ff3e6a22326754944cc6e56609acd73b";
     }();
     CompareBitmap(page_bitmap.get(), 612, 792, checksum_3);
@@ -2269,10 +2239,8 @@
     ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
     const char* checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-      if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-          !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "983baaa1f688eff7a14b1bf91c171a1a";
-      }
 #endif
       return "161523e196eb5341604cd73e12c97922";
     }();
@@ -2295,10 +2263,8 @@
     ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
     const char* checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-      if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-          !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "e0b3493c5c16e41d0d892ffb48e63fba";
-      }
 #endif
       return "1fbf772dca8d82b960631e6683934964";
     }();
@@ -2376,10 +2342,8 @@
 
 TEST_F(FPDFEditEmbedderTest, SetTextRenderMode) {
   const char* original_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "39a4ac8f1fdc6653edd3b91862ea7b75";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "c488514ce0fc949069ff560407edacd2";
 #else
@@ -2387,10 +2351,8 @@
 #endif
   }();
   const char* stroke_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "d16eb1bb4748eeb5fb801594da70d519";
-    }
     return "e06ee84aeebe926e8c980b7822027e8a";
   }();
 
@@ -2709,19 +2671,15 @@
 TEST_F(FPDFEditEmbedderTest, ModifyFormObject) {
   const char* orig_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "a637057185f50aac1aa5490f726aef95";
-    }
 #endif
     return "34a9ec0a9581a7970e073c0bcc4ca676";
   }();
   const char* new_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "8ad9d79b02b609ff734e2a2195c96e2d";
-    }
 #endif
     return "609b5632a21c886fa93182dbc290bf7a";
   }();
@@ -3130,10 +3088,8 @@
   }
   ScopedFPDFBitmap page_bitmap2 = RenderPage(page);
   const char* insert_true_type_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "683f4a385a891494100192cb338b11f0";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "c7e2271a7f30e5b919a13ead47cea105";
 #else
@@ -3233,10 +3189,8 @@
 #endif
 TEST_F(FPDFEditEmbedderTest, MAYBE_SaveAndRender) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "0e8b079e349e34f64211c495845a3529";
-    }
     return "3c20472b0552c0c22b88ab1ed8c6202b";
   }();
   {
@@ -4277,10 +4231,8 @@
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
     const char* x10_checksum = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "bfabf04699139d05c3924526beeb4b95";
-      }
       return "149f63de758ab01d3b75605cdfd4c176";
     }();
     CompareBitmap(x10_bitmap.get(), 631, 103, x10_checksum);
@@ -4306,10 +4258,8 @@
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
     const char* x10_checksum = []() {
-      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
         return "c7eef7859332c75ab793ebae1c6e7221";
-      }
       return "f5f93bf64de579b59e775d7076ca0a5a";
     }();
     CompareBitmap(x10_bitmap.get(), 1143, 150, x10_checksum);
@@ -4342,10 +4292,8 @@
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
   ASSERT_TRUE(x10_bitmap);
   const char* x10_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "4816dd6782e9a977c58fb1ca0ced74d3";
-    }
     return "bbd3842a4b50dbfcbce4eee2b067a297";
   }();
   CompareBitmap(x10_bitmap.get(), 275, 275, x10_checksum);
@@ -4365,10 +4313,8 @@
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 7.3f));
   ASSERT_TRUE(bitmap);
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "bb3778ba739c921525de44e9ab412868";
-    }
     return "e8154fa8ededf4d9b8b35b5260897b6c";
   }();
   CompareBitmap(bitmap.get(), 120, 186, checksum);
diff --git a/fpdfsdk/fpdf_editpage_embeddertest.cpp b/fpdfsdk/fpdf_editpage_embeddertest.cpp
index 7fd4bad..df64f76 100644
--- a/fpdfsdk/fpdf_editpage_embeddertest.cpp
+++ b/fpdfsdk/fpdf_editpage_embeddertest.cpp
@@ -12,10 +12,8 @@
 
 TEST_F(FPDFEditPageEmbedderTest, Rotation) {
   const char* rotated_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "eded83f75f3d0332c584c416c571c0df";
-    }
     return "d599429574ff0dcad3bc898ea8b874ca";
   }();
 
diff --git a/fpdfsdk/fpdf_flatten_embeddertest.cpp b/fpdfsdk/fpdf_flatten_embeddertest.cpp
index 2250719..7bbb6d5 100644
--- a/fpdfsdk/fpdf_flatten_embeddertest.cpp
+++ b/fpdfsdk/fpdf_flatten_embeddertest.cpp
@@ -83,10 +83,8 @@
   }();
   const char* flattened_page_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "41debc60cf2a8f74c710ec6082d77b18";
-    }
 #endif
     return "0832157462ea70fbbf053e14b1d6457f";
   }();
@@ -109,10 +107,8 @@
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_890322) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "793689536cf64fe792c2f241888c0cf3";
-    }
     return "6c674642154408e877d88c6c082d67e9";
   }();
   ASSERT_TRUE(OpenDocument("bug_890322.pdf"));
@@ -132,10 +128,8 @@
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_896366) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "c3cccfadc4c5249e6aa0675e511fa4c3";
-    }
     return "f71ab085c52c8445ae785eca3ec858b1";
   }();
   ASSERT_TRUE(OpenDocument("bug_896366.pdf"));
diff --git a/fpdfsdk/fpdf_formfill_embeddertest.cpp b/fpdfsdk/fpdf_formfill_embeddertest.cpp
index 3cb89bd..64ca763 100644
--- a/fpdfsdk/fpdf_formfill_embeddertest.cpp
+++ b/fpdfsdk/fpdf_formfill_embeddertest.cpp
@@ -1392,10 +1392,8 @@
 // bitmaps should be different.
 TEST_F(FPDFFormFillEmbedderTest, BUG_1281) {
   const char* reverse_byte_order_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "8077970bbd10333f18186a9bb459bbe6";
-    }
     return "24fff03d1e663b7ece5f6e69ad837124";
   }();
 
@@ -1416,10 +1414,8 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455RenderOnly) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "520c4415c9977f40d6b4af5a0a94d764";
-    }
     return "bbee92af1daec2340c81f482878744d8";
   }();
   {
@@ -1439,10 +1435,8 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditFirstForm) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "29a06da3e47f67535e266b090a5ac82d";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "bf5423874f188427d2500a2bc4abebbe";
 #else
@@ -1474,10 +1468,8 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditSecondForm) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "19f8574d6378ee36e349376d88b7a2c4";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "8a0fd8772dba6e1e952e49d159cc64b5";
 #else
@@ -1509,10 +1501,8 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditBothForms) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "edbc9b0e190118a9039fffc11e494081";
-    }
 #if BUILDFLAG(IS_APPLE)
     return "1f422ee1c520ad74b1a993b64bd4dc4a";
 #else
@@ -1552,10 +1542,8 @@
 TEST_F(FPDFFormFillEmbedderTest, RemoveFormFieldHighlight) {
   const char* no_highlight_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "5c82aa43e3b478aa1e4c94bb9ef1f11f";
-    }
 #endif
     return "a6268304f7eedfa9ee98fac3caaf2efb";
   }();
diff --git a/fpdfsdk/fpdf_ppo_embeddertest.cpp b/fpdfsdk/fpdf_ppo_embeddertest.cpp
index 8c518cc..4e93f9b 100644
--- a/fpdfsdk/fpdf_ppo_embeddertest.cpp
+++ b/fpdfsdk/fpdf_ppo_embeddertest.cpp
@@ -30,8 +30,7 @@
 constexpr int kRectanglesMultiPagesPageCount = 2;
 
 const char* RectanglesMultiPagesExpectedChecksum(int page_index) {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     static constexpr const char* kChecksums[kRectanglesMultiPagesPageCount] = {
         "7a4cddd5a17a60ce50acb53e318d94f8", "4fa6a7507e9f3ef4f28719a7d656c3a5"};
     return kChecksums[page_index];
@@ -43,8 +42,7 @@
 
 const char* Bug750568PageHash(int page_index) {
   constexpr int kBug750568PageCount = 4;
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     static constexpr const char* kChecksums[kBug750568PageCount] = {
         "eaa139e944eafb43d31e8742a0e158de", "226485e9d4fa6a67dfe0a88723f12060",
         "c5601a3492ae5dcc5dd25140fc463bfe", "1f60055b54de4fac8a59c65e90da156e"};
@@ -170,10 +168,8 @@
 
 TEST_F(FPDFPPOEmbedderTest, ImportPageToXObject) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "d6ebc0a8afc22fe0137f54ce54e1a19c";
-    }
     return "2d88d180af7109eb346439f7c855bb29";
   }();
 
@@ -250,10 +246,8 @@
 
 TEST_F(FPDFPPOEmbedderTest, ImportPageToXObjectWithSameDoc) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "8e7d672f49f9ca98fb9157824cefc204";
-    }
     return "4d5ca14827b7707f8283e639b33c121a";
   }();
 
diff --git a/fpdfsdk/fpdf_progressive.cpp b/fpdfsdk/fpdf_progressive.cpp
index 9abb298..d6ae9ac 100644
--- a/fpdfsdk/fpdf_progressive.cpp
+++ b/fpdfsdk/fpdf_progressive.cpp
@@ -75,8 +75,7 @@
                                 /*need_to_restore=*/false, &pause_adapter);
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     pDevice->Flush(false);
     pBitmap->UnPreMultiply();
   }
@@ -120,8 +119,7 @@
   pContext->m_pRenderer->Continue(&pause_adapter);
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     CFX_RenderDevice* pDevice = pContext->m_pDevice.get();
     pDevice->Flush(false);
     pDevice->GetBitmap()->UnPreMultiply();
diff --git a/fpdfsdk/fpdf_transformpage_embeddertest.cpp b/fpdfsdk/fpdf_transformpage_embeddertest.cpp
index 647bfb4..f1ce6d7 100644
--- a/fpdfsdk/fpdf_transformpage_embeddertest.cpp
+++ b/fpdfsdk/fpdf_transformpage_embeddertest.cpp
@@ -18,10 +18,8 @@
 namespace {
 
 const char* ShrunkChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "78c52d6029283090036e6db6683401e2";
-  }
   return "f4136cc9209207ab60eb8381a3df2e69";
 }
 
@@ -212,10 +210,8 @@
 
 TEST_F(FPDFTransformEmbedderTest, SetCropBox) {
   const char* cropped_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "4b9d2d2246be61c583f454245fe3172f";
-    }
     return "9937883715d5144c079fb8f7e3d4f395";
   }();
   {
@@ -290,10 +286,8 @@
 
 TEST_F(FPDFTransformEmbedderTest, SetMediaBox) {
   const char* shrunk_checksum_set_media_box = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "9f28f0610a7f789c24cfd5f9bd5dc3de";
-    }
     return "eab5958f62f7ce65d7c32de98389fee1";
   }();
 
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 62b96ca..6c19b01 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -678,8 +678,7 @@
                                 /*pause=*/nullptr);
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     pDevice->Flush(true);
     pBitmap->UnPreMultiply();
   }
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index 683b023..bcc30f9 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -911,80 +911,58 @@
 
 TEST_F(FPDFViewEmbedderTest, FPDF_RenderPageBitmapWithMatrix) {
   const char* clipped_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "d2929fae285593cd1c1d446750d47d60";
-    }
     return "a84cab93c102b9b9290fba3047ba702c";
   }();
   const char* top_left_quarter_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "31d24d8c6a2bac380b2f5c393e77ecc9";
-    }
     return "f11a11137c8834389e31cf555a4a6979";
   }();
   const char* hori_stretched_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "af6eaa0d3388261693df5390138e4da1";
-    }
     return "48ef9205941ed19691ccfa00d717187e";
   }();
   const char* rotated_90_clockwise_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "b4baa001d201baed576cd6d5d0d5a160";
-    }
     return "d8da2c7bf77521550d0f2752b9cf3482";
   }();
   const char* rotated_180_clockwise_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "51819227d0863222aed366d5d7c5d9c8";
-    }
     return "0113386bb0bd45125bacc6dee78bfe78";
   }();
   const char* rotated_270_clockwise_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "f2b046e46c2751cebc777a9725ae2f3e";
-    }
     return "a287e0f74ce203699cda89f9cc97a240";
   }();
   const char* mirror_hori_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "c7fbec322b4fc6bcf46ec1eb89661c41";
-    }
     return "6e8d7a6fde39d8e720fb9e620102918c";
   }();
   const char* mirror_vert_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "a8b00bc40677a73c15a08b9769d1b576";
-    }
     return "8f3a555ef9c0d5031831ae3715273707";
   }();
   const char* larger_top_left_quarter_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "35deb5ed4b73675ce33f68328a33c687";
-    }
     return "172a2f4adafbadbe98017b1c025b9e27";
   }();
   const char* larger_rotated_diagonal_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "1dbf599403c235926d3ddcbc0ea10ee8";
-    }
     return "3d62417468bdaff0eb14391a0c30a3b1";
   }();
   const char* tile_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "387be3a84774f39aaa955314d2fe7106";
-    }
     return "0a190003c97220bf8877684c8d7e89cf";
   }();
   const char kLargerChecksum[] = "c806145641c3e6fc4e022c7065343749";
@@ -1396,10 +1374,8 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "0e339d606aafb63077f49e238dc27cb0";
-    }
 #endif
     return "288502887ffc63291f35a0573b944375";
   }();
@@ -1446,17 +1422,13 @@
 
 TEST_F(FPDFViewEmbedderTest, RenderManyRectanglesWithFlags) {
   const char* grayscale_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "b596ac8bbe64e7bff31888ab05e4dcf4";
-    }
     return "7b553f1052069a9c61237a05db0955d6";
   }();
   const char* no_smoothpath_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "4d71ed53d9f6e6a761876ebb4ff23e19";
-    }
     return "ff6e5c509d1f6984bcdfd18b26a4203a";
   }();
 
@@ -1491,17 +1463,14 @@
   ASSERT_TRUE(page);
 
   const char* gray_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "3dfe1fc3889123d68e1748fefac65e72";
-    }
     return "b561c11edc44dc3972125a9b8744fa2f";
   }();
 
   // TODO(crbug.com/pdfium/1489): Add a test for FPDFBitmap_BGR in
   // Skia/SkiaPaths modes once Skia provides support for BGR24 format.
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
     static const char kBgrChecksum[] = "ab6312e04c0d3f4e46fb302a45173d05";
 
     static constexpr int kBgrStride = 600;  // Width of 200 * 24 bits per pixel.
@@ -1573,10 +1542,8 @@
   }();
   const char* no_smoothtext_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
       return "6eef7237f7591f07616e238422086737";
-    }
 #endif
     return "37d0b34e1762fdda4c05ce7ea357b828";
   }();
diff --git a/testing/embedder_test_constants.cpp b/testing/embedder_test_constants.cpp
index d42781f..083c9ed 100644
--- a/testing/embedder_test_constants.cpp
+++ b/testing/embedder_test_constants.cpp
@@ -10,10 +10,8 @@
 namespace pdfium {
 
 const char* AnnotationStampWithApChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "a31381406d0b95049e418720750b78dd";
-  }
 #if BUILDFLAG(IS_APPLE)
   return "d243b5d64752be0f45b86df7bd2e2708";
 #else
@@ -24,54 +22,42 @@
 const char kBlankPage612By792Checksum[] = "1940568c9ba33bac5d0b1ee9558c76b3";
 
 const char* Bug890322Checksum() {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "793689536cf64fe792c2f241888c0cf3";
-  }
   return "6c674642154408e877d88c6c082d67e9";
 }
 
 const char* HelloWorldChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "6eef7237f7591f07616e238422086737";
-  }
 #endif
   return "c1c548442e0e0f949c5550d89bf8ae3b";
 }
 
 const char* HelloWorldRemovedChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
-      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "6e1cae48a2e35c521dee4ca502f48af6";
-  }
 #endif
   return "4a9b80f675f7f3bf2da1b02f12449e4b";
 }
 
 const char* ManyRectanglesChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "4e7e280c1597222afcb0ee3bb90ec119";
-  }
   return "b0170c575b65ecb93ebafada0ff0f038";
 }
 
 const char* RectanglesChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "b4e411a6b5ffa59a50efede2efece597";
-  }
   return "0a90de37f52127619c3dfb642b5fa2fe";
 }
 
 const char* TextFormChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     return "e6d2eb75f18d773f0dad938b1bb22e23";
-  }
 #if BUILDFLAG(IS_APPLE)
   return "fa2bf756942a950101fc147fc4ef3f82";
 #else
diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index 5b46a94..75376dc 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -123,10 +123,8 @@
                                   -fFontSize, matrix, color, kOptions);
   }
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
-      CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
     device->Flush(false);
-  }
 #endif
 
   return bRet;
