Use compound keys in CFX_FontMgr::m_FaceMap and m_TTCFaceMap Avoid cobbling together key strings. Change-Id: I6226768bacd933520f66939ab7898ddb67e0b13b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/92991 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp index 435c851..9b2b6f5 100644 --- a/core/fxge/cfx_fontmgr.cpp +++ b/core/fxge/cfx_fontmgr.cpp
@@ -47,20 +47,6 @@ constexpr BuiltinFont kGenericSansFont = {kFoxitSansMMFontData, 66919}; constexpr BuiltinFont kGenericSerifFont = {kFoxitSerifMMFontData, 113417}; -ByteString KeyNameFromFace(const ByteString& face_name, - int weight, - bool bItalic) { - ByteString key(face_name); - key += ','; - key += ByteString::FormatInteger(weight); - key += bItalic ? 'I' : 'N'; - return key; -} - -ByteString KeyNameFromSize(size_t ttc_size, uint32_t checksum) { - return ByteString::Format("%zu:%u", ttc_size, checksum); -} - FXFT_LibraryRec* FTLibraryInitHelper() { FXFT_LibraryRec* pLibrary = nullptr; FT_Init_FreeType(&pLibrary); @@ -97,7 +83,7 @@ const ByteString& face_name, int weight, bool bItalic) { - auto it = m_FaceMap.find(KeyNameFromFace(face_name, weight, bItalic)); + auto it = m_FaceMap.find({face_name, weight, bItalic}); return it != m_FaceMap.end() ? pdfium::WrapRetain(it->second.Get()) : nullptr; } @@ -108,14 +94,14 @@ std::unique_ptr<uint8_t, FxFreeDeleter> pData, size_t size) { auto pFontDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size); - m_FaceMap[KeyNameFromFace(face_name, weight, bItalic)].Reset(pFontDesc.Get()); + m_FaceMap[{face_name, weight, bItalic}].Reset(pFontDesc.Get()); return pFontDesc; } RetainPtr<CFX_FontMgr::FontDesc> CFX_FontMgr::GetCachedTTCFontDesc( size_t ttc_size, uint32_t checksum) { - auto it = m_TTCFaceMap.find(KeyNameFromSize(ttc_size, checksum)); + auto it = m_TTCFaceMap.find({ttc_size, checksum}); return it != m_TTCFaceMap.end() ? pdfium::WrapRetain(it->second.Get()) : nullptr; } @@ -126,7 +112,7 @@ std::unique_ptr<uint8_t, FxFreeDeleter> pData, size_t size) { auto pNewDesc = pdfium::MakeRetain<FontDesc>(std::move(pData), size); - m_TTCFaceMap[KeyNameFromSize(ttc_size, checksum)].Reset(pNewDesc.Get()); + m_TTCFaceMap[{ttc_size, checksum}].Reset(pNewDesc.Get()); return pNewDesc; }
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h index 50cbc5b..5cedf73 100644 --- a/core/fxge/cfx_fontmgr.h +++ b/core/fxge/cfx_fontmgr.h
@@ -12,6 +12,7 @@ #include <map> #include <memory> +#include <tuple> #include "core/fxcrt/bytestring.h" #include "core/fxcrt/fx_memory_wrappers.h" @@ -86,8 +87,8 @@ // Must come before |m_pBuiltinMapper| and |m_FaceMap|. ScopedFXFTLibraryRec const m_FTLibrary; std::unique_ptr<CFX_FontMapper> m_pBuiltinMapper; - std::map<ByteString, ObservedPtr<FontDesc>> m_FaceMap; - std::map<ByteString, ObservedPtr<FontDesc>> m_TTCFaceMap; + std::map<std::tuple<ByteString, int, bool>, ObservedPtr<FontDesc>> m_FaceMap; + std::map<std::tuple<size_t, uint32_t>, ObservedPtr<FontDesc>> m_TTCFaceMap; const bool m_FTLibrarySupportsHinting; };