Pass retained arguments to CFX_Face::New() Alas, callers have to copy and remain unadjusted, but it is the same work since we move in the new code. Bug: pdfium:1843 Change-Id: I82822099d3baaea68c36ab5e6e01a3babb7363e5 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/95631 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp index d838a4b..50e0bc3 100644 --- a/core/fxge/cfx_face.cpp +++ b/core/fxge/cfx_face.cpp
@@ -4,12 +4,14 @@ #include "core/fxge/cfx_face.h" +#include <utility> + #include "third_party/base/check.h" #include "third_party/base/numerics/safe_conversions.h" // static RetainPtr<CFX_Face> CFX_Face::New(FT_Library library, - const RetainPtr<Retainable>& pDesc, + RetainPtr<Retainable> pDesc, pdfium::span<const FT_Byte> data, FT_Long face_index) { FXFT_FaceRec* pRec = nullptr; @@ -18,7 +20,8 @@ face_index, &pRec) != 0) { return nullptr; } - return pdfium::WrapRetain(new CFX_Face(pRec, pDesc)); + // Private ctor. + return pdfium::WrapRetain(new CFX_Face(pRec, std::move(pDesc))); } // static @@ -29,11 +32,12 @@ if (FT_Open_Face(library, args, face_index, &pRec) != 0) return nullptr; + // Private ctor. return pdfium::WrapRetain(new CFX_Face(pRec, nullptr)); } -CFX_Face::CFX_Face(FXFT_FaceRec* rec, const RetainPtr<Retainable>& pDesc) - : m_pRec(rec), m_pDesc(pDesc) { +CFX_Face::CFX_Face(FXFT_FaceRec* rec, RetainPtr<Retainable> pDesc) + : m_pRec(rec), m_pDesc(std::move(pDesc)) { DCHECK(m_pRec); }
diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h index a4f527f..4ab5c78 100644 --- a/core/fxge/cfx_face.h +++ b/core/fxge/cfx_face.h
@@ -13,7 +13,7 @@ class CFX_Face final : public Retainable, public Observable { public: static RetainPtr<CFX_Face> New(FT_Library library, - const RetainPtr<Retainable>& pDesc, + RetainPtr<Retainable> pDesc, pdfium::span<const FT_Byte> data, FT_Long face_index); @@ -26,7 +26,7 @@ FXFT_FaceRec* GetRec() { return m_pRec.get(); } private: - CFX_Face(FXFT_FaceRec* pRec, const RetainPtr<Retainable>& pDesc); + CFX_Face(FXFT_FaceRec* pRec, RetainPtr<Retainable> pDesc); ScopedFXFTFaceRec const m_pRec; RetainPtr<Retainable> const m_pDesc;
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp index 9b2b6f5..eacffc2 100644 --- a/core/fxge/cfx_fontmgr.cpp +++ b/core/fxge/cfx_fontmgr.cpp
@@ -116,11 +116,12 @@ return pNewDesc; } -RetainPtr<CFX_Face> CFX_FontMgr::NewFixedFace(const RetainPtr<FontDesc>& pDesc, +RetainPtr<CFX_Face> CFX_FontMgr::NewFixedFace(RetainPtr<FontDesc> pDesc, pdfium::span<const uint8_t> span, size_t face_index) { - RetainPtr<CFX_Face> face = CFX_Face::New(m_FTLibrary.get(), pDesc, span, - static_cast<FT_Long>(face_index)); + RetainPtr<CFX_Face> face = + CFX_Face::New(m_FTLibrary.get(), std::move(pDesc), span, + static_cast<FT_Long>(face_index)); if (!face) return nullptr;
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h index dfbb753..5bb9620 100644 --- a/core/fxge/cfx_fontmgr.h +++ b/core/fxge/cfx_fontmgr.h
@@ -70,7 +70,7 @@ std::unique_ptr<uint8_t, FxFreeDeleter> pData, size_t size); - RetainPtr<CFX_Face> NewFixedFace(const RetainPtr<FontDesc>& pDesc, + RetainPtr<CFX_Face> NewFixedFace(RetainPtr<FontDesc> pDesc, pdfium::span<const uint8_t> span, size_t face_index);