[Skia] Handle text scaling inside CFX_SkiaDeviceDriver

Adds text scaling process in CFX_SkiaDeviceDriver when a glyph's
default width is different from the width assigned to it by the PDF
file. A glyph can be scaled down or up depending on its assigned
width.

This change enables Skia to handle more text rendering instead of
falling back to the common rendering paths as AGG (using
DrawNormalTextHelper()).

Bug: pdfium:2053
Change-Id: I394a6faa226e4eef6319b91c514aae51ffc355ed
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108070
Reviewed-by: K. Moon <kmoon@chromium.org>
Commit-Queue: Nigi <nigi@chromium.org>
diff --git a/DEPS b/DEPS
index 89dfdc7..ac73739 100644
--- a/DEPS
+++ b/DEPS
@@ -144,7 +144,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling pdfium_tests
   # and whatever else without interference from each other.
-  'pdfium_tests_revision': 'c65dfc18bba504535db9ba07b99de7e35f481016',
+  'pdfium_tests_revision': '340ff012cc21c02fffc3f9c05be3f4d5d8e6bae4',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling resultdb
   # and whatever else without interference from each other.
diff --git a/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp b/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
index da95606..cf1a2b5 100644
--- a/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler_embeddertest.cpp
@@ -137,7 +137,7 @@
 TEST_F(CPDFSecurityHandlerEmbedderTest, PasswordAfterGenerateSave) {
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-      return "1747079dc1429aa5a025084fa3f8be31";
+      return "ad97491cab71c02f1f4ef5ba0a7b5593";
     }
 #if BUILDFLAG(IS_APPLE)
     return "2a308e8cc20a6221112c387d122075a8";
diff --git a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
index 603736d..428c56b 100644
--- a/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
+++ b/core/fpdfapi/render/fpdf_progressive_render_embeddertest.cpp
@@ -24,11 +24,14 @@
 constexpr FX_ARGB kWhite = 0xFFFFFFFF;
 
 const char* AnnotationStampWithApBaseContentChecksum() {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+    return "4fedc838daa6762cf7eee180986a0f1b";
+  }
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "243f3d6267d9db09198fed9f8c4957fd";
-#endif
+  return "243f3d6267d9db09198fed9f8c4957fd";
+#else
   return "e31414933c9ff3950773981e5bf61678";
+#endif
 }
 
 }  // namespace
@@ -313,7 +316,7 @@
   // Test rendering of text with forced color scheme on.
   const char* content_with_text_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "5ece6059efdc2ecb2894fa3cf329dc94";
+      return "edd919ec8b59fab1f16b5f2adb1175f3";
 #if BUILDFLAG(IS_APPLE)
     return "ee4ec12f54ce8d117a73bd9b85a8954d";
 #else
@@ -369,7 +372,7 @@
   // Normal blend mode.
   const char* content_with_highlight_fill_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "9b6273fdbc9db780c49f7540756209f8";
+      return "49dcfcfdc38d200bb3d57a2ca3086034";
 #if BUILDFLAG(IS_APPLE)
     return "a820afec9b99d3d3f2e9e9382bbad7c1";
 #else
@@ -396,7 +399,7 @@
 
   const char* md5_content_with_highlight = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "772246195d18f75d40a22bee913c098f";
+      return "c609e8810fba2f12db8f8a2b043d97bd";
 #if BUILDFLAG(IS_APPLE)
     return "8837bea0b3520164b1784e513c882a2d";
 #else
@@ -416,7 +419,11 @@
   // Test rendering of multiple ink with forced color scheme on.
   const char* content_with_ink_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+#if BUILDFLAG(IS_APPLE)
       return "5108aa537b6ecc37b3f0a35b76c1b379";
+#else
+      return "b39d9f68ff71963d82c43eb20caa8f4d";
+#endif
     }
     return "797bce7dc6c50ee86b095405df9fe5aa";
   }();
@@ -432,7 +439,7 @@
   // Test rendering of static annotation with forced color scheme on.
   const char* content_with_stamp_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "a791fdb4f595bb6c4187cc2aeed5e9e8";
+      return "6e028012a4854ebfd9ee92da862bf679";
 #if BUILDFLAG(IS_APPLE)
     return "8170c539e95f22f14eb8f266a5f1bbed";
 #else
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 1e803bf..fb37f9b 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -753,21 +753,6 @@
   if (pFont->GetFontSpan().empty())
     return false;
 
-  // If a glyph's default width is no less than its width defined in the PDF,
-  // draw the glyph with path since it can be scaled to avoid overlapping with
-  // the adjacent glyphs (if there are any). Otherwise, use the device driver
-  // to render the glyph without any adjustments.
-  const CFX_SubstFont* subst_font = pFont->GetSubstFont();
-  const int subst_font_weight =
-      (subst_font && subst_font->IsBuiltInGenericFont()) ? subst_font->m_Weight
-                                                         : 0;
-  for (const TextCharPos& cp : pCharPos) {
-    const int glyph_width = pFont->GetGlyphWidth(
-        cp.m_GlyphIndex, cp.m_FontCharWidth, subst_font_weight);
-    if (cp.m_FontCharWidth <= glyph_width)
-      return false;
-  }
-
   if (TryDrawText(pCharPos, pFont, mtObject2Device, font_size, color,
                   options)) {
     return true;
@@ -843,6 +828,8 @@
 
 // TODO(crbug.com/pdfium/1999): Merge with `DrawDeviceText()` and refactor
 // common logic.
+// TODO(crbug.com/pdfium/1774): Sometimes the thickness of the glyphs is not
+// ideal. Improve text rendering results regarding different font weight.
 bool CFX_SkiaDeviceDriver::TryDrawText(pdfium::span<const TextCharPos> char_pos,
                                        const CFX_Font* pFont,
                                        const CFX_Matrix& matrix,
@@ -927,13 +914,26 @@
         glyphs.data(), glyphs.size() * sizeof(uint16_t), m_rsxform.data(), font,
         SkTextEncoding::kGlyphID);
     m_pCanvas->drawTextBlob(blob, 0, 0, skPaint);
-  } else {
-    const DataVector<SkPoint>& positions = m_charDetails.GetPositions();
-    for (size_t i = 0; i < m_charDetails.Count(); ++i) {
-      sk_sp<SkTextBlob> blob = SkTextBlob::MakeFromText(
-          &glyphs[i], sizeof(glyphs[i]), font, SkTextEncoding::kGlyphID);
-      m_pCanvas->drawTextBlob(blob, positions[i].fX, positions[i].fY, skPaint);
+    return true;
+  }
+  const DataVector<SkPoint>& positions = m_charDetails.GetPositions();
+  const DataVector<uint32_t>& widths = m_charDetails.GetFontCharWidths();
+  for (size_t i = 0; i < m_charDetails.Count(); ++i) {
+    const uint32_t font_glyph_width =
+        pFont ? pFont->GetGlyphWidth(glyphs[i]) : 0;
+    const uint32_t pdf_glyph_width = widths[i];
+    if (pdf_glyph_width > 0 && font_glyph_width > 0) {
+      // Scale the glyph from its default width `pdf_glyph_width` to the
+      // targeted width `pdf_glyph_width`.
+      font.setScaleX(scaleX * SkIntToScalar(pdf_glyph_width) /
+                     font_glyph_width);
+    } else {
+      font.setScaleX(scaleX);
     }
+    auto blob =
+        SkTextBlob::MakeFromPosText(&glyphs[i], sizeof(uint16_t), &positions[i],
+                                    font, SkTextEncoding::kGlyphID);
+    m_pCanvas->drawTextBlob(blob, 0, 0, skPaint);
   }
   return true;
 }
diff --git a/fpdfsdk/fpdf_annot_embeddertest.cpp b/fpdfsdk/fpdf_annot_embeddertest.cpp
index 2dd8190..173fce7 100644
--- a/fpdfsdk/fpdf_annot_embeddertest.cpp
+++ b/fpdfsdk/fpdf_annot_embeddertest.cpp
@@ -548,7 +548,11 @@
   {
     const char* expected_hash = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+#if BUILDFLAG(IS_APPLE)
         return "6e00cc75639c5314c8273072915d8f92";
+#else
+        return "1fb0dd8dd5f0b9bb8d076e48eb59296d";
+#endif
       }
       return "354002e1c4386d38fdde29ef8d61074a";
     }();
@@ -770,7 +774,11 @@
   // Open the saved document.
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+#if BUILDFLAG(IS_APPLE)
       return "24994ad69aa612a66d183eaf9a92aa06";
+#else
+      return "798fa41303381c9ba6d99092f5cd4d2b";
+#endif
     }
     return "dba153419f67b7c0c0e3d22d3e8910d5";
   }();
@@ -889,7 +897,7 @@
 TEST_F(FPDFAnnotEmbedderTest, ModifyRectQuadpointsWithAP) {
   const char* md5_original = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "0dd4c099b93d24eed9926a948ac5101c";
+      return "2a9d1df839d5ec81a49f982347d9656c";
 #if BUILDFLAG(IS_APPLE)
     return "fc59468d154f397fd298c69f47ef565a";
 #else
@@ -898,7 +906,7 @@
   }();
   const char* md5_modified_highlight = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "92dfe7960d248635a694f43c66db7a4d";
+      return "0fb1653db0e8e8f7ce5d726bb0074bb5";
 #if BUILDFLAG(IS_APPLE)
     return "e64bf648f6e9354d1f3eedb47a2c9498";
 #else
@@ -907,7 +915,7 @@
   }();
   const char* md5_modified_square = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "fac81632e33fd5c06f39082a26d06ba8";
+      return "879c77a2cb9f79ba65ffe0bbdd720ce3";
 #if BUILDFLAG(IS_APPLE)
     return "a66591662c8e7ad3c6059952e234bebf";
 #else
@@ -1108,7 +1116,7 @@
 TEST_F(FPDFAnnotEmbedderTest, AddAndModifyPath) {
   const char* md5_modified_path = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "f671765166acf45d80e833ea3aff8b90";
+      return "fb4d5fac05f7eb5d84a4100898c11197";
 #if BUILDFLAG(IS_APPLE)
     return "34614087e04b729b7b8c37739dcf9af9";
 #else
@@ -1117,7 +1125,7 @@
   }();
   const char* md5_two_paths = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "491ce8fb274cc83b55b6099f15457b5d";
+      return "fcf3e79b2a91d1294b9bbccff727d3c2";
 #if BUILDFLAG(IS_APPLE)
     return "6cdaf6b3e5145f435d8ccae6db5cf9af";
 #else
@@ -1126,7 +1134,7 @@
   }();
   const char* md5_new_annot = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "92bfb06058ff608571a3baf65f7fc05d";
+      return "7db6321c8ffe502f4e60622aa16d5417";
 #if BUILDFLAG(IS_APPLE)
     return "55dab4f158fdc284e439b88c4306373c";
 #else
@@ -1329,7 +1337,7 @@
 TEST_F(FPDFAnnotEmbedderTest, AddAndModifyImage) {
   const char* md5_new_image = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "4ba31e174d873b3fda1d7a160d4a0e85";
+      return "476596330c0e7daa31f115005c1d36eb";
 #if BUILDFLAG(IS_APPLE)
     return "17ac49518eabbb6a7632a547269c40a3";
 #else
@@ -1338,7 +1346,7 @@
   }();
   const char* md5_modified_image = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "5806fadc1a192bc4bb07511a0711c957";
+      return "0047c3e7ea7658e1a963fc339f1c587d";
 #if BUILDFLAG(IS_APPLE)
     return "ce68959f74242d588af7fb82be5ba0ab";
 #else
@@ -1420,7 +1428,7 @@
 TEST_F(FPDFAnnotEmbedderTest, AddAndModifyText) {
   const char* md5_new_text = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-      return "8a8ebe4bc9d310aec363fec72143c7c7";
+      return "1e7f98c18775d6e0f4f454747b77cc1a";
     }
 #if BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_ARM64)
     return "0c3448974a4e8da2395da917935e5de1";
@@ -1432,7 +1440,7 @@
   }();
   const char* md5_modified_text = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-      return "87dd70d562ba23d8d44e61668de3c4f1";
+      return "37e35705946806f8f98c51e4e25647a2";
     }
 #if BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_ARM64)
     return "9cf1c024a9d2d356bcdd14cb71a32324";
@@ -1571,7 +1579,7 @@
 
   const char* md5 = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "2b9078043cd6130fef4e8542dcda943e";
+      return "a95a65d109eda5671c793ff5f7d2a2df";
 #if BUILDFLAG(IS_APPLE)
     return "52e93c54796f7f7167edf64e81d12bd7";
 #else
@@ -3035,7 +3043,7 @@
   {
     const char* md5_sum = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "08b693ba461a24ee6b9c7f86b5dbe191";
+        return "c09b129c071ec1569deb003676b617b0";
 #if BUILDFLAG(IS_APPLE)
       return "108a46c517c4eaace9982ee83e8e3296";
 #else
@@ -3063,7 +3071,7 @@
   {
     const char* md5_sum = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "3e6ae77a45e49bfd909f3ee0351a4176";
+        return "277f1b9e70031539d034d22bc6064838";
 #if BUILDFLAG(IS_APPLE)
       return "eb3869335e7a219e1b5f25c1c6037b97";
 #else
@@ -3082,7 +3090,7 @@
   {
     const char* md5_sum = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "12bb575d925923ad6672f427c574eef4";
+        return "d980005939cd4ae0a199d8600a0abdf3";
 #if BUILDFLAG(IS_APPLE)
       return "d20b1978da2362d3942ea0fc6d230997";
 #else
@@ -3657,18 +3665,24 @@
   EXPECT_EQ(3, FPDFPage_GetAnnotCount(page));
 
   const char* original_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "238dccc7df0ac61ac580c28e1109da3c";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "522a4a6b6c7eab5bf95ded1f21ea372e";
-#endif
+    return "522a4a6b6c7eab5bf95ded1f21ea372e";
+#else
     return "12127303aecd80c6288460f7c0d79f3f";
+#endif
   }();
   const char* modified_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "0f326acb3eb583125ca584d703ccb13b";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "6844019e07b83cc01723415f58218d06";
-#endif
+    return "6844019e07b83cc01723415f58218d06";
+#else
     return "73d06ff4c665fe85029acef30240dcca";
+#endif
   }();
 
   {
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp
index 7b973ea..f5442e9 100644
--- a/fpdfsdk/fpdf_edit_embeddertest.cpp
+++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -48,26 +48,32 @@
 const wchar_t kBottomText[] = L"I'm at the bottom of the page";
 
 const char* BottomTextChecksum() {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+    return "c62d315856a558d2666b80d474831efe";
+  }
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "81636489006a31fcb00cf29efcdf7909";
-#endif
+  return "81636489006a31fcb00cf29efcdf7909";
+#else
   return "891dcb6e914c8360998055f1f47c9727";
+#endif
 }
 
 const char* FirstRemovedChecksum() {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+    return "3006ab2b12d27246eae4faad509ac575";
+  }
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "a1dc2812692fcc7ee4f01ca77435df9d";
-#endif
+  return "a1dc2812692fcc7ee4f01ca77435df9d";
+#else
   return "e1477dc3b5b3b9c560814c4d1135a02b";
+#endif
 }
 
 const wchar_t kLoadedFontText[] = L"I am testing my loaded font, WEE.";
 
 const char* LoadedFontTextChecksum() {
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "d58570cc045dfb818b92cbabbd1a364c";
+    return "fc2334c350cbd0d2ae6076689da09741";
 #if BUILDFLAG(IS_APPLE)
   return "0f3e4a7d71f9e7eb8a1a0d69403b9848";
 #else
@@ -260,12 +266,21 @@
   FPDFPage_InsertObject(page.get(), text_object);
   EXPECT_TRUE(FPDFPage_GenerateContent(page.get()));
 
-  const char kChecksum[] = "9a31fb87d1c6d2346bba22d1196041cd";
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+#if BUILDFLAG(IS_APPLE)
+      return "9a31fb87d1c6d2346bba22d1196041cd";
+#else
+      return "5bb65e15fc0a685934cd5006dec08a76";
+#endif
+    }
+    return "9a31fb87d1c6d2346bba22d1196041cd";
+  }();
   ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
-  CompareBitmap(page_bitmap.get(), 400, 400, kChecksum);
+  CompareBitmap(page_bitmap.get(), 400, 400, checksum);
 
   ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
-  VerifySavedDocument(400, 400, kChecksum);
+  VerifySavedDocument(400, 400, checksum);
 }
 
 TEST_F(FPDFEditEmbedderTest, EmbedNotoSansSCFontWithCharcodes) {
@@ -297,12 +312,21 @@
   FPDFPage_InsertObject(page.get(), text_object);
   EXPECT_TRUE(FPDFPage_GenerateContent(page.get()));
 
-  const char kChecksum[] = "9a31fb87d1c6d2346bba22d1196041cd";
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+#if BUILDFLAG(IS_APPLE)
+      return "9a31fb87d1c6d2346bba22d1196041cd";
+#else
+      return "5bb65e15fc0a685934cd5006dec08a76";
+#endif
+    }
+    return "9a31fb87d1c6d2346bba22d1196041cd";
+  }();
   ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
-  CompareBitmap(page_bitmap.get(), 400, 400, kChecksum);
+  CompareBitmap(page_bitmap.get(), 400, 400, checksum);
 
   ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
-  VerifySavedDocument(400, 400, kChecksum);
+  VerifySavedDocument(400, 400, checksum);
 }
 
 TEST_F(FPDFEditEmbedderTest, EmptyCreation) {
@@ -718,11 +742,14 @@
   ASSERT_EQ(2, FPDFPage_CountObjects(page));
 
   const char* changed_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "4a8345a139507932729e07d4831cbe2b";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "b720e83476fd6819d47c533f1f43c728";
-#endif
+    return "b720e83476fd6819d47c533f1f43c728";
+#else
     return "9a85b9354a69c61772ed24151c140f46";
+#endif
   }();
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
@@ -775,11 +802,14 @@
   ASSERT_TRUE(page);
 
   const char* original_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "3c04e3acc732faaf39fb0c19efd056ac";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "ae7a25c85e0e2dd0c5cb9dd5cd37f6df";
-#endif
+    return "ae7a25c85e0e2dd0c5cb9dd5cd37f6df";
+#else
     return "7af7fe5b281298261eb66ac2d22f5054";
+#endif
   }();
   {
     // When opened before any editing and saving, the clipping path is rendered.
@@ -840,11 +870,14 @@
   ASSERT_TRUE(page);
 
   const char* original_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "d76a31d931a350f0809226a41029a9a4";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "1226bc2b8072622eb28f52321876e814";
-#endif
+    return "1226bc2b8072622eb28f52321876e814";
+#else
     return "c5241eef60b9eac68ed1f2a5fd002703";
+#endif
   }();
   {
     // When opened before any editing and saving, the text object is rendered.
@@ -1243,7 +1276,7 @@
   {
     const char* original_checksum = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "34ac4e0f3ba510760be09d0e19c1b43e";
+        return "efc2206b313fff03be8e701907322b06";
 #if BUILDFLAG(IS_APPLE)
 #ifdef ARCH_CPU_ARM64
       return "cdc8e22cf1e7e06999dc456288672a3b";
@@ -1293,7 +1326,7 @@
   EXPECT_EQ(11, FPDFPage_CountObjects(page));
   const char* non_primes_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "c671fa07b63e85c4201b9926e880fda8";
+      return "10a6558c9e40ea837922e6f2882a2d57";
 #if BUILDFLAG(IS_APPLE)
 #ifdef ARCH_CPU_ARM64
     return "23c4aec321547f51591fe7363a9ea2d6";
@@ -1306,7 +1339,7 @@
   }();
   const char* non_primes_after_save_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "c671fa07b63e85c4201b9926e880fda8";
+      return "10a6558c9e40ea837922e6f2882a2d57";
 #if BUILDFLAG(IS_APPLE)
 #ifdef ARCH_CPU_ARM64
     return "6bb1ea0d0a512f29edabda33064a0725";
@@ -1591,11 +1624,14 @@
   // Verify the "Hello, world!" text is gone.
   ASSERT_EQ(2, FPDFPage_CountObjects(page));
   const char* hello_removed_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "204c11472f5b93719487de7b9c1b1c93";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "5508c2f06d104050f74f655693e38c2c";
-#endif
+    return "5508c2f06d104050f74f655693e38c2c";
+#else
     return "a8cd82499cf744e0862ca468c9d4ceb8";
+#endif
   }();
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
@@ -1750,7 +1786,7 @@
 
   const char* stream1_removed_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "b9bb0acfdba4bb5d2e578e7b73341baf";
+      return "0b3ef335b8d86a3f9d609368b9d075e0";
 #if BUILDFLAG(IS_APPLE)
 #if ARCH_CPU_ARM64
     return "08505db7b598f7397a2260ecb1f6d86d";
@@ -2268,7 +2304,7 @@
   ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "8a48b019826492331454f2809990aba8";
+      return "72523cfac069f8a81057164682998961";
 #if BUILDFLAG(IS_APPLE)
     return "279693baca9f48da2d75a8e289aed58e";
 #else
@@ -2453,11 +2489,14 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
     const char* checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+        return "3fa05f8935a43a38a8923e9d5fb94365";
+      }
 #if BUILDFLAG(IS_APPLE)
-      if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "983baaa1f688eff7a14b1bf91c171a1a";
-#endif
+      return "983baaa1f688eff7a14b1bf91c171a1a";
+#else
       return "161523e196eb5341604cd73e12c97922";
+#endif
     }();
     CompareBitmap(page_bitmap.get(), 612, 792, checksum);
 
@@ -2477,11 +2516,14 @@
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
     const char* checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+        return "63385a217934d9ee9e17ef4d7f7b2128";
+      }
 #if BUILDFLAG(IS_APPLE)
-      if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "e0b3493c5c16e41d0d892ffb48e63fba";
-#endif
+      return "e0b3493c5c16e41d0d892ffb48e63fba";
+#else
       return "1fbf772dca8d82b960631e6683934964";
+#endif
     }();
     CompareBitmap(page_bitmap.get(), 612, 792, checksum);
 
@@ -2558,7 +2600,7 @@
 TEST_F(FPDFEditEmbedderTest, SetTextRenderMode) {
   const char* original_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "39a4ac8f1fdc6653edd3b91862ea7b75";
+      return "48c7f21b2a1a1bbeab24cccccc131e47";
 #if BUILDFLAG(IS_APPLE)
     return "c488514ce0fc949069ff560407edacd2";
 #else
@@ -2885,18 +2927,24 @@
 
 TEST_F(FPDFEditEmbedderTest, ModifyFormObject) {
   const char* orig_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "1c6dae4b04fea7430a791135721eaba5";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "a637057185f50aac1aa5490f726aef95";
-#endif
+    return "a637057185f50aac1aa5490f726aef95";
+#else
     return "34a9ec0a9581a7970e073c0bcc4ca676";
+#endif
   }();
   const char* new_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "7282fe98693c0a7ad2c1b3f3f9563977";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "8ad9d79b02b609ff734e2a2195c96e2d";
-#endif
+    return "8ad9d79b02b609ff734e2a2195c96e2d";
+#else
     return "609b5632a21c886fa93182dbc290bf7a";
+#endif
   }();
 
   ASSERT_TRUE(OpenDocument("form_object.pdf"));
@@ -3320,7 +3368,7 @@
   ScopedFPDFBitmap page_bitmap2 = RenderPage(page);
   const char* insert_true_type_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "683f4a385a891494100192cb338b11f0";
+      return "4f9a6c7752ac7d4e4c731260fdb5af15";
 #if BUILDFLAG(IS_APPLE)
     return "c7e2271a7f30e5b919a13ead47cea105";
 #else
@@ -3397,10 +3445,16 @@
   }
 
   // Check that the text renders properly.
-  static constexpr char kChecksum[] = "84d31d11b76845423a2cfc1879c0fbb9";
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "2e174d17de96a760d42ca3a06acbf36a";
+    }
+    return "84d31d11b76845423a2cfc1879c0fbb9";
+  }();
+
   {
     ScopedFPDFBitmap page_bitmap = RenderPage(page);
-    CompareBitmap(page_bitmap.get(), 612, 792, kChecksum);
+    CompareBitmap(page_bitmap.get(), 612, 792, checksum);
   }
 
   // Save the document, close the page.
@@ -3408,7 +3462,7 @@
   EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
   FPDF_ClosePage(page);
 
-  VerifySavedDocument(612, 792, kChecksum);
+  VerifySavedDocument(612, 792, checksum);
 }
 #endif  // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
 
@@ -4477,21 +4531,31 @@
     ScopedFPDFBitmap bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 1));
     ASSERT_TRUE(bitmap);
-    const char kChecksum[] = "bb0abe1accca1cfeaaf78afa35762350";
-    CompareBitmap(bitmap.get(), 64, 11, kChecksum);
+    const char* checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+        return "b17801afe8a36d6aad6c2239b88f2a73";
+      }
+      return "bb0abe1accca1cfeaaf78afa35762350";
+    }();
+    CompareBitmap(bitmap.get(), 64, 11, checksum);
 
     ScopedFPDFBitmap x2_bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 2.4f));
     ASSERT_TRUE(x2_bitmap);
-    const char kX2Checksum[] = "80db528ec7146d92247f2339a8f10ba5";
-    CompareBitmap(x2_bitmap.get(), 153, 25, kX2Checksum);
+    const char* x2_checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+        return "33af8b151ab26ebce5a71b39eedea6b1";
+      }
+      return "80db528ec7146d92247f2339a8f10ba5";
+    }();
+    CompareBitmap(x2_bitmap.get(), 153, 25, x2_checksum);
 
     ScopedFPDFBitmap x10_bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
     const char* x10_checksum = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "f5e86739b9603838cbfb0c7f8e54e4ae";
+        return "93dd7ad07bdaaba9ecd268350cb91596";
       return "149f63de758ab01d3b75605cdfd4c176";
     }();
     CompareBitmap(x10_bitmap.get(), 631, 103, x10_checksum);
@@ -4504,21 +4568,31 @@
     ScopedFPDFBitmap bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 1));
     ASSERT_TRUE(bitmap);
-    const char kChecksum[] = "3fc1101b2408c5484adc24ba0a11ff3d";
-    CompareBitmap(bitmap.get(), 116, 16, kChecksum);
+    const char* checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+        return "63fd059d984a5bea10f27ba026420202";
+      }
+      return "3fc1101b2408c5484adc24ba0a11ff3d";
+    }();
+    CompareBitmap(bitmap.get(), 116, 16, checksum);
 
     ScopedFPDFBitmap x2_bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 2.4f));
     ASSERT_TRUE(x2_bitmap);
-    const char kX2Checksum[] = "429960ae7b822f0c630432535e637465";
-    CompareBitmap(x2_bitmap.get(), 276, 36, kX2Checksum);
+    const char* x2_checksum = []() {
+      if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+        return "fc45021e3ea3ebd406fe6ffaa8c5c5b7";
+      }
+      return "429960ae7b822f0c630432535e637465";
+    }();
+    CompareBitmap(x2_bitmap.get(), 276, 36, x2_checksum);
 
     ScopedFPDFBitmap x10_bitmap(
         FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
     ASSERT_TRUE(x10_bitmap);
     const char* x10_checksum = []() {
       if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-        return "59d0b5f1fc2a1cc0c392e213909bbbb6";
+        return "61476636eaa0da0b93d8b1937cf22b75";
       return "f5f93bf64de579b59e775d7076ca0a5a";
     }();
     CompareBitmap(x10_bitmap.get(), 1143, 150, x10_checksum);
@@ -4538,21 +4612,31 @@
   ScopedFPDFBitmap bitmap(
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 1));
   ASSERT_TRUE(bitmap);
-  const char kChecksum[] = "08ada0802f780d3fefb161dc6fb45977";
-  CompareBitmap(bitmap.get(), 29, 28, kChecksum);
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "f515a7209d7892065d3716ec462f5c10";
+    }
+    return "08ada0802f780d3fefb161dc6fb45977";
+  }();
+  CompareBitmap(bitmap.get(), 29, 28, checksum);
 
   ScopedFPDFBitmap x2_bitmap(
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 2.4f));
   ASSERT_TRUE(x2_bitmap);
-  const char kX2Checksum[] = "09d7ddb647b8653cb59aede349a0c3e1";
-  CompareBitmap(x2_bitmap.get(), 67, 67, kX2Checksum);
+  const char* x2_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "c69bbe5318ec149f63228e276e708612";
+    }
+    return "09d7ddb647b8653cb59aede349a0c3e1";
+  }();
+  CompareBitmap(x2_bitmap.get(), 67, 67, x2_checksum);
 
   ScopedFPDFBitmap x10_bitmap(
       FPDFTextObj_GetRenderedBitmap(document(), page, text_object, 10));
   ASSERT_TRUE(x10_bitmap);
   const char* x10_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "839dc0eed66eab6d545833f25b37031e";
+      return "bb7c2ec575f27cf882dcd38f2563c00f";
     return "bbd3842a4b50dbfcbce4eee2b067a297";
   }();
   CompareBitmap(x10_bitmap.get(), 275, 275, x10_checksum);
@@ -4595,8 +4679,13 @@
   ScopedFPDFBitmap bitmap(
       FPDFTextObj_GetRenderedBitmap(document(), nullptr, text_object.get(), 1));
   ASSERT_TRUE(bitmap);
-  const char kChecksum[] = "fa947759dab76d68a07ccf6f97b2d9c2";
-  CompareBitmap(bitmap.get(), 151, 12, kChecksum);
+  const char* checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "574ae982d02e653ab6a8f23a6cdf4085";
+    }
+    return "fa947759dab76d68a07ccf6f97b2d9c2";
+  }();
+  CompareBitmap(bitmap.get(), 151, 12, checksum);
 }
 
 TEST_F(FPDFEditEmbedderTest, GetRenderedBitmapForTextWithBadParameters) {
diff --git a/fpdfsdk/fpdf_flatten_embeddertest.cpp b/fpdfsdk/fpdf_flatten_embeddertest.cpp
index 235ab88..f3305b5 100644
--- a/fpdfsdk/fpdf_flatten_embeddertest.cpp
+++ b/fpdfsdk/fpdf_flatten_embeddertest.cpp
@@ -42,7 +42,7 @@
 TEST_F(FPDFFlattenEmbedderTest, BUG_861842) {
   const char* checkbox_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "252fd5f2299cc16e5a07565df7c30565";
+      return "95fdaa000e81c80892b8d370f77be970";
 #if BUILDFLAG(IS_APPLE)
     return "6aafcb2d98da222964bcdbf5aa1f4f1f";
 #else
@@ -70,7 +70,7 @@
 TEST_F(FPDFFlattenEmbedderTest, BUG_889099) {
   const char* page_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "73678f308625e22f31940e9f732b68bf";
+      return "de7119d99f42deab2f4215017bdb16af";
 #if BUILDFLAG(IS_APPLE)
     return "049ed3f1e21fc72f929af3410c64bc8f";
 #else
@@ -78,11 +78,14 @@
 #endif
   }();
   const char* flattened_page_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "7978c7b3d643a5f0ac0f03ce759c55fe";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "41debc60cf2a8f74c710ec6082d77b18";
-#endif
+    return "41debc60cf2a8f74c710ec6082d77b18";
+#else
     return "0832157462ea70fbbf053e14b1d6457f";
+#endif
   }();
 
   ASSERT_TRUE(OpenDocument("bug_889099.pdf"));
diff --git a/fpdfsdk/fpdf_formfill_embeddertest.cpp b/fpdfsdk/fpdf_formfill_embeddertest.cpp
index ea4af57..4f31ed0 100644
--- a/fpdfsdk/fpdf_formfill_embeddertest.cpp
+++ b/fpdfsdk/fpdf_formfill_embeddertest.cpp
@@ -1321,7 +1321,7 @@
 TEST_F(FPDFFormFillEmbedderTest, FormText) {
   const char* focused_text_form_with_abc_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "07a179a9dfb8f5462746262984109a99";
+      return "b9fb2245a98ac48146da84237a37f8cc";
 #if BUILDFLAG(IS_APPLE)
     return "9fb14198d75ca0a107060c60ca21b0c7";
 #else
@@ -1330,7 +1330,7 @@
   }();
   const char* unfocused_text_form_with_abc_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "a21b74cc620db8a9891ebd69e1aeda98";
+      return "5f3205f0189d9dde54665f970838f614";
 #if BUILDFLAG(IS_APPLE)
     return "3c3209357e0c057a0620afa7d83eb784";
 #else
@@ -1432,7 +1432,7 @@
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditFirstForm) {
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "29a06da3e47f67535e266b090a5ac82d";
+      return "143c2bb79fcaecf24f5aa104dce27beb";
 #if BUILDFLAG(IS_APPLE)
     return "bf5423874f188427d2500a2bc4abebbe";
 #else
@@ -1465,7 +1465,7 @@
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditSecondForm) {
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "19f8574d6378ee36e349376d88b7a2c4";
+      return "e36726414acb616dc203e8851b510e2c";
 #if BUILDFLAG(IS_APPLE)
     return "8a0fd8772dba6e1e952e49d159cc64b5";
 #else
@@ -1498,7 +1498,7 @@
 TEST_F(FPDFFormFillEmbedderTest, Bug1302455EditBothForms) {
   const char* checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "edbc9b0e190118a9039fffc11e494081";
+      return "f82a807c056e22aa55d3d7228eedfe6f";
 #if BUILDFLAG(IS_APPLE)
     return "1f422ee1c520ad74b1a993b64bd4dc4a";
 #else
@@ -1537,11 +1537,14 @@
 
 TEST_F(FPDFFormFillEmbedderTest, RemoveFormFieldHighlight) {
   const char* no_highlight_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "3bfddb2529085021ad283b7e65f71525";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "5c82aa43e3b478aa1e4c94bb9ef1f11f";
-#endif
+    return "5c82aa43e3b478aa1e4c94bb9ef1f11f";
+#else
     return "a6268304f7eedfa9ee98fac3caaf2efb";
+#endif
   }();
 
   ASSERT_TRUE(OpenDocument("text_form.pdf"));
diff --git a/fpdfsdk/fpdf_view_embeddertest.cpp b/fpdfsdk/fpdf_view_embeddertest.cpp
index 3190658..a24240b 100644
--- a/fpdfsdk/fpdf_view_embeddertest.cpp
+++ b/fpdfsdk/fpdf_view_embeddertest.cpp
@@ -1454,11 +1454,14 @@
   // macOS rendering result doesn't.
 
   const char* original_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "29cb8045c21cfa2c920fdf43de70efd8";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "0e339d606aafb63077f49e238dc27cb0";
-#endif
+    return "0e339d606aafb63077f49e238dc27cb0";
+#else
     return "288502887ffc63291f35a0573b944375";
+#endif
   }();
   static const char kNoNativeTextChecksum[] =
       "288502887ffc63291f35a0573b944375";
@@ -1628,7 +1631,7 @@
 
   const char* lcd_text_checksum = []() {
     if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "c1c548442e0e0f949c5550d89bf8ae3b";
+      return "d1decde2de1c07b5274cc8cb44f92427";
 #if BUILDFLAG(IS_APPLE)
     return "6eef7237f7591f07616e238422086737";
 #else
@@ -1636,11 +1639,14 @@
 #endif  // BUILDFLAG(IS_APPLE)
   }();
   const char* no_smoothtext_checksum = []() {
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "cd5bbe9407c3fcc85d365172a9a55abd";
+    }
 #if BUILDFLAG(IS_APPLE)
-    if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-      return "6eef7237f7591f07616e238422086737";
-#endif
+    return "6eef7237f7591f07616e238422086737";
+#else
     return "37d0b34e1762fdda4c05ce7ea357b828";
+#endif
   }();
 
   TestRenderPageBitmapWithFlags(page, FPDF_LCD_TEXT, lcd_text_checksum);
@@ -2038,7 +2044,15 @@
   FPDF_PAGE page = LoadPage(0);
   ASSERT_TRUE(page);
 
-  TestRenderPageBitmapWithFlags(page, FPDF_RENDER_NO_SMOOTHTEXT,
-                                "4ef1f65ab1ac76acb97a3540dcb10b4e");
+  const char* checksum = []() {
+#if !BUILDFLAG(IS_APPLE)
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+      return "ceeb93d2bcdb586d62c95b33cadcd873";
+    }
+#endif
+    return "4ef1f65ab1ac76acb97a3540dcb10b4e";
+  }();
+
+  TestRenderPageBitmapWithFlags(page, FPDF_RENDER_NO_SMOOTHTEXT, checksum);
   UnloadPage(page);
 }
diff --git a/testing/embedder_test_constants.cpp b/testing/embedder_test_constants.cpp
index 9e8caee..1364de1 100644
--- a/testing/embedder_test_constants.cpp
+++ b/testing/embedder_test_constants.cpp
@@ -11,7 +11,7 @@
 
 const char* AnnotationStampWithApChecksum() {
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "a31381406d0b95049e418720750b78dd";
+    return "c7ff65a3ad1b01c3a0e94d635f10670e";
 #if BUILDFLAG(IS_APPLE)
   return "0521eaa52fe2aa43aafd3e4495f63f0b";
 #else
@@ -28,19 +28,25 @@
 }
 
 const char* HelloWorldChecksum() {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+    return "d1decde2de1c07b5274cc8cb44f92427";
+  }
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "6eef7237f7591f07616e238422086737";
-#endif
+  return "6eef7237f7591f07616e238422086737";
+#else
   return "c1c548442e0e0f949c5550d89bf8ae3b";
+#endif
 }
 
 const char* HelloWorldRemovedChecksum() {
+  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
+    return "6e0307348e7c1b92f2f061f92f62fd45";
+  }
 #if BUILDFLAG(IS_APPLE)
-  if (!CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "6e1cae48a2e35c521dee4ca502f48af6";
-#endif
+  return "6e1cae48a2e35c521dee4ca502f48af6";
+#else
   return "4a9b80f675f7f3bf2da1b02f12449e4b";
+#endif
 }
 
 const char* ManyRectanglesChecksum() {
@@ -57,7 +63,7 @@
 
 const char* TextFormChecksum() {
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    return "e6d2eb75f18d773f0dad938b1bb22e23";
+    return "b259776fd156003e2a594d1c7ce2d8d7";
 #if BUILDFLAG(IS_APPLE)
   return "fa2bf756942a950101fc147fc4ef3f82";
 #else
diff --git a/testing/resources/pixel/bug_1021762_expected_skia_linux.pdf.0.png b/testing/resources/pixel/bug_1021762_expected_skia_linux.pdf.0.png
new file mode 100644
index 0000000..1419d2e
--- /dev/null
+++ b/testing/resources/pixel/bug_1021762_expected_skia_linux.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1021762_expected_skia_win.pdf.0.png b/testing/resources/pixel/bug_1021762_expected_skia_win.pdf.0.png
new file mode 100644
index 0000000..1419d2e
--- /dev/null
+++ b/testing/resources/pixel/bug_1021762_expected_skia_win.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1072440_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1072440_expected_skia.pdf.0.png
index 6ce4fbe..b0d2d8d 100644
--- a/testing/resources/pixel/bug_1072440_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_1072440_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_113910_expected_skia.pdf.0.png b/testing/resources/pixel/bug_113910_expected_skia.pdf.0.png
index 3c3cd81..4eb3fa0 100644
--- a/testing/resources/pixel/bug_113910_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_113910_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1271578_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1271578_expected_skia.pdf.0.png
new file mode 100644
index 0000000..b37b9ec
--- /dev/null
+++ b/testing/resources/pixel/bug_1271578_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1308_1_expected_skia_linux.pdf.0.png b/testing/resources/pixel/bug_1308_1_expected_skia_linux.pdf.0.png
new file mode 100644
index 0000000..784332c
--- /dev/null
+++ b/testing/resources/pixel/bug_1308_1_expected_skia_linux.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1308_1_expected_skia_win.pdf.0.png b/testing/resources/pixel/bug_1308_1_expected_skia_win.pdf.0.png
new file mode 100644
index 0000000..784332c
--- /dev/null
+++ b/testing/resources/pixel/bug_1308_1_expected_skia_win.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1308_expected_skia_linux.pdf.0.png b/testing/resources/pixel/bug_1308_expected_skia_linux.pdf.0.png
new file mode 100644
index 0000000..252d0a8
--- /dev/null
+++ b/testing/resources/pixel/bug_1308_expected_skia_linux.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1308_expected_skia_win.pdf.0.png b/testing/resources/pixel/bug_1308_expected_skia_win.pdf.0.png
new file mode 100644
index 0000000..252d0a8
--- /dev/null
+++ b/testing/resources/pixel/bug_1308_expected_skia_win.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1355_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1355_expected_skia.pdf.0.png
index dae811b..f097788 100644
--- a/testing/resources/pixel/bug_1355_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_1355_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1355_expected_skia_mac.pdf.0.png b/testing/resources/pixel/bug_1355_expected_skia_mac.pdf.0.png
new file mode 100644
index 0000000..dae811b
--- /dev/null
+++ b/testing/resources/pixel/bug_1355_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1356149_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1356149_expected_skia.pdf.0.png
new file mode 100644
index 0000000..8f67a34
--- /dev/null
+++ b/testing/resources/pixel/bug_1356149_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1372651_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1372651_expected_skia.pdf.0.png
index 6ac995f..e7c07b7 100644
--- a/testing/resources/pixel/bug_1372651_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_1372651_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1388_2_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1388_2_expected_skia.pdf.0.png
new file mode 100644
index 0000000..c5270f8
--- /dev/null
+++ b/testing/resources/pixel/bug_1388_2_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1388_3_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1388_3_expected_skia.pdf.0.png
new file mode 100644
index 0000000..b97bdeb
--- /dev/null
+++ b/testing/resources/pixel/bug_1388_3_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1402_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1402_expected_skia.pdf.0.png
index f34b78e..9d2c92e 100644
--- a/testing/resources/pixel/bug_1402_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_1402_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1402_expected_skia_mac.pdf.0.png b/testing/resources/pixel/bug_1402_expected_skia_mac.pdf.0.png
new file mode 100644
index 0000000..f34b78e
--- /dev/null
+++ b/testing/resources/pixel/bug_1402_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1442723_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1442723_expected_skia.pdf.0.png
new file mode 100644
index 0000000..21011a4
--- /dev/null
+++ b/testing/resources/pixel/bug_1442723_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1752_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1752_expected_skia.pdf.0.png
index 9cb41b8..6c129ef 100644
--- a/testing/resources/pixel/bug_1752_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_1752_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1922_expected.pdf.0.png b/testing/resources/pixel/bug_1922_expected.pdf.0.png
index 73057ac..2242e85 100644
--- a/testing/resources/pixel/bug_1922_expected.pdf.0.png
+++ b/testing/resources/pixel/bug_1922_expected.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_1922_expected_skia.pdf.0.png b/testing/resources/pixel/bug_1922_expected_skia.pdf.0.png
new file mode 100644
index 0000000..8b11ac6
--- /dev/null
+++ b/testing/resources/pixel/bug_1922_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_524043_1_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_1_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5bec703
--- /dev/null
+++ b/testing/resources/pixel/bug_524043_1_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_524043_2_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_2_expected_skia.pdf.0.png
new file mode 100644
index 0000000..376f391
--- /dev/null
+++ b/testing/resources/pixel/bug_524043_2_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_524043_3_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_3_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5bec703
--- /dev/null
+++ b/testing/resources/pixel/bug_524043_3_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_524043_4_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_4_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5bec703
--- /dev/null
+++ b/testing/resources/pixel/bug_524043_4_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_524043_5_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_5_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5bec703
--- /dev/null
+++ b/testing/resources/pixel/bug_524043_5_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_524043_7_expected_skia.pdf.0.png b/testing/resources/pixel/bug_524043_7_expected_skia.pdf.0.png
new file mode 100644
index 0000000..376f391
--- /dev/null
+++ b/testing/resources/pixel/bug_524043_7_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_528103_expected_skia.pdf.0.png b/testing/resources/pixel/bug_528103_expected_skia.pdf.0.png
new file mode 100644
index 0000000..6c4c4ac
--- /dev/null
+++ b/testing/resources/pixel/bug_528103_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_543018_1_expected_skia.pdf.0.png b/testing/resources/pixel/bug_543018_1_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5bec703
--- /dev/null
+++ b/testing/resources/pixel/bug_543018_1_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_543018_2_expected_skia.pdf.0.png b/testing/resources/pixel/bug_543018_2_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5bec703
--- /dev/null
+++ b/testing/resources/pixel/bug_543018_2_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_551258_1_expected_skia.pdf.0.png b/testing/resources/pixel/bug_551258_1_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5bec703
--- /dev/null
+++ b/testing/resources/pixel/bug_551258_1_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_665467_expected_skia.pdf.0.png b/testing/resources/pixel/bug_665467_expected_skia.pdf.0.png
index 2cd13ff..2e9c915 100644
--- a/testing/resources/pixel/bug_665467_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_665467_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png b/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png
index 25ad890..0cdd2cc 100644
--- a/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_725389_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_725389_expected_skia_mac.pdf.0.png b/testing/resources/pixel/bug_725389_expected_skia_mac.pdf.0.png
index 4a5a4b0..48a2087 100644
--- a/testing/resources/pixel/bug_725389_expected_skia_mac.pdf.0.png
+++ b/testing/resources/pixel/bug_725389_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_733528_expected_skia.pdf.0.png b/testing/resources/pixel/bug_733528_expected_skia.pdf.0.png
index 6dfa99d..7e13f31 100644
--- a/testing/resources/pixel/bug_733528_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_733528_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_736695_2_expected_skia.pdf.0.png b/testing/resources/pixel/bug_736695_2_expected_skia.pdf.0.png
index f6eeeff..3cddbc0 100644
--- a/testing/resources/pixel/bug_736695_2_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_736695_2_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_736695_3_expected_skia.pdf.0.png b/testing/resources/pixel/bug_736695_3_expected_skia.pdf.0.png
index 9618507..8f668d0 100644
--- a/testing/resources/pixel/bug_736695_3_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_736695_3_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_736703_expected_skia.pdf.0.png b/testing/resources/pixel/bug_736703_expected_skia.pdf.0.png
new file mode 100644
index 0000000..f850bff
--- /dev/null
+++ b/testing/resources/pixel/bug_736703_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_820345_expected_skia.pdf.0.png b/testing/resources/pixel/bug_820345_expected_skia.pdf.0.png
new file mode 100644
index 0000000..9813a96
--- /dev/null
+++ b/testing/resources/pixel/bug_820345_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_845697_expected_skia.pdf.0.png b/testing/resources/pixel/bug_845697_expected_skia.pdf.0.png
new file mode 100644
index 0000000..cf04e70
--- /dev/null
+++ b/testing/resources/pixel/bug_845697_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_846_expected_skia.pdf.0.png b/testing/resources/pixel/bug_846_expected_skia.pdf.0.png
index f7fa9ff..10cde92 100644
--- a/testing/resources/pixel/bug_846_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/bug_846_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_846_expected_skia_mac.pdf.0.png b/testing/resources/pixel/bug_846_expected_skia_mac.pdf.0.png
index 5635527..0f361df 100644
--- a/testing/resources/pixel/bug_846_expected_skia_mac.pdf.0.png
+++ b/testing/resources/pixel/bug_846_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_846_expected_skia_win.pdf.0.png b/testing/resources/pixel/bug_846_expected_skia_win.pdf.0.png
index 5635527..0f361df 100644
--- a/testing/resources/pixel/bug_846_expected_skia_win.pdf.0.png
+++ b/testing/resources/pixel/bug_846_expected_skia_win.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_909762_expected_skia_linux.pdf.0.png b/testing/resources/pixel/bug_909762_expected_skia_linux.pdf.0.png
new file mode 100644
index 0000000..2a06ee0
--- /dev/null
+++ b/testing/resources/pixel/bug_909762_expected_skia_linux.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_909762_expected_skia_win.pdf.0.png b/testing/resources/pixel/bug_909762_expected_skia_win.pdf.0.png
new file mode 100644
index 0000000..2a06ee0
--- /dev/null
+++ b/testing/resources/pixel/bug_909762_expected_skia_win.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_925736_expected_skia.pdf.0.png b/testing/resources/pixel/bug_925736_expected_skia.pdf.0.png
new file mode 100644
index 0000000..154cfee
--- /dev/null
+++ b/testing/resources/pixel/bug_925736_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/bug_984811_expected_skia.pdf.0.png b/testing/resources/pixel/bug_984811_expected_skia.pdf.0.png
new file mode 100644
index 0000000..9c713b5
--- /dev/null
+++ b/testing/resources/pixel/bug_984811_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/font_size_expected_skia.pdf.0.png b/testing/resources/pixel/font_size_expected_skia.pdf.0.png
new file mode 100644
index 0000000..2b638ab
--- /dev/null
+++ b/testing/resources/pixel/font_size_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/generation_numbers1_expected_skia.pdf.0.png b/testing/resources/pixel/generation_numbers1_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5e3dc05
--- /dev/null
+++ b/testing/resources/pixel/generation_numbers1_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/generation_numbers2_expected_skia.pdf.0.png b/testing/resources/pixel/generation_numbers2_expected_skia.pdf.0.png
new file mode 100644
index 0000000..5e3dc05
--- /dev/null
+++ b/testing/resources/pixel/generation_numbers2_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/password_expected_skia.pdf.0.png b/testing/resources/pixel/password_expected_skia.pdf.0.png
index 01b4b68..c5c0b23 100644
--- a/testing/resources/pixel/password_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/password_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/scrollable_widgets1_expected_skia.pdf.0.png b/testing/resources/pixel/scrollable_widgets1_expected_skia.pdf.0.png
index 36f9674..348c1a5 100644
--- a/testing/resources/pixel/scrollable_widgets1_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/scrollable_widgets1_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/scrollable_widgets2_expected_skia.pdf.0.png b/testing/resources/pixel/scrollable_widgets2_expected_skia.pdf.0.png
index 919a2de..79ca0f5 100644
--- a/testing/resources/pixel/scrollable_widgets2_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/scrollable_widgets2_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/text_form_custom_font_expected_skia.pdf.0.png b/testing/resources/pixel/text_form_custom_font_expected_skia.pdf.0.png
index 47582b6..5f898f8 100644
--- a/testing/resources/pixel/text_form_custom_font_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/text_form_custom_font_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/barcode_test_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/barcode_test_expected_skia.pdf.0.png
index 9b3f18c..e144c04 100644
--- a/testing/resources/pixel/xfa_specific/barcode_test_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/barcode_test_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia.pdf.0.png
index fa0be3b..da9e4b3 100644
--- a/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia_mac.pdf.0.png b/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia_mac.pdf.0.png
index 66dbce3..6adaba6 100644
--- a/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia_mac.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/dynamic_list_box_allow_multiple_selection_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/dynamic_password_field_background_fill_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/dynamic_password_field_background_fill_expected_skia.pdf.0.png
index 6b25767..b4b8c0d 100644
--- a/testing/resources/pixel/xfa_specific/dynamic_password_field_background_fill_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/dynamic_password_field_background_fill_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/dynamic_table_color_and_width_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/dynamic_table_color_and_width_expected_skia.pdf.0.png
index d443a35..ab5214f 100644
--- a/testing/resources/pixel/xfa_specific/dynamic_table_color_and_width_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/dynamic_table_color_and_width_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/resolve_nodes_0_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/resolve_nodes_0_expected_skia.pdf.0.png
index 008f192..d90125f 100644
--- a/testing/resources/pixel/xfa_specific/resolve_nodes_0_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/resolve_nodes_0_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/static_list_box_caption_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/static_list_box_caption_expected_skia.pdf.0.png
index 3beefe0..a2c47a3 100644
--- a/testing/resources/pixel/xfa_specific/static_list_box_caption_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/static_list_box_caption_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/static_list_box_caption_expected_skia_mac.pdf.0.png b/testing/resources/pixel/xfa_specific/static_list_box_caption_expected_skia_mac.pdf.0.png
new file mode 100644
index 0000000..2c2a5b0
--- /dev/null
+++ b/testing/resources/pixel/xfa_specific/static_list_box_caption_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.0.png
index 46880c5..0a9ff37 100644
--- a/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.1.png b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.1.png
index 2fc3677..fa7e97e 100644
--- a/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.1.png
+++ b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia.pdf.1.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia_mac.pdf.0.png b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia_mac.pdf.0.png
new file mode 100644
index 0000000..29d3b09
--- /dev/null
+++ b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia_mac.pdf.1.png b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia_mac.pdf.1.png
new file mode 100644
index 0000000..77b3a7b
--- /dev/null
+++ b/testing/resources/pixel/xfa_specific/static_password_field_rotate_expected_skia_mac.pdf.1.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.0.png b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.0.png
index 74bcc2a..ffc1b80 100644
--- a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.1.png b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.1.png
index 3cfdf49..13174e5 100644
--- a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.1.png
+++ b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia.pdf.1.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.0.png b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.0.png
index 3a88b28..52e6d96 100644
--- a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.1.png b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.1.png
index 4ca363b..e7fb0f3 100644
--- a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.1.png
+++ b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_mac.pdf.1.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.0.png b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.0.png
index 0f09ccf..a974ba2 100644
--- a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.0.png
+++ b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.0.png
Binary files differ
diff --git a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.1.png b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.1.png
index 5c292be..605ed4c 100644
--- a/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.1.png
+++ b/testing/resources/pixel/xfa_specific/xfa_node_caption_expected_skia_win.pdf.1.png
Binary files differ
diff --git a/xfa/fde/cfde_textout_unittest.cpp b/xfa/fde/cfde_textout_unittest.cpp
index 8babdfd..0067302 100644
--- a/xfa/fde/cfde_textout_unittest.cpp
+++ b/xfa/fde/cfde_textout_unittest.cpp
@@ -86,7 +86,14 @@
 
 TEST_F(CFDETextOutTest, DrawLogicTextBasic) {
   text_out().DrawLogicText(device(), L"foo", CFX_RectF(0, 0, 2100, 100));
-  EXPECT_STREQ("b26f1c171fcdbf185823364185adacf0", GetBitmapChecksum().c_str());
+  const char* checksum = []() {
+#if BUILDFLAG(IS_WIN)
+    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
+      return "76fd535f7d490d963598474494d0701e";
+#endif
+    return "b26f1c171fcdbf185823364185adacf0";
+  }();
+  EXPECT_STREQ(checksum, GetBitmapChecksum().c_str());
 }
 
 TEST_F(CFDETextOutTest, DrawLogicTextEmptyRect) {