diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index fa6db6b..887c2cc 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -147,10 +147,18 @@
 }  // namespace
 
 TEST(fxge, SkiaStateEmpty) {
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
+      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    return;
+  }
   Harness(&EmptyTest, {});
 }
 
 TEST(fxge, SkiaStatePath) {
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
+      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    return;
+  }
   Harness(&CommonTest, {State::Change::kNo, State::Save::kYes,
                         State::Clip::kSame, State::Graphic::kPath, 0xFF112233});
   Harness(&CommonTest,
@@ -167,6 +175,9 @@
 #if defined(_SKIA_SUPPORT_)
 // TODO(crbug.com/pdfium/11): Fix this test and enable.
 TEST(fxge, DISABLED_SkiaStateText) {
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
+    return;
+
   Harness(&CommonTest,
           {State::Change::kNo, State::Save::kYes, State::Clip::kDifferentMatrix,
            State::Graphic::kText, 0xFF445566});
@@ -176,5 +187,9 @@
 #endif
 
 TEST(fxge, SkiaStateOOSClip) {
+  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
+      !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+    return;
+  }
   Harness(&OutOfSequenceClipTest, {});
 }
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index f782ea9..ab6b50d 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -4276,12 +4276,14 @@
     ScopedFPDFBitmap x10_bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
-#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-    const char kX10Checksum[] = "bfabf04699139d05c3924526beeb4b95";
-#else
-    const char kX10Checksum[] = "149f63de758ab01d3b75605cdfd4c176";
-#endif
-    CompareBitmap(x10_bitmap.get(), 631, 103, kX10Checksum);
+    const char* x10_checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
+          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+        return "bfabf04699139d05c3924526beeb4b95";
+      }
+      return "149f63de758ab01d3b75605cdfd4c176";
+    }();
+    CompareBitmap(x10_bitmap.get(), 631, 103, x10_checksum);
   }
 
   {
@@ -4303,12 +4305,14 @@
     ScopedFPDFBitmap x10_bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
-#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-    const char kX10Checksum[] = "c7eef7859332c75ab793ebae1c6e7221";
-#else
-    const char kX10Checksum[] = "f5f93bf64de579b59e775d7076ca0a5a";
-#endif
-    CompareBitmap(x10_bitmap.get(), 1143, 150, kX10Checksum);
+    const char* x10_checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
+          CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+        return "c7eef7859332c75ab793ebae1c6e7221";
+      }
+      return "f5f93bf64de579b59e775d7076ca0a5a";
+    }();
+    CompareBitmap(x10_bitmap.get(), 1143, 150, x10_checksum);
   }
 
   UnloadPage(page);
@@ -4337,12 +4341,14 @@
   ScopedFPDFBitmap x10_bitmap(
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
   ASSERT_TRUE(x10_bitmap);
-#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  const char kX10Checksum[] = "4816dd6782e9a977c58fb1ca0ced74d3";
-#else
-  const char kX10Checksum[] = "bbd3842a4b50dbfcbce4eee2b067a297";
-#endif
-  CompareBitmap(x10_bitmap.get(), 275, 275, kX10Checksum);
+  const char* x10_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
+        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      return "4816dd6782e9a977c58fb1ca0ced74d3";
+    }
+    return "bbd3842a4b50dbfcbce4eee2b067a297";
+  }();
+  CompareBitmap(x10_bitmap.get(), 275, 275, x10_checksum);
 
   UnloadPage(page);
 }
@@ -4358,12 +4364,14 @@
   ScopedFPDFBitmap bitmap(
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 7.3f));
   ASSERT_TRUE(bitmap);
-#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  const char kChecksum[] = "bb3778ba739c921525de44e9ab412868";
-#else
-  const char kChecksum[] = "e8154fa8ededf4d9b8b35b5260897b6c";
-#endif
-  CompareBitmap(bitmap.get(), 120, 186, kChecksum);
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
+        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      return "bb3778ba739c921525de44e9ab412868";
+    }
+    return "e8154fa8ededf4d9b8b35b5260897b6c";
+  }();
+  CompareBitmap(bitmap.get(), 120, 186, checksum);
 
   UnloadPage(page);
 }
diff --git a/fpdfsdk/fpdf_flatten_embeddertest.cpp b/fpdfsdk/fpdf_flatten_embeddertest.cpp
index cf94d97..2250719 100644
--- a/fpdfsdk/fpdf_flatten_embeddertest.cpp
+++ b/fpdfsdk/fpdf_flatten_embeddertest.cpp
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "build/build_config.h"
+#include "core/fxge/cfx_defaultrenderdevice.h"
 #include "public/fpdf_flatten.h"
 #include "public/fpdfview.h"
 #include "testing/embedder_test.h"
@@ -39,26 +40,24 @@
 }
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_861842) {
-#if defined(_SKIA_SUPPORT_)
-  static constexpr char kCheckboxChecksum[] =
-      "252fd5f2299cc16e5a07565df7c30565";
-#elif defined(_SKIA_SUPPORT_PATHS_)
-  static constexpr char kCheckboxChecksum[] =
-      "280080feef8787b55ccf5cc828596327";
-#elif BUILDFLAG(IS_APPLE)
-  static constexpr char kCheckboxChecksum[] =
-      "6aafcb2d98da222964bcdbf5aa1f4f1f";
+  const char* checkbox_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
+      return "252fd5f2299cc16e5a07565df7c30565";
+    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
+      return "280080feef8787b55ccf5cc828596327";
+#if BUILDFLAG(IS_APPLE)
+    return "6aafcb2d98da222964bcdbf5aa1f4f1f";
 #else
-  static constexpr char kCheckboxChecksum[] =
-      "594265790b81df2d93120d33b72a6ada";
+    return "594265790b81df2d93120d33b72a6ada";
 #endif
+  }();
 
   ASSERT_TRUE(OpenDocument("bug_861842.pdf"));
   FPDF_PAGE page = LoadPage(0);
   ASSERT_TRUE(page);
 
   ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT);
-  CompareBitmap(bitmap.get(), 100, 120, kCheckboxChecksum);
+  CompareBitmap(bitmap.get(), 100, 120, checkbox_checksum);
 
   EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT));
   EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
@@ -71,23 +70,26 @@
 }
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_889099) {
-#if defined(_SKIA_SUPPORT_)
-  static constexpr char kPageHash[] = "73678f308625e22f31940e9f732b68bf";
-  static constexpr char kFlattenedPageHash[] =
-      "0832157462ea70fbbf053e14b1d6457f";
-#elif defined(_SKIA_SUPPORT_PATHS_)
-  static constexpr char kPageHash[] = "c82ca7521b802024d7120b23876dd6dd";
-  static constexpr char kFlattenedPageHash[] =
-      "0832157462ea70fbbf053e14b1d6457f";
-#elif BUILDFLAG(IS_APPLE)
-  static constexpr char kPageHash[] = "049ed3f1e21fc72f929af3410c64bc8f";
-  static constexpr char kFlattenedPageHash[] =
-      "41debc60cf2a8f74c710ec6082d77b18";
+  const char* page_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
+      return "73678f308625e22f31940e9f732b68bf";
+    if (CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer())
+      return "c82ca7521b802024d7120b23876dd6dd";
+#if BUILDFLAG(IS_APPLE)
+    return "049ed3f1e21fc72f929af3410c64bc8f";
 #else
-  static constexpr char kPageHash[] = "3db87245e3f4e37f4cb18654bbe22d97";
-  static constexpr char kFlattenedPageHash[] =
-      "0832157462ea70fbbf053e14b1d6457f";
+    return "3db87245e3f4e37f4cb18654bbe22d97";
 #endif
+  }();
+  const char* flattened_page_checksum = []() {
+#if BUILDFLAG(IS_APPLE)
+    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() &&
+        !CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      return "41debc60cf2a8f74c710ec6082d77b18";
+    }
+#endif
+    return "0832157462ea70fbbf053e14b1d6457f";
+  }();
 
   ASSERT_TRUE(OpenDocument("bug_889099.pdf"));
   FPDF_PAGE page = LoadPage(0);
@@ -95,54 +97,58 @@
 
   // The original document has a malformed media box; the height is -400.
   ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT);
-  CompareBitmap(bitmap.get(), 300, 400, kPageHash);
+  CompareBitmap(bitmap.get(), 300, 400, page_checksum);
 
   EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT));
   EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
 
   UnloadPage(page);
 
-  VerifySavedDocument(300, 400, kFlattenedPageHash);
+  VerifySavedDocument(300, 400, flattened_page_checksum);
 }
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_890322) {
-#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  static constexpr char kChecksum[] = "793689536cf64fe792c2f241888c0cf3";
-#else
-  static constexpr char kChecksum[] = "6c674642154408e877d88c6c082d67e9";
-#endif
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
+        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      return "793689536cf64fe792c2f241888c0cf3";
+    }
+    return "6c674642154408e877d88c6c082d67e9";
+  }();
   ASSERT_TRUE(OpenDocument("bug_890322.pdf"));
   FPDF_PAGE page = LoadPage(0);
   ASSERT_TRUE(page);
 
   ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT);
-  CompareBitmap(bitmap.get(), 200, 200, kChecksum);
+  CompareBitmap(bitmap.get(), 200, 200, checksum);
 
   EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT));
   EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
 
   UnloadPage(page);
 
-  VerifySavedDocument(200, 200, kChecksum);
+  VerifySavedDocument(200, 200, checksum);
 }
 
 TEST_F(FPDFFlattenEmbedderTest, BUG_896366) {
-#if defined(_SKIA_SUPPORT_) || defined(_SKIA_SUPPORT_PATHS_)
-  static constexpr char kChecksum[] = "c3cccfadc4c5249e6aa0675e511fa4c3";
-#else
-  static constexpr char kChecksum[] = "f71ab085c52c8445ae785eca3ec858b1";
-#endif
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer() ||
+        CFX_DefaultRenderDevice::SkiaPathsIsDefaultRenderer()) {
+      return "c3cccfadc4c5249e6aa0675e511fa4c3";
+    }
+    return "f71ab085c52c8445ae785eca3ec858b1";
+  }();
   ASSERT_TRUE(OpenDocument("bug_896366.pdf"));
   FPDF_PAGE page = LoadPage(0);
   ASSERT_TRUE(page);
 
   ScopedFPDFBitmap bitmap = RenderLoadedPageWithFlags(page, FPDF_ANNOT);
-  CompareBitmap(bitmap.get(), 612, 792, kChecksum);
+  CompareBitmap(bitmap.get(), 612, 792, checksum);
 
   EXPECT_EQ(FLATTEN_SUCCESS, FPDFPage_Flatten(page, FLAT_PRINT));
   EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
 
   UnloadPage(page);
 
-  VerifySavedDocument(612, 792, kChecksum);
+  VerifySavedDocument(612, 792, checksum);
 }
