diff --git a/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp b/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
index b33a17b..f2c5ac1 100644
--- a/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
@@ -139,10 +139,10 @@
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "df9fe67555b7ceb59c99036e8d2c1c76";
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "2a308e8cc20a6221112c387d122075a8";
-#endif
+    return "2a308e8cc20a6221112c387d122075a8";
+#else
     return "9fe7eef8e51d15a604001854be6ed1ee";
+#endif  // BUILDFLAG(IS_APPLE)
   }();
   {
     ASSERT_TRUE(OpenDocumentWithOptions("encrypted.pdf", "5678",
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 2f20b29..6f9e49e 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -127,7 +127,7 @@
 #if BUILDFLAG(IS_APPLE)
   return FXDIB_Format::kRgb32;
 #else
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return FXDIB_Format::kRgb32;
   return FXDIB_Format::kRgb;
 #endif
@@ -173,7 +173,7 @@
   ScopedSkiaDeviceFlush& operator=(const ScopedSkiaDeviceFlush&) = delete;
 
   ~ScopedSkiaDeviceFlush() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
       m_pDevice->Flush(/*release=*/false);
     }
   }
@@ -716,7 +716,7 @@
   bitmap_render.Initialize(nullptr, nullptr);
   bitmap_render.ProcessObjectNoClip(pPageObj, new_matrix);
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     bitmap_device.Flush(true);
     bitmap->UnPreMultiply();
   }
diff --git a/core/fpdfapi/render/cpdf_rendertiling.cpp b/core/fpdfapi/render/cpdf_rendertiling.cpp
index 8a48e24..24dbabb 100644
--- a/core/fpdfapi/render/cpdf_rendertiling.cpp
+++ b/core/fpdfapi/render/cpdf_rendertiling.cpp
@@ -58,12 +58,6 @@
   CPDF_RenderContext context(pDoc, nullptr, pCache);
   context.AppendLayer(pPatternForm, mtPattern2Bitmap);
   context.Render(&bitmap_device, nullptr, &options, nullptr);
-#if defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
-    bitmap_device.Flush(true);
-    pBitmap->UnPreMultiply();
-  }
-#endif
   return pBitmap;
 }
 
diff --git a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
index ec8b5e6..cda7d91 100644
--- a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
+++ b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
@@ -25,7 +25,7 @@
 
 const char* AnnotationStampWithApBaseContentChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "243f3d6267d9db09198fed9f8c4957fd";
 #endif
   return "e31414933c9ff3950773981e5bf61678";
@@ -315,10 +315,10 @@
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "5ece6059efdc2ecb2894fa3cf329dc94";
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "ee4ec12f54ce8d117a73bd9b85a8954d";
-#endif
+    return "ee4ec12f54ce8d117a73bd9b85a8954d";
+#else
     return "704db63ed2bf77254ecaa8035b85f21a";
+#endif  // BUILDFLAG(IS_APPLE)
   }();
 
   ASSERT_TRUE(OpenDocument("hello_world.pdf"));
@@ -331,7 +331,7 @@
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderPathWithColorScheme) {
   // Test rendering of paths with forced color scheme on.
   const char* rectangles_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "4b0f850a94698d07b6cd2814d1b4ccb7";
     return "249f59b0d066c4f6bd89782a80822219";
   }();
@@ -348,7 +348,7 @@
   // 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::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "c1cbbd2ce6921f608a3c55140592419b";
     return "0ebcc11e617635eca1fa9ce475383a80";
   }();
@@ -370,8 +370,6 @@
   const char* content_with_highlight_fill_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "9b6273fdbc9db780c49f7540756209f8";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "1ad601278736432e2f82ea37ab6a28ba";
 #if BUILDFLAG(IS_APPLE)
     return "a820afec9b99d3d3f2e9e9382bbad7c1";
 #else
@@ -399,8 +397,6 @@
   const char* md5_content_with_highlight = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "772246195d18f75d40a22bee913c098f";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "eff6eef2409ef5fbf4612bf6af42e0a0";
 #if BUILDFLAG(IS_APPLE)
     return "8837bea0b3520164b1784e513c882a2d";
 #else
@@ -419,7 +415,7 @@
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderInkWithColorScheme) {
   // Test rendering of multiple ink with forced color scheme on.
   const char* content_with_ink_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "ebc57721e4c8da34156e09b9b2e62fb0";
     return "797bce7dc6c50ee86b095405df9fe5aa";
   }();
@@ -434,7 +430,7 @@
 TEST_F(FPDFProgressiveRenderEmbedderTest, RenderStampWithColorScheme) {
   // Test rendering of static annotation with forced color scheme on.
   const char* content_with_stamp_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "a791fdb4f595bb6c4187cc2aeed5e9e8";
 #if BUILDFLAG(IS_APPLE)
     return "7a209e29caeeab7d2b25b34570a4ace6";
@@ -453,7 +449,7 @@
 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::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "9f75d98afc6d6313bd87e6562ea6df15";
     return "080f7a4381606659301440e1b14dca35";
   }();
diff --git a/core/fxge/cfx_defaultrenderdevice.cpp b/core/fxge/cfx_defaultrenderdevice.cpp
index eaa8ef0..1a344c3 100644
--- a/core/fxge/cfx_defaultrenderdevice.cpp
+++ b/core/fxge/cfx_defaultrenderdevice.cpp
@@ -28,20 +28,6 @@
 #endif
 }
 
-// static
-bool CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer() {
-#if defined(_SKIA_SUPPORT_PATHS_)
-  return true;
-#else
-  return false;
-#endif
-}
-
-// static
-bool CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer() {
-  return SkiaIsDefaultRenderer() || SkiaPathsIsDefaultRenderer();
-}
-
 #if defined(_SKIA_SUPPORT_)
 // static
 void CFX_DefaultRenderDevice::SetDefaultRenderer(RendererType renderer_type) {
@@ -53,7 +39,7 @@
 
 CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() {
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (SkiaVariantIsDefaultRenderer())
+  if (SkiaIsDefaultRenderer())
     Flush(true);
 #endif
 }
@@ -82,7 +68,7 @@
     RetainPtr<CFX_DIBitmap> pBackdropBitmap,
     bool bGroupKnockout) {
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (SkiaVariantIsDefaultRenderer()) {
+  if (SkiaIsDefaultRenderer()) {
     return AttachSkiaImpl(pBitmap, bRgbByteOrder, pBackdropBitmap,
                           bGroupKnockout);
   }
@@ -95,7 +81,7 @@
                                      FXDIB_Format format,
                                      RetainPtr<CFX_DIBitmap> pBackdropBitmap) {
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (SkiaVariantIsDefaultRenderer())
+  if (SkiaIsDefaultRenderer())
     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 0dcd4c2..8d93b89 100644
--- a/core/fxge/cfx_defaultrenderdevice.h
+++ b/core/fxge/cfx_defaultrenderdevice.h
@@ -49,13 +49,6 @@
   // Runtime check to see if Skia is the renderer variant in use.
   static bool SkiaIsDefaultRenderer();
 
-  // 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 4c783fb..36df2db 100644
--- a/core/fxge/cfx_glyphcache.cpp
+++ b/core/fxge/cfx_glyphcache.cpp
@@ -263,9 +263,8 @@
   ByteString FaceGlyphsKey(keygen.key_, keygen.key_len_);
 
 #if BUILDFLAG(IS_APPLE)
-  const bool bDoLookUp =
-      !text_options->native_text ||
-      CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer();
+  const bool bDoLookUp = !text_options->native_text ||
+                         CFX_DefaultRenderDevice::SkiaIsDefaultRenderer();
 #else
   const bool bDoLookUp = true;
 #endif
@@ -275,7 +274,7 @@
   }
 
 #if BUILDFLAG(IS_APPLE)
-  DCHECK(!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer());
+  DCHECK(!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer());
 
   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 8ac489c..17f872c 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -478,8 +478,6 @@
     return FXDIB_Format::k8bppMask;
   if (render_caps & FXRC_ALPHA_OUTPUT)
     return FXDIB_Format::kArgb;
-  if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-    return FXDIB_Format::kRgb32;
   return CFX_DIBBase::kPlatformRGBFormat;
 }
 
@@ -490,7 +488,7 @@
 CFX_RenderDevice::~CFX_RenderDevice() {
   RestoreState(false);
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     Flush(true);
 #endif
 }
@@ -805,7 +803,7 @@
     return false;
   }
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     bitmap_device.GetDeviceDriver()->Flush();
 #endif
   FX_RECT src_rect(0, 0, rect.Width(), rect.Height());
@@ -1052,7 +1050,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::SkiaVariantIsDefaultRenderer()) {
+        if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
           // 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
@@ -1218,7 +1216,7 @@
   }
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATH_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     // 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 b84f222..8258db2 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -145,13 +145,13 @@
 }  // namespace
 
 TEST(fxge, SkiaStateEmpty) {
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return;
   Harness(&EmptyTest, {});
 }
 
 TEST(fxge, SkiaStatePath) {
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return;
   Harness(&CommonTest, {State::Change::kNo, State::Save::kYes,
                         State::Clip::kSame, State::Graphic::kPath, 0xFF112233});
@@ -179,7 +179,7 @@
 }
 
 TEST(fxge, SkiaStateOOSClip) {
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return;
   Harness(&OutOfSequenceClipTest, {});
 }
diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp
index 799233f..f6c2d05 100644
--- a/fpdfsdk/fpdf_annot_embeddertest.cpp
+++ b/fpdfsdk/fpdf_annot_embeddertest.cpp
@@ -405,7 +405,7 @@
 
 TEST_F(FPDFAnnotEmbedderTest, RenderMultilineMarkupAnnotWithoutAP) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "ec1f4ccbd0aecfdea6d53893387a0101";
     return "76512832d88017668d9acc7aacd13dae";
   }();
@@ -549,8 +549,6 @@
     const char* expected_hash = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "fad91b9c968fe8019a774f5e2419b8fc";
-      if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-        return "acddfe688a117ead56af7b249a2cf8a1";
       return "354002e1c4386d38fdde29ef8d61074a";
     }();
     ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT);
@@ -772,8 +770,6 @@
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "899387ae792390cd0d83cf7e2bbebfb5";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "e40e235ee35f47ff28dda009aaaf36df";
     return "dba153419f67b7c0c0e3d22d3e8910d5";
   }();
 
@@ -892,8 +888,6 @@
   const char* md5_original = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "0dd4c099b93d24eed9926a948ac5101c";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "127c2d3b4452555e3317827b0dbbb6a0";
 #if BUILDFLAG(IS_APPLE)
     return "fc59468d154f397fd298c69f47ef565a";
 #else
@@ -903,8 +897,6 @@
   const char* md5_modified_highlight = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "92dfe7960d248635a694f43c66db7a4d";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "6ffe732be6f80540b60921c4803b590a";
 #if BUILDFLAG(IS_APPLE)
     return "e64bf648f6e9354d1f3eedb47a2c9498";
 #else
@@ -914,8 +906,6 @@
   const char* md5_modified_square = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "eb16eae7904705fa24f4ec9c1acf90c7";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "9ecbeea7f54abea298b53ce79d301f4a";
 #if BUILDFLAG(IS_APPLE)
     return "a66591662c8e7ad3c6059952e234bebf";
 #else
@@ -1115,7 +1105,7 @@
 
 TEST_F(FPDFAnnotEmbedderTest, AddAndModifyPath) {
   const char* md5_modified_path = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "f671765166acf45d80e833ea3aff8b90";
 #if BUILDFLAG(IS_APPLE)
     return "e31421f86c61d4e9cda138f15f561ca3";
@@ -1124,7 +1114,7 @@
 #endif
   }();
   const char* md5_two_paths = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "7d2db46e1ae6bcf88d18d334af309551";
 #if BUILDFLAG(IS_APPLE)
     return "58d932492f9d485d6a4bc0ba76c04557";
@@ -1133,7 +1123,7 @@
 #endif
   }();
   const char* md5_new_annot = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "92bfb06058ff608571a3baf65f7fc05d";
 #if BUILDFLAG(IS_APPLE)
     return "61f9ad13f2fd235753db198cf9704773";
@@ -1342,8 +1332,6 @@
   const char* md5_new_image = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "4ba31e174d873b3fda1d7a160d4a0e85";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "bf158b64c0373f3f36e347ae83e55cde";
 #if BUILDFLAG(IS_APPLE)
     return "c6fcbceb2f079bef10458ac60db3a10c";
 #else
@@ -1351,7 +1339,7 @@
 #endif
   }();
   const char* md5_modified_image = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "5806fadc1a192bc4bb07511a0711c957";
 #if BUILDFLAG(IS_APPLE)
     return "8068eb568e5c1c5fbe84e98f7a980ac3";
@@ -1435,8 +1423,6 @@
   const char* md5_new_text = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "63b931799a9ba21c36d9d4f9711f252b";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "e2a563fe60b263342347b84199649899";
 #if BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_ARM64)
     return "0c3448974a4e8da2395da917935e5de1";
 #elif BUILDFLAG(IS_APPLE) && !defined(ARCH_CPU_ARM64)
@@ -1448,8 +1434,6 @@
   const char* md5_modified_text = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "e29ddba6a49d5c9c5cdde7d1693a251c";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "6052d53a7de28382e305d22edfb93873";
 #if BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_ARM64)
     return "9cf1c024a9d2d356bcdd14cb71a32324";
 #elif BUILDFLAG(IS_APPLE) && !defined(ARCH_CPU_ARM64)
@@ -1586,7 +1570,7 @@
   UnloadPage(page);
 
   const char* md5 = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "2b9078043cd6130fef4e8542dcda943e";
 #if BUILDFLAG(IS_APPLE)
     return "cd90315b250dfe08265ce0ac335c5f76";
@@ -2126,7 +2110,7 @@
 
 TEST_F(FPDFAnnotEmbedderTest, BUG_1206) {
   const char* expected_bitmap = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "a1ea1ceebb26922fae576cb79ce63af0";
     return "0d9fc05c6762fd788bd23fd87a4967bc";
   }();
@@ -3050,7 +3034,7 @@
 
   {
     const char* md5_sum = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "7b08d6e8c0423302755c110e17abf7de";
 #if BUILDFLAG(IS_APPLE)
       return "108a46c517c4eaace9982ee83e8e3296";
@@ -3078,7 +3062,7 @@
 
   {
     const char* md5_sum = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "371171ea3f000db6354b24a702b0312b";
 #if BUILDFLAG(IS_APPLE)
       return "eb3869335e7a219e1b5f25c1c6037b97";
@@ -3097,7 +3081,7 @@
 
   {
     const char* md5_sum = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "4aba010a83b9d91722921fde6bf30cdc";
 #if BUILDFLAG(IS_APPLE)
       return "d20b1978da2362d3942ea0fc6d230997";
@@ -3674,14 +3658,14 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "522a4a6b6c7eab5bf95ded1f21ea372e";
 #endif
     return "12127303aecd80c6288460f7c0d79f3f";
   }();
   const char* modified_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "6844019e07b83cc01723415f58218d06";
 #endif
     return "73d06ff4c665fe85029acef30240dcca";
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index a7e261f..faec604 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -46,7 +46,7 @@
 
 const char* BottomTextChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "81636489006a31fcb00cf29efcdf7909";
 #endif
   return "891dcb6e914c8360998055f1f47c9727";
@@ -54,7 +54,7 @@
 
 const char* FirstRemovedChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "a1dc2812692fcc7ee4f01ca77435df9d";
 #endif
   return "e1477dc3b5b3b9c560814c4d1135a02b";
@@ -63,7 +63,7 @@
 const wchar_t kLoadedFontText[] = L"I am testing my loaded font, WEE.";
 
 const char* LoadedFontTextChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "d58570cc045dfb818b92cbabbd1a364c";
 #if BUILDFLAG(IS_APPLE)
   return "0f3e4a7d71f9e7eb8a1a0d69403b9848";
@@ -518,7 +518,7 @@
   EXPECT_TRUE(FPDFPath_Close(blue_path));
   FPDFPage_InsertObject(page, blue_path);
   const char* last_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "ed14c60702b1489c597c7d46ece7f86d";
     return "9823e1a21bd9b72b6a442ba4f12af946";
   }();
@@ -720,7 +720,7 @@
 
   const char* changed_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "b720e83476fd6819d47c533f1f43c728";
 #endif
     return "9a85b9354a69c61772ed24151c140f46";
@@ -777,7 +777,7 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "ae7a25c85e0e2dd0c5cb9dd5cd37f6df";
 #endif
     return "7af7fe5b281298261eb66ac2d22f5054";
@@ -842,7 +842,7 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "1226bc2b8072622eb28f52321876e814";
 #endif
     return "c5241eef60b9eac68ed1f2a5fd002703";
@@ -1045,15 +1045,14 @@
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "34ac4e0f3ba510760be09d0e19c1b43e";
 #if BUILDFLAG(IS_APPLE)
-      if (!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
-#if defined(ARCH_CPU_ARM64)
-        return "cdc8e22cf1e7e06999dc456288672a3b";
+#ifdef ARCH_CPU_ARM64
+      return "cdc8e22cf1e7e06999dc456288672a3b";
 #else
-        return "966579fb98206858ce2f0a1f94a74d05";
-#endif
-      }
-#endif
+      return "966579fb98206858ce2f0a1f94a74d05";
+#endif  // ARCH_CPU_ARM64
+#else
       return "3d5a3de53d5866044c2b6bf339742c97";
+#endif  // BUILDFLAG(IS_APPLE)
     }();
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     CompareBitmap(page_bitmap.get(), 200, 200, original_checksum);
@@ -1096,29 +1095,27 @@
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "c671fa07b63e85c4201b9926e880fda8";
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
-#if defined(ARCH_CPU_ARM64)
-      return "23c4aec321547f51591fe7363a9ea2d6";
+#ifdef ARCH_CPU_ARM64
+    return "23c4aec321547f51591fe7363a9ea2d6";
 #else
-      return "6e19a4dd674b522cd39cf41956559bd6";
-#endif  // defined(ARCH_CPU_ARM64)
-    }
-#endif  // BUILDFLAG(IS_APPLE)
+    return "6e19a4dd674b522cd39cf41956559bd6";
+#endif  // ARCH_CPU_ARM64
+#else
     return "bc8623c052f12376c3d8dd09a6cd27df";
+#endif  // BUILDFLAG(IS_APPLE)
   }();
   const char* non_primes_after_save_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "c671fa07b63e85c4201b9926e880fda8";
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
-#if defined(ARCH_CPU_ARM64)
-      return "6bb1ea0d0a512f29edabda33064a0725";
+#ifdef ARCH_CPU_ARM64
+    return "6bb1ea0d0a512f29edabda33064a0725";
 #else
-      return "3cb35c681f8fb5a43a49146ac7caa818";
-#endif  // defined(ARCH_CPU_ARM64)
-    }
-#endif  // BUILDFLAG(IS_APPLE)
+    return "3cb35c681f8fb5a43a49146ac7caa818";
+#endif  // ARCH_CPU_ARM64
+#else
     return "bc8623c052f12376c3d8dd09a6cd27df";
+#endif  // BUILDFLAG(IS_APPLE)
   }();
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
@@ -1395,7 +1392,7 @@
   ASSERT_EQ(2, FPDFPage_CountObjects(page));
   const char* hello_removed_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "5508c2f06d104050f74f655693e38c2c";
 #endif
     return "a8cd82499cf744e0862ca468c9d4ceb8";
@@ -1555,15 +1552,14 @@
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "b9bb0acfdba4bb5d2e578e7b73341baf";
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
-#if defined(ARCH_CPU_ARM64)
-      return "08505db7b598f7397a2260ecb1f6d86d";
+#if ARCH_CPU_ARM64
+    return "08505db7b598f7397a2260ecb1f6d86d";
 #else
-      return "3cdc75af44c15bed80998facd6e674c9";
-#endif  // defined(ARCH_CPU_ARM64)
-    }
-#endif  // BUILDFLAG(IS_APPLE)
+    return "3cdc75af44c15bed80998facd6e674c9";
+#endif  // ARCH_CPU_ARM64
+#else
     return "b474826df1acedb05c7b82e1e49e64a6";
+#endif  // BUILDFLAG(IS_APPLE)
   }();
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
@@ -1922,7 +1918,7 @@
   // Verify the black rectangle was added.
   ASSERT_EQ(kOriginalObjectCount + 1, FPDFPage_CountObjects(page));
   const char* plus_rectangle_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "0d3715fcfb9bd0dd25dcce60800bff47";
     return "6b9396ab570754b32b04ca629e902f77";
   }();
@@ -2071,7 +2067,7 @@
   // Render and check the result.
   ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "8a48b019826492331454f2809990aba8";
 #if BUILDFLAG(IS_APPLE)
     return "279693baca9f48da2d75a8e289aed58e";
@@ -2102,7 +2098,7 @@
   FPDFPage_InsertObject(page, red_rect);
 
   const char* original_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "1e82fbdd21490cee9d3479fe6125af67";
     return "ad04e5bd0f471a9a564fb034bd0fb073";
   }();
@@ -2132,7 +2128,7 @@
   EXPECT_TRUE(FPDFPath_SetDrawMode(green_rect2, FPDF_FILLMODE_ALTERNATE, 0));
   FPDFPage_InsertObject(saved_page, green_rect2);
   const char* last_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "8705d023e5fec3499d1e30cf2bcc5dc1";
     return "4b5b00f824620f8c9b8801ebb98e1cdd";
   }();
@@ -2171,7 +2167,7 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     const char* checksum_1 = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "1469acf60e7647ebeb8e1fb08c5d6c7a";
       return "64bd31f862a89e0a9e505a5af6efd506";
     }();
@@ -2191,7 +2187,7 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     const char* checksum_2 = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "68b3194f74abd9d471695ce1415be43f";
       return "4b6f3b9d25c4e194821217d5016c3724";
     }();
@@ -2212,7 +2208,7 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
     const char* checksum_3 = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "ea784068651df2b9ba132ce9215e6780";
       return "ff3e6a22326754944cc6e56609acd73b";
     }();
@@ -2258,7 +2254,7 @@
     ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
     const char* checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-      if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "983baaa1f688eff7a14b1bf91c171a1a";
 #endif
       return "161523e196eb5341604cd73e12c97922";
@@ -2282,7 +2278,7 @@
     ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
     const char* checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-      if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "e0b3493c5c16e41d0d892ffb48e63fba";
 #endif
       return "1fbf772dca8d82b960631e6683934964";
@@ -2361,7 +2357,7 @@
 
 TEST_F(FPDFEditEmbedderTest, SetTextRenderMode) {
   const char* original_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "39a4ac8f1fdc6653edd3b91862ea7b75";
 #if BUILDFLAG(IS_APPLE)
     return "c488514ce0fc949069ff560407edacd2";
@@ -2370,7 +2366,7 @@
 #endif
   }();
   const char* stroke_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "d16eb1bb4748eeb5fb801594da70d519";
     return "e06ee84aeebe926e8c980b7822027e8a";
   }();
@@ -2690,14 +2686,14 @@
 TEST_F(FPDFEditEmbedderTest, ModifyFormObject) {
   const char* orig_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "a637057185f50aac1aa5490f726aef95";
 #endif
     return "34a9ec0a9581a7970e073c0bcc4ca676";
   }();
   const char* new_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "8ad9d79b02b609ff734e2a2195c96e2d";
 #endif
     return "609b5632a21c886fa93182dbc290bf7a";
@@ -3107,7 +3103,7 @@
   }
   ScopedFPDFBitmap page_bitmap2 = RenderPage(page);
   const char* insert_true_type_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "683f4a385a891494100192cb338b11f0";
 #if BUILDFLAG(IS_APPLE)
     return "c7e2271a7f30e5b919a13ead47cea105";
@@ -3204,8 +3200,6 @@
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "9a78649e85e69d220c22e0fc316da740";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "0e8b079e349e34f64211c495845a3529";
     return "3c20472b0552c0c22b88ab1ed8c6202b";
   }();
   {
@@ -4248,7 +4242,7 @@
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
     const char* x10_checksum = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "bfabf04699139d05c3924526beeb4b95";
       return "149f63de758ab01d3b75605cdfd4c176";
     }();
@@ -4275,7 +4269,7 @@
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
     const char* x10_checksum = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "c7eef7859332c75ab793ebae1c6e7221";
       return "f5f93bf64de579b59e775d7076ca0a5a";
     }();
@@ -4309,7 +4303,7 @@
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
   ASSERT_TRUE(x10_bitmap);
   const char* x10_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "4816dd6782e9a977c58fb1ca0ced74d3";
     return "bbd3842a4b50dbfcbce4eee2b067a297";
   }();
@@ -4330,7 +4324,7 @@
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 7.3f));
   ASSERT_TRUE(bitmap);
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "bb3778ba739c921525de44e9ab412868";
     return "e8154fa8ededf4d9b8b35b5260897b6c";
   }();
diff --git a/fpdfsdk/fpdf_editpage_embeddertest.cpp b/fpdfsdk/fpdf_editpage_embeddertest.cpp
index fd92b4f..c74d6dc 100644
--- a/fpdfsdk/fpdf_editpage_embeddertest.cpp
+++ b/fpdfsdk/fpdf_editpage_embeddertest.cpp
@@ -12,7 +12,7 @@
 
 TEST_F(FPDFEditPageEmbedderTest, Rotation) {
   const char* rotated_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "eded83f75f3d0332c584c416c571c0df";
     return "d599429574ff0dcad3bc898ea8b874ca";
   }();
diff --git a/fpdfsdk/fpdf_flatten_embeddertest.cpp b/fpdfsdk/fpdf_flatten_embeddertest.cpp
index d665e0b..235ab88 100644
--- a/fpdfsdk/fpdf_flatten_embeddertest.cpp
+++ b/fpdfsdk/fpdf_flatten_embeddertest.cpp
@@ -43,8 +43,6 @@
   const char* checkbox_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "252fd5f2299cc16e5a07565df7c30565";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "280080feef8787b55ccf5cc828596327";
 #if BUILDFLAG(IS_APPLE)
     return "6aafcb2d98da222964bcdbf5aa1f4f1f";
 #else
@@ -73,8 +71,6 @@
   const char* page_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "73678f308625e22f31940e9f732b68bf";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "c82ca7521b802024d7120b23876dd6dd";
 #if BUILDFLAG(IS_APPLE)
     return "049ed3f1e21fc72f929af3410c64bc8f";
 #else
@@ -83,7 +79,7 @@
   }();
   const char* flattened_page_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "41debc60cf2a8f74c710ec6082d77b18";
 #endif
     return "0832157462ea70fbbf053e14b1d6457f";
@@ -107,7 +103,7 @@
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_890322) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "793689536cf64fe792c2f241888c0cf3";
     return "6c674642154408e877d88c6c082d67e9";
   }();
@@ -128,7 +124,7 @@
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_896366) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "c3cccfadc4c5249e6aa0675e511fa4c3";
     return "f71ab085c52c8445ae785eca3ec858b1";
   }();
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index fc13e3c..56c1326 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -218,13 +218,6 @@
     if (pPageView)
       pPageView->PageView_OnDraw(pDevice.get(), matrix, &options, rect);
   }
-
-#if defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
-    pDevice->Flush(true);
-    holder->UnPreMultiply();
-  }
-#endif
 }
 
 // Returns true if formfill version is correctly set. See |version| in
diff --git a/fpdfsdk/fpdf_formfill_embeddertest.cpp b/fpdfsdk/fpdf_formfill_embeddertest.cpp
index 9dd38af..6b63f4e 100644
--- a/fpdfsdk/fpdf_formfill_embeddertest.cpp
+++ b/fpdfsdk/fpdf_formfill_embeddertest.cpp
@@ -1322,8 +1322,6 @@
   const char* focused_text_form_with_abc_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "07a179a9dfb8f5462746262984109a99";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "2866312fb36e9afdc0a99d547027d484";
 #if BUILDFLAG(IS_APPLE)
     return "9fb14198d75ca0a107060c60ca21b0c7";
 #else
@@ -1333,8 +1331,6 @@
   const char* unfocused_text_form_with_abc_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "a21b74cc620db8a9891ebd69e1aeda98";
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "03216cae48813f71f81f53b49e3a8aaa";
 #if BUILDFLAG(IS_APPLE)
     return "3c3209357e0c057a0620afa7d83eb784";
 #else
@@ -1392,7 +1388,7 @@
 // bitmaps should be different.
 TEST_F(FPDFFormFillEmbedderTest, BUG_1281) {
   const char* reverse_byte_order_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "8077970bbd10333f18186a9bb459bbe6";
     return "24fff03d1e663b7ece5f6e69ad837124";
   }();
@@ -1414,7 +1410,7 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455RenderOnly) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "520c4415c9977f40d6b4af5a0a94d764";
     return "bbee92af1daec2340c81f482878744d8";
   }();
@@ -1435,7 +1431,7 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditFirstForm) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "29a06da3e47f67535e266b090a5ac82d";
 #if BUILDFLAG(IS_APPLE)
     return "bf5423874f188427d2500a2bc4abebbe";
@@ -1468,7 +1464,7 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditSecondForm) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "19f8574d6378ee36e349376d88b7a2c4";
 #if BUILDFLAG(IS_APPLE)
     return "8a0fd8772dba6e1e952e49d159cc64b5";
@@ -1501,7 +1497,7 @@
 
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditBothForms) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "edbc9b0e190118a9039fffc11e494081";
 #if BUILDFLAG(IS_APPLE)
     return "1f422ee1c520ad74b1a993b64bd4dc4a";
@@ -1542,7 +1538,7 @@
 TEST_F(FPDFFormFillEmbedderTest, RemoveFormFieldHighlight) {
   const char* no_highlight_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "5c82aa43e3b478aa1e4c94bb9ef1f11f";
 #endif
     return "a6268304f7eedfa9ee98fac3caaf2efb";
diff --git a/fpdfsdk/fpdf_ppo_embeddertest.cpp b/fpdfsdk/fpdf_ppo_embeddertest.cpp
index f3d8231..5b5beb0 100644
--- a/fpdfsdk/fpdf_ppo_embeddertest.cpp
+++ b/fpdfsdk/fpdf_ppo_embeddertest.cpp
@@ -31,7 +31,7 @@
 constexpr int kRectanglesMultiPagesPageCount = 2;
 
 const char* RectanglesMultiPagesExpectedChecksum(int page_index) {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     static constexpr const char* kChecksums[kRectanglesMultiPagesPageCount] = {
         "7a4cddd5a17a60ce50acb53e318d94f8", "4fa6a7507e9f3ef4f28719a7d656c3a5"};
     return kChecksums[page_index];
@@ -43,7 +43,7 @@
 
 const char* Bug750568PageHash(int page_index) {
   constexpr int kBug750568PageCount = 4;
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     static constexpr const char* kChecksums[kBug750568PageCount] = {
         "eaa139e944eafb43d31e8742a0e158de", "226485e9d4fa6a67dfe0a88723f12060",
         "c5601a3492ae5dcc5dd25140fc463bfe", "1f60055b54de4fac8a59c65e90da156e"};
@@ -169,7 +169,7 @@
 
 TEST_F(FPDFPPOEmbedderTest, ImportPageToXObject) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "d6ebc0a8afc22fe0137f54ce54e1a19c";
     return "2d88d180af7109eb346439f7c855bb29";
   }();
@@ -269,7 +269,7 @@
 
 TEST_F(FPDFPPOEmbedderTest, ImportPageToXObjectWithSameDoc) {
   const char* checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "8e7d672f49f9ca98fb9157824cefc204";
     return "4d5ca14827b7707f8283e639b33c121a";
   }();
diff --git a/fpdfsdk/fpdf_progressive.cpp b/fpdfsdk/fpdf_progressive.cpp
index b8c07e6..7657992 100644
--- a/fpdfsdk/fpdf_progressive.cpp
+++ b/fpdfsdk/fpdf_progressive.cpp
@@ -18,10 +18,6 @@
 #include "fpdfsdk/cpdfsdk_renderpage.h"
 #include "public/fpdfview.h"
 
-#if defined(_SKIA_SUPPORT_PATHS_)
-#include "core/fxge/cfx_renderdevice.h"
-#endif
-
 // These checks are here because core/ and public/ cannot depend on each other.
 static_assert(CPDF_ProgressiveRenderer::kReady == FPDF_RENDER_READY,
               "CPDF_ProgressiveRenderer::kReady value mismatch");
@@ -75,7 +71,7 @@
                                 /*need_to_restore=*/false, &pause_adapter);
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     pDevice->Flush(false);
     pBitmap->UnPreMultiply();
   }
@@ -119,7 +115,7 @@
   pContext->m_pRenderer->Continue(&pause_adapter);
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     CFX_RenderDevice* pDevice = pContext->m_pDevice.get();
     pDevice->Flush(false);
     pDevice->GetBitmap()->UnPreMultiply();
@@ -130,18 +126,6 @@
 
 FPDF_EXPORT void FPDF_CALLCONV FPDF_RenderPage_Close(FPDF_PAGE page) {
   CPDF_Page* pPage = CPDFPageFromFPDFPage(page);
-  if (pPage) {
-#if defined(_SKIA_SUPPORT_PATHS_)
-    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
-      auto* pContext =
-          static_cast<CPDF_PageRenderContext*>(pPage->GetRenderContext());
-      if (pContext && pContext->m_pRenderer) {
-        CFX_RenderDevice* pDevice = pContext->m_pDevice.get();
-        pDevice->Flush(true);
-        pDevice->GetBitmap()->UnPreMultiply();
-      }
-    }
-#endif
+  if (pPage)
     pPage->ClearRenderContext();
-  }
 }
diff --git a/fpdfsdk/fpdf_transformpage_embeddertest.cpp b/fpdfsdk/fpdf_transformpage_embeddertest.cpp
index 888101f..8072262 100644
--- a/fpdfsdk/fpdf_transformpage_embeddertest.cpp
+++ b/fpdfsdk/fpdf_transformpage_embeddertest.cpp
@@ -18,7 +18,7 @@
 namespace {
 
 const char* ShrunkChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "78c52d6029283090036e6db6683401e2";
   return "f4136cc9209207ab60eb8381a3df2e69";
 }
@@ -210,7 +210,7 @@
 
 TEST_F(FPDFTransformEmbedderTest, SetCropBox) {
   const char* cropped_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "4b9d2d2246be61c583f454245fe3172f";
     return "9937883715d5144c079fb8f7e3d4f395";
   }();
@@ -286,7 +286,7 @@
 
 TEST_F(FPDFTransformEmbedderTest, SetMediaBox) {
   const char* shrunk_checksum_set_media_box = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "9f28f0610a7f789c24cfd5f9bd5dc3de";
     return "eab5958f62f7ce65d7c32de98389fee1";
   }();
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 55eef66..da8c75a 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -682,7 +682,7 @@
                                 /*pause=*/nullptr);
 
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer()) {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     pDevice->Flush(true);
     pBitmap->UnPreMultiply();
   }
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index c363100..40a6f5a 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -967,57 +967,57 @@
 
 TEST_F(FPDFViewEmbedderTest, FPDF_RenderPageBitmapWithMatrix) {
   const char* clipped_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "d2929fae285593cd1c1d446750d47d60";
     return "a84cab93c102b9b9290fba3047ba702c";
   }();
   const char* top_left_quarter_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "31d24d8c6a2bac380b2f5c393e77ecc9";
     return "f11a11137c8834389e31cf555a4a6979";
   }();
   const char* hori_stretched_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "af6eaa0d3388261693df5390138e4da1";
     return "48ef9205941ed19691ccfa00d717187e";
   }();
   const char* rotated_90_clockwise_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "b4baa001d201baed576cd6d5d0d5a160";
     return "d8da2c7bf77521550d0f2752b9cf3482";
   }();
   const char* rotated_180_clockwise_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "51819227d0863222aed366d5d7c5d9c8";
     return "0113386bb0bd45125bacc6dee78bfe78";
   }();
   const char* rotated_270_clockwise_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "f2b046e46c2751cebc777a9725ae2f3e";
     return "a287e0f74ce203699cda89f9cc97a240";
   }();
   const char* mirror_hori_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "c7fbec322b4fc6bcf46ec1eb89661c41";
     return "6e8d7a6fde39d8e720fb9e620102918c";
   }();
   const char* mirror_vert_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "a8b00bc40677a73c15a08b9769d1b576";
     return "8f3a555ef9c0d5031831ae3715273707";
   }();
   const char* larger_top_left_quarter_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "35deb5ed4b73675ce33f68328a33c687";
     return "172a2f4adafbadbe98017b1c025b9e27";
   }();
   const char* larger_rotated_diagonal_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "1dbf599403c235926d3ddcbc0ea10ee8";
     return "3d62417468bdaff0eb14391a0c30a3b1";
   }();
   const char* tile_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "387be3a84774f39aaa955314d2fe7106";
     return "0a190003c97220bf8877684c8d7e89cf";
   }();
@@ -1430,7 +1430,7 @@
 
   const char* original_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "0e339d606aafb63077f49e238dc27cb0";
 #endif
     return "288502887ffc63291f35a0573b944375";
@@ -1478,12 +1478,12 @@
 
 TEST_F(FPDFViewEmbedderTest, RenderManyRectanglesWithFlags) {
   const char* grayscale_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "b596ac8bbe64e7bff31888ab05e4dcf4";
     return "7b553f1052069a9c61237a05db0955d6";
   }();
   const char* no_smoothpath_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "4d71ed53d9f6e6a761876ebb4ff23e19";
     return "ff6e5c509d1f6984bcdfd18b26a4203a";
   }();
@@ -1519,14 +1519,14 @@
   ASSERT_TRUE(page);
 
   const char* gray_checksum = []() {
-    if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       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::SkiaVariantIsDefaultRenderer()) {
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     static const char kBgrChecksum[] = "ab6312e04c0d3f4e46fb302a45173d05";
 
     static constexpr int kBgrStride = 600;  // Width of 200 * 24 bits per pixel.
@@ -1591,14 +1591,14 @@
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "c1c548442e0e0f949c5550d89bf8ae3b";
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
-      return "6eef7237f7591f07616e238422086737";
-#endif
+    return "6eef7237f7591f07616e238422086737";
+#else
     return "09152e25e51fa8ca31fc28d0937bf477";
+#endif  // BUILDFLAG(IS_APPLE)
   }();
   const char* no_smoothtext_checksum = []() {
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
       return "6eef7237f7591f07616e238422086737";
 #endif
     return "37d0b34e1762fdda4c05ce7ea357b828";
diff --git a/testing/embedder_test_constants.cpp b/testing/embedder_test_constants.cpp
index d42c4ee..ac2a667 100644
--- a/testing/embedder_test_constants.cpp
+++ b/testing/embedder_test_constants.cpp
@@ -10,7 +10,7 @@
 namespace pdfium {
 
 const char* AnnotationStampWithApChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "a31381406d0b95049e418720750b78dd";
 #if BUILDFLAG(IS_APPLE)
   return "d243b5d64752be0f45b86df7bd2e2708";
@@ -22,14 +22,14 @@
 const char kBlankPage612By792Checksum[] = "1940568c9ba33bac5d0b1ee9558c76b3";
 
 const char* Bug890322Checksum() {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "793689536cf64fe792c2f241888c0cf3";
   return "6c674642154408e877d88c6c082d67e9";
 }
 
 const char* HelloWorldChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "6eef7237f7591f07616e238422086737";
 #endif
   return "c1c548442e0e0f949c5550d89bf8ae3b";
@@ -37,26 +37,26 @@
 
 const char* HelloWorldRemovedChecksum() {
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "6e1cae48a2e35c521dee4ca502f48af6";
 #endif
   return "4a9b80f675f7f3bf2da1b02f12449e4b";
 }
 
 const char* ManyRectanglesChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "4e7e280c1597222afcb0ee3bb90ec119";
   return "b0170c575b65ecb93ebafada0ff0f038";
 }
 
 const char* RectanglesChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "b4e411a6b5ffa59a50efede2efece597";
   return "0a90de37f52127619c3dfb642b5fa2fe";
 }
 
 const char* TextFormChecksum() {
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return "e6d2eb75f18d773f0dad938b1bb22e23";
 #if BUILDFLAG(IS_APPLE)
   return "fa2bf756942a950101fc147fc4ef3f82";
diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index ef77b57..19bca35 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -123,7 +123,7 @@
                                   -fFontSize, matrix, color, kOptions);
   }
 #if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     device->Flush(false);
 #endif
 
diff --git a/xfa/fwl/cfwl_edit_embeddertest.cpp b/xfa/fwl/cfwl_edit_embeddertest.cpp
index 11797fa..3e5bb83 100644
--- a/xfa/fwl/cfwl_edit_embeddertest.cpp
+++ b/xfa/fwl/cfwl_edit_embeddertest.cpp
@@ -85,7 +85,7 @@
 
 TEST_F(CFWLEditEmbedderTest, DragMouseSelection) {
   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return;
 
   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
@@ -115,7 +115,7 @@
 
 TEST_F(CFWLEditEmbedderTest, SimpleFill) {
   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return;
 
   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
@@ -139,7 +139,7 @@
 
 TEST_F(CFWLEditEmbedderTest, FillWithNewLineWithoutMultiline) {
   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return;
 
   CreateAndInitializeFormPDF("xfa/email_recommended.pdf");
@@ -210,7 +210,7 @@
 
 TEST_F(CFWLEditEmbedderTest, DateTimePickerTest) {
   // TODO(crbug.com/pdfium/11): Fix this test and enable for Skia variants.
-  if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
     return;
 
   CreateAndInitializeFormPDF("xfa/xfa_date_time_edit.pdf");
@@ -270,7 +270,7 @@
   FORM_OnLButtonUp(form_handle(), page(), 0, 115, 58);
   {
     const char* filled_checksum = []() {
-      if (CFX_DefaultRenderDevice::SkiaVariantIsDefaultRenderer())
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
         return "8c555487e09ee4acf3ace77db5929bdc";
       return "dad642ae8a5afce2591ffbcabbfc58dd";
     }();
