Remove a pointless use of SkWeakRefCnt.
authormtklein <mtklein@chromium.org>
Fri, 24 Oct 2014 17:43:15 +0000 (10:43 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 24 Oct 2014 17:43:15 +0000 (10:43 -0700)
Can't quite get rid of SkWeakRefCnt yet... SkFontMgr_indirect uses it to cache
SkTypefaces, and I don't quite understand it enough yet to cut out the weak refs.

BUG=skia:3065

Review URL: https://codereview.chromium.org/664173003

src/core/SkTypefaceCache.cpp
src/core/SkTypefaceCache.h
src/ports/SkFontHost_win.cpp
src/ports/SkFontMgr_fontconfig.cpp
src/ports/SkFontMgr_win_dw.cpp

index cfa301e..8adffe6 100644 (file)
@@ -19,31 +19,19 @@ SkTypefaceCache::~SkTypefaceCache() {
     const Rec* curr = fArray.begin();
     const Rec* stop = fArray.end();
     while (curr < stop) {
-        if (curr->fStrong) {
-            curr->fFace->unref();
-        } else {
-            curr->fFace->weak_unref();
-        }
+        curr->fFace->unref();
         curr += 1;
     }
 }
 
-void SkTypefaceCache::add(SkTypeface* face,
-                          const SkFontStyle& requestedStyle,
-                          bool strong) {
+void SkTypefaceCache::add(SkTypeface* face, const SkFontStyle& requestedStyle) {
     if (fArray.count() >= TYPEFACE_CACHE_LIMIT) {
         this->purge(TYPEFACE_CACHE_LIMIT >> 2);
     }
 
     Rec* rec = fArray.append();
-    rec->fFace = face;
+    rec->fFace = SkRef(face);
     rec->fRequestedStyle = requestedStyle;
-    rec->fStrong = strong;
-    if (strong) {
-        face->ref();
-    } else {
-        face->weak_ref();
-    }
 }
 
 SkTypeface* SkTypefaceCache::findByID(SkFontID fontID) const {
@@ -64,14 +52,7 @@ SkTypeface* SkTypefaceCache::findByProcAndRef(FindProc proc, void* ctx) const {
     while (curr < stop) {
         SkTypeface* currFace = curr->fFace;
         if (proc(currFace, curr->fRequestedStyle, ctx)) {
-            if (curr->fStrong) {
-                currFace->ref();
-                return currFace;
-            } else if (currFace->try_ref()) {
-                return currFace;
-            } else {
-                //remove currFace from fArray?
-            }
+            return SkRef(currFace);
         }
         curr += 1;
     }
@@ -83,13 +64,8 @@ void SkTypefaceCache::purge(int numToPurge) {
     int i = 0;
     while (i < count) {
         SkTypeface* face = fArray[i].fFace;
-        bool strong = fArray[i].fStrong;
-        if ((strong && face->unique()) || (!strong && face->weak_expired())) {
-            if (strong) {
-                face->unref();
-            } else {
-                face->weak_unref();
-            }
+        if (face->unique()) {
+            face->unref();
             fArray.remove(i);
             --count;
             if (--numToPurge == 0) {
@@ -119,11 +95,9 @@ SkFontID SkTypefaceCache::NewFontID() {
 
 SK_DECLARE_STATIC_MUTEX(gMutex);
 
-void SkTypefaceCache::Add(SkTypeface* face,
-                          const SkFontStyle& requestedStyle,
-                          bool strong) {
+void SkTypefaceCache::Add(SkTypeface* face, const SkFontStyle& requestedStyle) {
     SkAutoMutexAcquire ama(gMutex);
-    Get().add(face, requestedStyle, strong);
+    Get().add(face, requestedStyle);
 }
 
 SkTypeface* SkTypefaceCache::FindByID(SkFontID fontID) {
index ba851ee..c6b433d 100644 (file)
@@ -39,7 +39,7 @@ public:
      *  whose refcnt is 1 (meaning only the cache is an owner) will be
      *  unref()ed.
      */
-    void add(SkTypeface*, const SkFontStyle& requested, bool strong = true);
+    void add(SkTypeface*, const SkFontStyle& requested);
 
     /**
      *  Search the cache for a typeface with the specified fontID (uniqueID).
@@ -72,9 +72,7 @@ public:
 
     // These are static wrappers around a global instance of a cache.
 
-    static void Add(SkTypeface*,
-                    const SkFontStyle& requested,
-                    bool strong = true);
+    static void Add(SkTypeface*, const SkFontStyle& requested);
     static SkTypeface* FindByID(SkFontID fontID);
     static SkTypeface* FindByProcAndRef(FindProc proc, void* ctx);
     static void PurgeAll();
@@ -91,7 +89,6 @@ private:
 
     struct Rec {
         SkTypeface* fFace;
-        bool fStrong;
         SkFontStyle fRequestedStyle;
     };
     SkTDArray<Rec> fArray;
index 348246b..89bac5d 100755 (executable)
@@ -338,9 +338,8 @@ SkTypeface* SkCreateTypefaceFromLOGFONT(const LOGFONT& origLF) {
 SkTypeface* SkCreateFontMemResourceTypefaceFromLOGFONT(const LOGFONT& origLF, HANDLE fontMemResource) {
     LOGFONT lf = origLF;
     make_canonical(&lf);
-    FontMemResourceTypeface* face = FontMemResourceTypeface::Create(lf, fontMemResource);
-    SkTypefaceCache::Add(face, get_style(lf), false);
-    return face;
+    // We'll never get a cache hit, so no point in putting this in SkTypefaceCache.
+    return FontMemResourceTypeface::Create(lf, fontMemResource);
 }
 
 /**
index 6ec5604..d7570d9 100644 (file)
@@ -583,7 +583,7 @@ class SkFontMgr_fontconfig : public SkFontMgr {
             FcPatternReference(pattern);
             face = SkTypeface_fontconfig::Create(pattern);
             if (face) {
-                fTFCache.add(face, SkFontStyle(), true);
+                fTFCache.add(face, SkFontStyle());
             }
         }
         return face;
index e9d494f..f5bf85d 100644 (file)
@@ -435,7 +435,7 @@ SkTypeface* SkFontMgr_DirectWrite::createTypefaceFromDWriteFont(
     if (NULL == face) {
         face = DWriteFontTypeface::Create(fFactory.get(), fontFace, font, fontFamily);
         if (face) {
-            fTFCache.add(face, get_style(font), true);
+            fTFCache.add(face, get_style(font));
         }
     }
     return face;