summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCary Clark <caryclark@google.com>2017-07-06 13:45:58 +0000
committerChromium commit bot <commit-bot@chromium.org>2017-07-06 13:46:08 +0000
commit75e1ab05e731d99b9acdc86de47640720e848415 (patch)
tree606836551ed28b3d6c4261ecc7efe57d4b88c0e5
parentc099381eed3464b65803e014279786a80631b9da (diff)
downloadpdfium-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>
-rw-r--r--core/fxge/cfx_facecache.h6
-rw-r--r--core/fxge/ge/cfx_facecache.cpp15
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