diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index eb0df57..6e4994c 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -1001,14 +1001,14 @@
 }
 
 #if defined(PDF_USE_SKIA)
-bool CFX_RenderDevice::SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
-                                       const RetainPtr<CFX_DIBBase>& pMask,
+bool CFX_RenderDevice::SetBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
+                                       RetainPtr<const CFX_DIBBase> mask,
                                        int left,
                                        int top,
                                        float alpha,
                                        BlendMode blend_type) {
-  return m_pDeviceDriver->SetBitsWithMask(pBitmap, pMask, left, top, alpha,
-                                          blend_type);
+  return m_pDeviceDriver->SetBitsWithMask(std::move(bitmap), std::move(mask),
+                                          left, top, alpha, blend_type);
 }
 
 bool CFX_RenderDevice::SyncInternalBitmaps() {
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index 6ded93f..14ae479 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -218,8 +218,8 @@
   bool MultiplyAlphaMask(const RetainPtr<const CFX_DIBBase>& mask);
 
 #if defined(PDF_USE_SKIA)
-  bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
-                       const RetainPtr<CFX_DIBBase>& pMask,
+  bool SetBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
+                       RetainPtr<const CFX_DIBBase> mask,
                        int left,
                        int top,
                        float alpha,
diff --git a/core/fxge/renderdevicedriver_iface.cpp b/core/fxge/renderdevicedriver_iface.cpp
index faff0b4..e9db61a 100644
--- a/core/fxge/renderdevicedriver_iface.cpp
+++ b/core/fxge/renderdevicedriver_iface.cpp
@@ -73,8 +73,8 @@
 
 #if defined(PDF_USE_SKIA)
 bool RenderDeviceDriverIface::SetBitsWithMask(
-    const RetainPtr<CFX_DIBBase>& pBitmap,
-    const RetainPtr<CFX_DIBBase>& pMask,
+    RetainPtr<const CFX_DIBBase> bitmap,
+    RetainPtr<const CFX_DIBBase> mask,
     int left,
     int top,
     float alpha,
diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h
index ffb68a3..206ad43 100644
--- a/core/fxge/renderdevicedriver_iface.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -109,8 +109,8 @@
                            int alpha,
                            bool bAlphaMode);
 #if defined(PDF_USE_SKIA)
-  virtual bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
-                               const RetainPtr<CFX_DIBBase>& pMask,
+  virtual bool SetBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
+                               RetainPtr<const CFX_DIBBase> mask,
                                int left,
                                int top,
                                float alpha,
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index b0b211e..2c39b5c 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -1485,21 +1485,20 @@
   return m_nFormat == Format::kPreMultiplied;
 }
 
-bool CFX_SkiaDeviceDriver::DrawBitsWithMask(
-    const RetainPtr<CFX_DIBBase>& pSource,
-    const RetainPtr<CFX_DIBBase>& pMask,
-    float alpha,
-    const CFX_Matrix& matrix,
-    BlendMode blend_type) {
+bool CFX_SkiaDeviceDriver::DrawBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
+                                            RetainPtr<const CFX_DIBBase> mask,
+                                            float alpha,
+                                            const CFX_Matrix& matrix,
+                                            BlendMode blend_type) {
   DebugValidate(m_pBitmap);
 
-  sk_sp<SkImage> skia_source = pSource->RealizeSkImage();
+  sk_sp<SkImage> skia_source = bitmap->RealizeSkImage();
   if (!skia_source) {
     return false;
   }
 
-  DCHECK(pMask->IsMaskFormat());
-  sk_sp<SkImage> skia_mask = pMask->RealizeSkImage();
+  DCHECK(mask->IsMaskFormat());
+  sk_sp<SkImage> skia_mask = mask->RealizeSkImage();
   if (!skia_mask) {
     return false;
   }
@@ -1508,13 +1507,13 @@
   {
     SkAutoCanvasRestore scoped_save_restore(m_pCanvas, /*doSave=*/true);
 
-    const int src_width = pSource->GetWidth();
-    const int src_height = pSource->GetHeight();
+    const int src_width = bitmap->GetWidth();
+    const int src_height = bitmap->GetHeight();
     SkMatrix skMatrix;
     SetBitmapMatrix(matrix, src_width, src_height, &skMatrix);
     m_pCanvas->concat(skMatrix);
     SkPaint paint;
-    SetBitmapPaintForMerge(pSource->IsMaskFormat(), !m_FillOptions.aliased_path,
+    SetBitmapPaintForMerge(bitmap->IsMaskFormat(), !m_FillOptions.aliased_path,
                            alpha, blend_type, &paint);
     sk_sp<SkShader> source_shader = skia_source->makeShader(
         SkTileMode::kClamp, SkTileMode::kClamp, SkSamplingOptions());
@@ -1531,20 +1530,20 @@
   return true;
 }
 
-bool CFX_SkiaDeviceDriver::SetBitsWithMask(
-    const RetainPtr<CFX_DIBBase>& pBitmap,
-    const RetainPtr<CFX_DIBBase>& pMask,
-    int dest_left,
-    int dest_top,
-    float alpha,
-    BlendMode blend_type) {
+bool CFX_SkiaDeviceDriver::SetBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
+                                           RetainPtr<const CFX_DIBBase> mask,
+                                           int dest_left,
+                                           int dest_top,
+                                           float alpha,
+                                           BlendMode blend_type) {
   if (m_pBitmap->GetBuffer().empty()) {
     return true;
   }
 
   CFX_Matrix matrix = CFX_RenderDevice::GetFlipMatrix(
-      pBitmap->GetWidth(), pBitmap->GetHeight(), dest_left, dest_top);
-  return DrawBitsWithMask(pBitmap, pMask, alpha, matrix, blend_type);
+      bitmap->GetWidth(), bitmap->GetHeight(), dest_left, dest_top);
+  return DrawBitsWithMask(std::move(bitmap), std::move(mask), alpha, matrix,
+                          blend_type);
 }
 
 void CFX_SkiaDeviceDriver::SetGroupKnockout(bool group_knockout) {
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index 6ce4bd8..fbecb16 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -101,8 +101,8 @@
                  int dest_left,
                  int dest_top,
                  BlendMode blend_type) override;
-  bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
-                       const RetainPtr<CFX_DIBBase>& pMask,
+  bool SetBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
+                       RetainPtr<const CFX_DIBBase> mask,
                        int dest_left,
                        int dest_top,
                        float alpha,
@@ -131,8 +131,8 @@
   bool ContinueDIBits(CFX_ImageRenderer* handle,
                       PauseIndicatorIface* pPause) override;
 
-  bool DrawBitsWithMask(const RetainPtr<CFX_DIBBase>& pSource,
-                        const RetainPtr<CFX_DIBBase>& pMask,
+  bool DrawBitsWithMask(RetainPtr<const CFX_DIBBase> bitmap,
+                        RetainPtr<const CFX_DIBBase> mask,
                         float alpha,
                         const CFX_Matrix& matrix,
                         BlendMode blend_type);
