Avoid an extra bitmap copy in CFX_SkiaDeviceDriver

The 24-bit to 32-bit bitmap conversion is currently CFX_DIBitmap::Copy()
plus ConvertFormat(), which writes into the CFX_DIBitmap twice. Instead,
use TransferBitmap() to only write once.

Change-Id: Ie086b9d21271d5dbe076cc4889280cfd638f93e0
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/122753
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Tom Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 911684a..77dc1a2 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -715,11 +715,15 @@
     // Save the input bitmap as `m_pOriginalBitmap` and save its 32 bpp
     // equivalent at `m_pBitmap` for Skia's internal process.
     m_pOriginalBitmap = std::move(m_pBitmap);
+    const int width = m_pOriginalBitmap->GetWidth();
+    const int height = m_pOriginalBitmap->GetHeight();
+
     m_pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
     // TODO(crbug.com/42271020): Consider adding support for
     // `FXDIB_Format::kArgbPremul`
-    if (!m_pBitmap->Copy(m_pOriginalBitmap) ||
-        !m_pBitmap->ConvertFormat(FXDIB_Format::kArgb)) {
+    if (!m_pBitmap->Create(width, height, FXDIB_Format::kArgb) ||
+        !m_pBitmap->TransferBitmap(width, height, m_pOriginalBitmap,
+                                   /*src_left=*/0, /*src_top=*/0)) {
       // Skip creating SkCanvas if the 32-bpp bitmap creation fails.
       // CFX_SkiaDeviceDriver::Create() will check for the missing `m_pCanvas`
       // and not use `this`.