diff options
author | Cary Clark <caryclark@google.com> | 2017-07-06 13:45:58 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-07-06 13:46:08 +0000 |
commit | 75e1ab05e731d99b9acdc86de47640720e848415 (patch) | |
tree | 606836551ed28b3d6c4261ecc7efe57d4b88c0e5 /core/fxge | |
parent | c099381eed3464b65803e014279786a80631b9da (diff) | |
download | pdfium-75e1ab05e731d99b9acdc86de47640720e848415.tar.xz |
Revert "typeface double delete"
This reverts commit ddf2418ba8e5d925909d7955ac22b33f37ccce44.
Reason for revert: not right
Original change's description:
> typeface double delete
>
> SkTypeface was doubly deleted at pdfium teardown
> SkTypeface has two pointers but no owners.
> Making the font cache an owner fixes the bug but
> violates checkdeps rules. Let me know what to
> do about that.
>
> R=dsinclair@chromium.org,npm@chromium.org
> Bug: 736133
> Change-Id: I756a41258a5ac86e70139d7a587c5da9bb7a707b
> Reviewed-on: https://pdfium-review.googlesource.com/7270
> Reviewed-by: Nicolás Peña <npm@chromium.org>
> Commit-Queue: Cary Clark <caryclark@google.com>
TBR=dsinclair@chromium.org,caryclark@google.com,npm@chromium.org,caryclark@skia.org
Change-Id: I255f50acf2cbaecc85b8e5ac3893c1fbc77b6492
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 736133
Reviewed-on: https://pdfium-review.googlesource.com/7310
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Cary Clark <caryclark@google.com>
Diffstat (limited to 'core/fxge')
-rw-r--r-- | core/fxge/cfx_facecache.h | 6 | ||||
-rw-r--r-- | core/fxge/ge/cfx_facecache.cpp | 15 |
2 files changed, 11 insertions, 10 deletions
diff --git a/core/fxge/cfx_facecache.h b/core/fxge/cfx_facecache.h index 076ba1f330..d6847debdb 100644 --- a/core/fxge/cfx_facecache.h +++ b/core/fxge/cfx_facecache.h @@ -14,10 +14,6 @@ #include "core/fxge/fx_font.h" #include "core/fxge/fx_freetype.h" -#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_ -#include "third_party/skia/include/core/SkTypeface.h" -#endif - class CFX_FaceCache { public: explicit CFX_FaceCache(FXFT_Face face); @@ -64,7 +60,7 @@ class CFX_FaceCache { std::map<CFX_ByteString, std::unique_ptr<CFX_SizeGlyphCache>> m_SizeMap; std::map<uint32_t, std::unique_ptr<CFX_PathData>> m_PathMap; #if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_ - sk_sp<SkTypeface> m_pTypeface; + CFX_UnownedPtr<CFX_TypeFace> m_pTypeface; #endif }; diff --git a/core/fxge/ge/cfx_facecache.cpp b/core/fxge/ge/cfx_facecache.cpp index e675e11510..6049729089 100644 --- a/core/fxge/ge/cfx_facecache.cpp +++ b/core/fxge/ge/cfx_facecache.cpp @@ -89,6 +89,9 @@ CFX_FaceCache::CFX_FaceCache(FXFT_Face face) } CFX_FaceCache::~CFX_FaceCache() { +#if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_ + SkSafeUnref(m_pTypeface.Get()); +#endif } std::unique_ptr<CFX_GlyphBitmap> CFX_FaceCache::RenderGlyph( @@ -355,17 +358,19 @@ const CFX_GlyphBitmap* CFX_FaceCache::LoadGlyphBitmap(const CFX_Font* pFont, #if defined _SKIA_SUPPORT_ || defined _SKIA_SUPPORT_PATHS_ CFX_TypeFace* CFX_FaceCache::GetDeviceCache(const CFX_Font* pFont) { if (!m_pTypeface) { - m_pTypeface = SkTypeface::MakeFromStream( - new SkMemoryStream(pFont->GetFontData(), pFont->GetSize())); + m_pTypeface = + SkTypeface::MakeFromStream( + new SkMemoryStream(pFont->GetFontData(), pFont->GetSize())) + .release(); } #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ if (!m_pTypeface) { sk_sp<SkFontMgr> customMgr(SkFontMgr_New_Custom_Empty()); - m_pTypeface.reset(customMgr->createFromStream( - new SkMemoryStream(pFont->GetFontData(), pFont->GetSize()))); + m_pTypeface = customMgr->createFromStream( + new SkMemoryStream(pFont->GetFontData(), pFont->GetSize())); } #endif - return m_pTypeface.get(); + return m_pTypeface.Get(); } #endif |