Remove unnecessary Clear(0) from CPDF_RenderStatus

Removes unnecessary CFX_DIBitmap::Clear(0) calls from CPDF_RenderStatus,
since a newly-created CFX_DIBitmap already starts cleared to 0. This
holds for all pixel formats except FXDIB_Format::kRgb32 on Skia, which
clears alpha to 0xFF (fully opaque).

This seems to have a particularly large impact on system time on Linux,
possibly because the kernel doesn't need to zero unwritten memory pages.

Bug: pdfium:2016
Change-Id: I73e2dd0adfd45989bbd17e511320703bceab6ae2
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/105390
Reviewed-by: Nigi <nigi@chromium.org>
Auto-Submit: K. Moon <kmoon@chromium.org>
Commit-Queue: Nigi <nigi@chromium.org>
Commit-Queue: K. Moon <kmoon@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 4bd8248..dd0e228 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -627,9 +627,6 @@
   if (!bitmap_device.Create(width, height, FXDIB_Format::kArgb, backdrop))
     return true;
 
-  RetainPtr<CFX_DIBitmap> bitmap = bitmap_device.GetBitmap();
-  bitmap->Clear(0);
-
   CFX_Matrix new_matrix = mtObj2Device;
   new_matrix.Translate(-rect.left, -rect.top);
 
@@ -639,7 +636,6 @@
     if (!pTextMask->Create(width, height, FXDIB_Format::k8bppMask))
       return true;
 
-    pTextMask->Clear(0);
     CFX_DefaultRenderDevice text_device;
     text_device.Attach(pTextMask);
     for (size_t i = 0; i < pPageObj->m_ClipPath.GetTextCount(); ++i) {
@@ -668,7 +664,7 @@
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     // Safe because `CFX_SkiaDeviceDriver` always uses pre-multiplied alpha.
     // TODO(crbug.com/pdfium/2011): Remove the need for this.
-    bitmap->ForcePreMultiply();
+    bitmap_device.GetBitmap()->ForcePreMultiply();
   }
 #endif  // _SKIA_SUPPORT
   m_bStopped = bitmap_render.m_bStopped;
@@ -691,8 +687,8 @@
   if (pPageObj->IsForm()) {
     transparency.SetGroup();
   }
-  CompositeDIBitmap(bitmap, rect.left, rect.top, 0, 255, blend_type,
-                    transparency);
+  CompositeDIBitmap(bitmap_device.GetBitmap(), rect.left, rect.top, 0, 255,
+                    blend_type, transparency);
   return true;
 }
 
@@ -949,7 +945,6 @@
                                   FXDIB_Format::kArgb, nullptr)) {
           return true;
         }
-        bitmap_device.GetBitmap()->Clear(0);
         CPDF_RenderStatus status(m_pContext, &bitmap_device);
         status.SetOptions(options);
         status.SetTransparency(pForm->GetTransparency());
@@ -1015,7 +1010,6 @@
   if (!pBitmap->Create(rect.Width(), rect.Height(), FXDIB_Format::k8bppMask))
     return true;
 
-  pBitmap->Clear(0);
   for (const TextGlyphPos& glyph : glyphs) {
     if (!glyph.m_pGlyph || !glyph.m_pGlyph->GetBitmap()->IsMaskFormat())
       continue;