diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 8665610..9047e0d 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -12,6 +12,7 @@
 #include <utility>
 
 #include "build/build_config.h"
+#include "core/fxcrt/fx_2d_size.h"
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxge/cfx_cliprgn.h"
 #include "core/fxge/cfx_defaultrenderdevice.h"
@@ -127,12 +128,6 @@
   }
 }
 
-size_t GetSizeOrDie(int m1, int m2) {
-  FX_SAFE_SIZE_T result = m1;
-  result *= m2;
-  return result.ValueOrDie();
-}
-
 void RgbByteOrderTransferBitmap(const RetainPtr<CFX_DIBitmap>& pBitmap,
                                 int width,
                                 int height,
@@ -155,13 +150,13 @@
   const FXDIB_Format src_format = pSrcBitmap->GetFormat();
   const int dest_pitch = pBitmap->GetPitch();
 
-  const size_t dest_x_offset = GetSizeOrDie(dest_left, Bpp);
-  const size_t dest_y_offset = GetSizeOrDie(dest_top, dest_pitch);
+  const size_t dest_x_offset = Fx2DSizeOrDie(dest_left, Bpp);
+  const size_t dest_y_offset = Fx2DSizeOrDie(dest_top, dest_pitch);
 
   uint8_t* dest_buf =
       pBitmap->GetBuffer().subspan(dest_y_offset).subspan(dest_x_offset).data();
   if (dest_format == src_format) {
-    const size_t src_x_offset = GetSizeOrDie(src_left, Bpp);
+    const size_t src_x_offset = Fx2DSizeOrDie(src_left, Bpp);
     for (int row = 0; row < height; row++) {
       uint8_t* dest_scan = dest_buf;
       const uint8_t* src_scan =
@@ -188,7 +183,7 @@
 
   if (dest_format == FXDIB_Format::kRgb) {
     DCHECK_EQ(src_format, FXDIB_Format::kRgb32);
-    const size_t src_x_offset = GetSizeOrDie(src_left, 4);
+    const size_t src_x_offset = Fx2DSizeOrDie(src_left, 4);
     for (int row = 0; row < height; row++) {
       uint8_t* dest_scan = dest_buf;
       const uint8_t* src_scan =
@@ -207,7 +202,7 @@
   DCHECK(dest_format == FXDIB_Format::kArgb ||
          dest_format == FXDIB_Format::kRgb32);
   if (src_format == FXDIB_Format::kRgb) {
-    const size_t src_x_offset = GetSizeOrDie(src_left, 3);
+    const size_t src_x_offset = Fx2DSizeOrDie(src_left, 3);
     for (int row = 0; row < height; row++) {
       uint8_t* dest_scan = dest_buf;
       const uint8_t* src_scan =
@@ -225,7 +220,7 @@
   if (src_format != FXDIB_Format::kRgb32)
     return;
   DCHECK_EQ(dest_format, FXDIB_Format::kArgb);
-  const size_t src_x_offset = GetSizeOrDie(src_left, 4);
+  const size_t src_x_offset = Fx2DSizeOrDie(src_left, 4);
   for (int row = 0; row < height; row++) {
     uint8_t* dest_scan = dest_buf;
     const uint8_t* src_scan =
