Remove CFX_SkiaDeviceDriver::Flush()

Removes CFX_SkiaDeviceDriver::Flush() and related APIs, as this API now
does nothing.

Calls of the form CFX_RenderDevice::Flush(true) technically still had an
effect, as they release the underlying RenderDeviceDriverIface instance.
Other than the flush behavior, however, this is just an optimization to
release memory a little earlier.

The same effect can be accomplished by destructing the CFX_RenderDevice
itself, but the extra complexity isn't necessary. If we later find cases
where this would be useful, we can just move CFX_RenderDevice into a
narrower scope.

Bug: pdfium:1963
Change-Id: I0c999d8d4f200d0987c2f09daaeb3d1e69a27063
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/104530
Reviewed-by: 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 ece6c2d..5475729 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -54,7 +54,6 @@
 #include "core/fxcrt/autorestorer.h"
 #include "core/fxcrt/data_vector.h"
 #include "core/fxcrt/fx_2d_size.h"
-#include "core/fxcrt/fx_memory.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/span_util.h"
@@ -161,28 +160,6 @@
   return pChar && (!pChar->colored() || MissingStrokeColor(pColorState));
 }
 
-#ifdef _SKIA_SUPPORT_
-class ScopedSkiaDeviceFlush {
- public:
-  FX_STACK_ALLOCATED();
-
-  explicit ScopedSkiaDeviceFlush(CFX_RenderDevice* pDevice)
-      : m_pDevice(pDevice) {}
-
-  ScopedSkiaDeviceFlush(const ScopedSkiaDeviceFlush&) = delete;
-  ScopedSkiaDeviceFlush& operator=(const ScopedSkiaDeviceFlush&) = delete;
-
-  ~ScopedSkiaDeviceFlush() {
-    if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-      m_pDevice->Flush(/*release=*/false);
-    }
-  }
-
- private:
-  UnownedPtr<CFX_RenderDevice> const m_pDevice;
-};
-#endif
-
 }  // namespace
 
 CPDF_RenderStatus::CPDF_RenderStatus(CPDF_RenderContext* pContext,
@@ -716,7 +693,6 @@
   bitmap_render.ProcessObjectNoClip(pPageObj, new_matrix);
 #ifdef _SKIA_SUPPORT_
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-    bitmap_device.Flush(true);
     bitmap->UnPreMultiply();
   }
 #endif  // _SKIA_SUPPORT_
@@ -1193,9 +1169,6 @@
     return;
 
   CFX_RenderDevice::StateRestorer restorer(m_pDevice);
-#ifdef _SKIA_SUPPORT_
-  ScopedSkiaDeviceFlush scoped_skia_device_flush(m_pDevice);
-#endif
   if (!ClipPattern(pPageObj, mtObj2Device, stroke))
     return;
 
@@ -1440,11 +1413,6 @@
   status.SetDropObjects(m_bDropObjects);
   status.Initialize(nullptr, nullptr);
   status.RenderObjectList(&form, matrix);
-#ifdef _SKIA_SUPPORT_
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-    bitmap_device.Flush(/*release=*/true);
-  }
-#endif  // _SKIA_SUPPORT_
 
   auto pMask = pdfium::MakeRetain<CFX_DIBitmap>();
   if (!pMask->Create(width, height, FXDIB_Format::k8bppMask))
diff --git a/core/fxge/cfx_defaultrenderdevice.cpp b/core/fxge/cfx_defaultrenderdevice.cpp
index fc61b58..27bae45 100644
--- a/core/fxge/cfx_defaultrenderdevice.cpp
+++ b/core/fxge/cfx_defaultrenderdevice.cpp
@@ -37,12 +37,7 @@
 
 CFX_DefaultRenderDevice::CFX_DefaultRenderDevice() = default;
 
-CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() {
-#ifdef _SKIA_SUPPORT_
-  if (SkiaIsDefaultRenderer())
-    Flush(true);
-#endif
-}
+CFX_DefaultRenderDevice::~CFX_DefaultRenderDevice() = default;
 
 bool CFX_DefaultRenderDevice::Attach(RetainPtr<CFX_DIBitmap> pBitmap) {
   return AttachWithRgbByteOrder(std::move(pBitmap), false);
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index d96021c..59fc820 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -487,10 +487,6 @@
 
 CFX_RenderDevice::~CFX_RenderDevice() {
   RestoreState(false);
-#ifdef _SKIA_SUPPORT_
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    Flush(true);
-#endif
 }
 
 // static
@@ -501,15 +497,6 @@
   return CFX_Matrix(width, 0, 0, -height, left, top + height);
 }
 
-#ifdef _SKIA_SUPPORT_
-void CFX_RenderDevice::Flush(bool release) {
-  if (release)
-    m_pDeviceDriver.reset();
-  else
-    m_pDeviceDriver->Flush();
-}
-#endif
-
 void CFX_RenderDevice::SetDeviceDriver(
     std::unique_ptr<RenderDeviceDriverIface> pDriver) {
   DCHECK(pDriver);
@@ -801,10 +788,6 @@
                                                  fill_options, blend_type)) {
     return false;
   }
-#ifdef _SKIA_SUPPORT_
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    bitmap_device.GetDeviceDriver()->Flush();
-#endif
   FX_RECT src_rect(0, 0, rect.Width(), rect.Height());
   return m_pDeviceDriver->SetDIBits(bitmap, 0, src_rect, rect.left, rect.top,
                                     BlendMode::kNormal);
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index 909cbb2..39c0272 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -217,9 +217,6 @@
                                int bitmap_alpha,
                                BlendMode blend_type);
 #endif
-#ifdef _SKIA_SUPPORT_
-  void Flush(bool release);
-#endif
 
  protected:
   CFX_RenderDevice();
diff --git a/core/fxge/renderdevicedriver_iface.cpp b/core/fxge/renderdevicedriver_iface.cpp
index 26911a6..b549ea2 100644
--- a/core/fxge/renderdevicedriver_iface.cpp
+++ b/core/fxge/renderdevicedriver_iface.cpp
@@ -84,7 +84,3 @@
 
 void RenderDeviceDriverIface::SetGroupKnockout(bool group_knockout) {}
 #endif
-
-#ifdef _SKIA_SUPPORT_
-void RenderDeviceDriverIface::Flush() {}
-#endif
diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h
index c22fe54..8c5fb35 100644
--- a/core/fxge/renderdevicedriver_iface.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -117,9 +117,6 @@
                                BlendMode blend_type);
   virtual void SetGroupKnockout(bool group_knockout);
 #endif
-#ifdef _SKIA_SUPPORT_
-  virtual void Flush();
-#endif
 };
 
 #endif  // CORE_FXGE_RENDERDEVICEDRIVER_IFACE_H_
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 06715aa..c155561 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -1334,8 +1334,6 @@
 }
 
 CFX_SkiaDeviceDriver::~CFX_SkiaDeviceDriver() {
-  Flush();
-
   // Convert and transfer the internal processed result to the original 24 bpp
   // bitmap provided by the render device.
   if (m_pOriginalBitmap && m_pBitmap->ConvertFormat(FXDIB_Format::kRgb)) {
@@ -1353,9 +1351,6 @@
     delete m_pCanvas;
 }
 
-// TODO(crbug.com/pdfium/1963): Remove this API.
-void CFX_SkiaDeviceDriver::Flush() {}
-
 bool CFX_SkiaDeviceDriver::DrawDeviceText(
     pdfium::span<const TextCharPos> pCharPos,
     CFX_Font* pFont,
@@ -2043,12 +2038,6 @@
 }
 
 void CFX_SkiaDeviceDriver::SetGroupKnockout(bool group_knockout) {
-  if (group_knockout == m_bGroupKnockout)
-    return;
-
-  // Make sure to flush cached commands before changing `m_bGroupKnockout`
-  // status.
-  Flush();
   m_bGroupKnockout = group_knockout;
 }
 
@@ -2183,8 +2172,6 @@
     int top,
     int bitmap_alpha,
     BlendMode blend_type) {
-  // Finish painting before drawing masks.
-  Flush(false);
   return static_cast<CFX_SkiaDeviceDriver*>(GetDeviceDriver())
       ->SetBitsWithMask(pBitmap, pMask, left, top, bitmap_alpha, blend_type);
 }
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index 5e70b7a..724c69a 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -138,7 +138,6 @@
   virtual uint8_t* GetBuffer() const;
 
   void Clear(uint32_t color);
-  void Flush() override;
   SkCanvas* SkiaCanvas() { return m_pCanvas; }
   void DebugVerifyBitmapIsPreMultiplied() const;
   void Dump() const;
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index 9b4005a..517d863 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -137,7 +137,6 @@
   auto driver = CFX_SkiaDeviceDriver::Create(pBitmap, false, nullptr, false);
   ASSERT_TRUE(driver);
   (*Test)(driver.get(), state);
-  driver->Flush();
   uint32_t pixel = pBitmap->GetPixel(0, 0);
   EXPECT_EQ(state.m_pixel, pixel);
 }
diff --git a/fpdfsdk/fpdf_progressive.cpp b/fpdfsdk/fpdf_progressive.cpp
index e5ad3d9..0cf7cf7 100644
--- a/fpdfsdk/fpdf_progressive.cpp
+++ b/fpdfsdk/fpdf_progressive.cpp
@@ -72,7 +72,6 @@
 
 #ifdef _SKIA_SUPPORT_
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-    pDevice->Flush(false);
     pBitmap->UnPreMultiply();
   }
 #endif  // _SKIA_SUPPORT_
@@ -116,9 +115,7 @@
 
 #ifdef _SKIA_SUPPORT_
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-    CFX_RenderDevice* pDevice = pContext->m_pDevice.get();
-    pDevice->Flush(false);
-    pDevice->GetBitmap()->UnPreMultiply();
+    pContext->m_pDevice->GetBitmap()->UnPreMultiply();
   }
 #endif  // _SKIA_SUPPORT_
   return ToFPDFStatus(pContext->m_pRenderer->GetStatus());
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 00293a8..723af28 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -682,7 +682,6 @@
 
 #ifdef _SKIA_SUPPORT_
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-    pDevice->Flush(true);
     pBitmap->UnPreMultiply();
   }
 #endif
diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index 1f8226e..af6ce53 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -26,10 +26,6 @@
 #include "xfa/fgas/font/cfgas_gefont.h"
 #include "xfa/fgas/layout/cfgas_txtbreak.h"
 
-#ifdef _SKIA_SUPPORT_
-#include "core/fxge/cfx_defaultrenderdevice.h"
-#endif
-
 namespace {
 
 bool TextAlignmentVerticallyCentered(const FDE_TextAlignment align) {
@@ -122,10 +118,6 @@
     bRet = device->DrawNormalText(pdfium::make_span(pCurCP, iCurCount), font,
                                   -fFontSize, matrix, color, kOptions);
   }
-#ifdef _SKIA_SUPPORT_
-  if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer())
-    device->Flush(false);
-#endif
 
   return bRet;
 }