Move Fx2DSizeOrDie() to a new fx_2d_size.h header file.
Then make it a template function and try to get inlining.
Change-Id: I3ba409578b6a6a966d6f6446b6794ef2d01b8e7f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/101691
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index 8104ef3..0b550f5 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -33,7 +33,7 @@
#include "core/fpdfapi/parser/fpdf_parser_utility.h"
#include "core/fxcodec/fx_codec.h"
#include "core/fxcrt/data_vector.h"
-#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_2d_size.h"
#include "core/fxcrt/fx_memory_wrappers.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/maybe_owned.h"
diff --git a/core/fpdfapi/page/cpdf_expintfunc.cpp b/core/fpdfapi/page/cpdf_expintfunc.cpp
index b12cf43..a8de8b9 100644
--- a/core/fpdfapi/page/cpdf_expintfunc.cpp
+++ b/core/fpdfapi/page/cpdf_expintfunc.cpp
@@ -12,7 +12,7 @@
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fxcrt/data_vector.h"
-#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_2d_size.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/stl_util.h"
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index e2b3fa2..c9be231 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -27,7 +27,7 @@
#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fxcodec/jpeg/jpegmodule.h"
#include "core/fxcrt/data_vector.h"
-#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_2d_size.h"
#include "core/fxcrt/fx_memory_wrappers.h"
#include "core/fxcrt/fx_stream.h"
#include "core/fxcrt/span_util.h"
diff --git a/core/fpdfapi/page/cpdf_indexedcs.cpp b/core/fpdfapi/page/cpdf_indexedcs.cpp
index 32a36bd..85f694f 100644
--- a/core/fpdfapi/page/cpdf_indexedcs.cpp
+++ b/core/fpdfapi/page/cpdf_indexedcs.cpp
@@ -16,7 +16,7 @@
#include "core/fpdfapi/parser/cpdf_stream_acc.h"
#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fxcrt/data_vector.h"
-#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_2d_size.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/retain_ptr.h"
#include "third_party/base/check_op.h"
diff --git a/core/fxcodec/fax/faxmodule.cpp b/core/fxcodec/fax/faxmodule.cpp
index 5ec3725..075c72d 100644
--- a/core/fxcodec/fax/faxmodule.cpp
+++ b/core/fxcodec/fax/faxmodule.cpp
@@ -17,6 +17,7 @@
#include "core/fxcodec/scanlinedecoder.h"
#include "core/fxcrt/binary_buffer.h"
#include "core/fxcrt/data_vector.h"
+#include "core/fxcrt/fx_2d_size.h"
#include "core/fxcrt/fx_memory.h"
#include "core/fxge/calculate_pitch.h"
#include "third_party/base/check.h"
diff --git a/core/fxcrt/BUILD.gn b/core/fxcrt/BUILD.gn
index 923afe2..9fab012 100644
--- a/core/fxcrt/BUILD.gn
+++ b/core/fxcrt/BUILD.gn
@@ -44,6 +44,7 @@
"fixed_try_alloc_zeroed_data_vector.h",
"fixed_uninit_data_vector.h",
"fixed_zeroed_data_vector.h",
+ "fx_2d_size.h",
"fx_bidi.cpp",
"fx_bidi.h",
"fx_codepage.cpp",
diff --git a/core/fxcrt/fx_2d_size.h b/core/fxcrt/fx_2d_size.h
new file mode 100644
index 0000000..9b7f5d1
--- /dev/null
+++ b/core/fxcrt/fx_2d_size.h
@@ -0,0 +1,17 @@
+// Copyright 2022 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CORE_FXCRT_FX_2D_SIZE_H_
+#define CORE_FXCRT_FX_2D_SIZE_H_
+
+#include "core/fxcrt/fx_safe_types.h"
+
+template <typename T, typename U>
+size_t Fx2DSizeOrDie(const T& w, const U& h) {
+ FX_SAFE_SIZE_T safe_size = w;
+ safe_size *= h;
+ return safe_size.ValueOrDie();
+}
+
+#endif // CORE_FXCRT_FX_2D_SIZE_H_
diff --git a/core/fxcrt/fx_memory.cpp b/core/fxcrt/fx_memory.cpp
index 5c28349..7b6aa34 100644
--- a/core/fxcrt/fx_memory.cpp
+++ b/core/fxcrt/fx_memory.cpp
@@ -8,12 +8,11 @@
#include <stdlib.h> // For abort().
+#include <iterator>
#include <limits>
#include "build/build_config.h"
-#include "core/fxcrt/fx_safe_types.h"
#include "third_party/base/debug/alias.h"
-#include "third_party/base/numerics/safe_math.h"
#if BUILDFLAG(IS_WIN)
#include <windows.h>
@@ -102,9 +101,3 @@
}
} // namespace internal
} // namespace pdfium
-
-size_t Fx2DSizeOrDie(size_t w, size_t h) {
- pdfium::base::CheckedNumeric<size_t> safe_size = w;
- safe_size *= h;
- return safe_size.ValueOrDie();
-}
diff --git a/core/fxcrt/fx_memory.h b/core/fxcrt/fx_memory.h
index 9022048..8157eb2 100644
--- a/core/fxcrt/fx_memory.h
+++ b/core/fxcrt/fx_memory.h
@@ -106,8 +106,6 @@
return (size + (N - 1)) & ~(N - 1);
}
-size_t Fx2DSizeOrDie(size_t w, size_t h);
-
#endif // __cplusplus
#endif // CORE_FXCRT_FX_MEMORY_H_
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index f9a2f78..4187348 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -25,7 +25,7 @@
#include "core/fpdfapi/parser/cpdf_stream_acc.h"
#include "core/fxcrt/cfx_bitstream.h"
#include "core/fxcrt/data_vector.h"
-#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_2d_size.h"
#include "core/fxcrt/fx_memory_wrappers.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/stl_util.h"
diff --git a/fxbarcode/datamatrix/BC_DefaultPlacement.cpp b/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
index be97e69..4e772dd 100644
--- a/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
+++ b/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
@@ -27,7 +27,7 @@
#include <utility>
#include "core/fxcrt/data_vector.h"
-#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_2d_size.h"
#include "fxbarcode/datamatrix/BC_Encoder.h"
#include "third_party/base/check_op.h"
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
index 864e20a..6be75ad 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
@@ -24,8 +24,8 @@
#include <iterator>
+#include "core/fxcrt/fx_2d_size.h"
#include "core/fxcrt/fx_extension.h"
-#include "core/fxcrt/fx_memory.h"
#include "fxbarcode/BC_Writer.h"
#include "fxbarcode/common/BC_CommonBitMatrix.h"
#include "fxbarcode/oned/BC_OneDimWriter.h"