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);
 }
