Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Unified Diff: src/core/SkTypefaceCache.cpp

Issue 1879423002: Remove requestedStyle from SkTypefaceCache. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: More interesting coverage. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkTypefaceCache.h ('k') | src/ports/SkFontHost_fontconfig.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkTypefaceCache.cpp
diff --git a/src/core/SkTypefaceCache.cpp b/src/core/SkTypefaceCache.cpp
index faf39788edb3374c5c8cddf48e1d34290a6f831c..05a7a8eb5f3beb187447952c9ea1b3bd8a9a98e1 100644
--- a/src/core/SkTypefaceCache.cpp
+++ b/src/core/SkTypefaceCache.cpp
@@ -15,46 +15,29 @@
SkTypefaceCache::SkTypefaceCache() {}
-SkTypefaceCache::~SkTypefaceCache() {
- const Rec* curr = fArray.begin();
- const Rec* stop = fArray.end();
- while (curr < stop) {
- curr->fFace->unref();
- curr += 1;
- }
-}
-
-void SkTypefaceCache::add(SkTypeface* face, const SkFontStyle& requestedStyle) {
- if (fArray.count() >= TYPEFACE_CACHE_LIMIT) {
+void SkTypefaceCache::add(SkTypeface* face) {
+ if (fTypefaces.count() >= TYPEFACE_CACHE_LIMIT) {
this->purge(TYPEFACE_CACHE_LIMIT >> 2);
}
- Rec* rec = fArray.append();
- rec->fFace = SkRef(face);
- rec->fRequestedStyle = requestedStyle;
+ fTypefaces.emplace_back(SkRef(face));
}
SkTypeface* SkTypefaceCache::findByProcAndRef(FindProc proc, void* ctx) const {
- const Rec* curr = fArray.begin();
- const Rec* stop = fArray.end();
- while (curr < stop) {
- SkTypeface* currFace = curr->fFace;
- if (proc(currFace, curr->fRequestedStyle, ctx)) {
- return SkRef(currFace);
+ for (const sk_sp<SkTypeface>& typeface : fTypefaces) {
+ if (proc(typeface.get(), ctx)) {
+ return SkRef(typeface.get());
}
- curr += 1;
}
return nullptr;
}
void SkTypefaceCache::purge(int numToPurge) {
- int count = fArray.count();
+ int count = fTypefaces.count();
int i = 0;
while (i < count) {
- SkTypeface* face = fArray[i].fFace;
- if (face->unique()) {
- face->unref();
- fArray.remove(i);
+ if (fTypefaces[i]->unique()) {
+ fTypefaces.removeShuffle(i);
--count;
if (--numToPurge == 0) {
return;
@@ -66,7 +49,7 @@ void SkTypefaceCache::purge(int numToPurge) {
}
void SkTypefaceCache::purgeAll() {
- this->purge(fArray.count());
+ this->purge(fTypefaces.count());
}
///////////////////////////////////////////////////////////////////////////////
@@ -83,15 +66,14 @@ SkFontID SkTypefaceCache::NewFontID() {
SK_DECLARE_STATIC_MUTEX(gMutex);
-void SkTypefaceCache::Add(SkTypeface* face, const SkFontStyle& requestedStyle) {
+void SkTypefaceCache::Add(SkTypeface* face) {
SkAutoMutexAcquire ama(gMutex);
- Get().add(face, requestedStyle);
+ Get().add(face);
}
SkTypeface* SkTypefaceCache::FindByProcAndRef(FindProc proc, void* ctx) {
SkAutoMutexAcquire ama(gMutex);
- SkTypeface* typeface = Get().findByProcAndRef(proc, ctx);
- return typeface;
+ return Get().findByProcAndRef(proc, ctx);
}
void SkTypefaceCache::PurgeAll() {
@@ -102,16 +84,19 @@ void SkTypefaceCache::PurgeAll() {
///////////////////////////////////////////////////////////////////////////////
#ifdef SK_DEBUG
-static bool DumpProc(SkTypeface* face, const SkFontStyle& s, void* ctx) {
- SkDebugf("SkTypefaceCache: face %p fontID %d weight %d width %d style %d refcnt %d\n",
- face, face->uniqueID(), s.weight(), s.width(), s.slant(), face->getRefCnt());
+static bool DumpProc(SkTypeface* face, void* ctx) {
+ SkString n;
+ face->getFamilyName(&n);
+ SkFontStyle s = face->fontStyle();
+ SkFontID id = face->uniqueID();
+ SkDebugf("SkTypefaceCache: face %p fontID %d weight %d width %d style %d refcnt %d name %s\n",
+ face, id, s.weight(), s.width(), s.slant(), face->getRefCnt(), n.c_str());
return false;
}
#endif
void SkTypefaceCache::Dump() {
#ifdef SK_DEBUG
- SkAutoMutexAcquire ama(gMutex);
(void)Get().findByProcAndRef(DumpProc, nullptr);
#endif
}
« no previous file with comments | « src/core/SkTypefaceCache.h ('k') | src/ports/SkFontHost_fontconfig.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698