Index: Source/platform/fonts/FontCache.cpp |
diff --git a/Source/platform/fonts/FontCache.cpp b/Source/platform/fonts/FontCache.cpp |
index 99fc13b34b1b14c466a790ac9b4c2f6b0e372da0..07626c259eae7bc24d8bc9c4bd1f3d545f714062 100644 |
--- a/Source/platform/fonts/FontCache.cpp |
+++ b/Source/platform/fonts/FontCache.cpp |
@@ -243,23 +243,29 @@ void FontCache::purge(PurgeSeverity PurgeSeverity) |
purgeFontVerticalDataCache(); |
} |
-static HashSet<FontCacheClient*>* gClients; |
+static bool invalidateFontCache = false; |
haraken
2014/04/07 14:10:12
invalidateFontCache => fontCacheMapIsInitialized ?
wibling-chromium
2014/04/08 09:35:59
It guards whether we need to invalidate the cache,
|
-void FontCache::addClient(FontCacheClient* client) |
+WillBeHeapHashSet<RawPtrWillBeMember<FontCacheClient> >& fontCacheClients() |
{ |
- if (!gClients) |
- gClients = new HashSet<FontCacheClient*>; |
+#if ENABLE(OILPAN) |
+ DEFINE_STATIC_LOCAL(Persistent<HeapHashSet<Member<FontCacheClient> > >, clients, (new HeapHashSet<Member<FontCacheClient> >())); |
haraken
2014/04/07 14:10:12
Shouldn't this be a hash set of weak members? I gu
wibling-chromium
2014/04/08 09:35:59
It is not strictly needed since removeClient is al
|
+#else |
+ DEFINE_STATIC_LOCAL(HashSet<RawPtr<FontCacheClient> >*, clients, (new HashSet<RawPtr<FontCacheClient> >())); |
+#endif |
+ invalidateFontCache = true; |
+ return *clients; |
+} |
- ASSERT(!gClients->contains(client)); |
- gClients->add(client); |
+void FontCache::addClient(FontCacheClient* client) |
+{ |
+ ASSERT(!fontCacheClients().contains(client)); |
+ fontCacheClients().add(client); |
} |
void FontCache::removeClient(FontCacheClient* client) |
haraken
2014/04/07 14:10:12
If the FontCacheClients are weak, this method shou
wibling-chromium
2014/04/08 09:35:59
Done.
|
{ |
- ASSERT(gClients); |
- ASSERT(gClients->contains(client)); |
- |
- gClients->remove(client); |
+ ASSERT(fontCacheClients().contains(client)); |
+ fontCacheClients().remove(client); |
} |
static unsigned short gGeneration = 0; |
@@ -271,7 +277,7 @@ unsigned short FontCache::generation() |
void FontCache::invalidate() |
{ |
- if (!gClients) { |
+ if (!invalidateFontCache) { |
ASSERT(!gFontPlatformDataCache); |
return; |
} |
@@ -283,11 +289,11 @@ void FontCache::invalidate() |
gGeneration++; |
- Vector<RefPtr<FontCacheClient> > clients; |
- size_t numClients = gClients->size(); |
+ WillBeHeapVector<RefPtrWillBeMember<FontCacheClient> > clients; |
+ size_t numClients = fontCacheClients().size(); |
clients.reserveInitialCapacity(numClients); |
- HashSet<FontCacheClient*>::iterator end = gClients->end(); |
- for (HashSet<FontCacheClient*>::iterator it = gClients->begin(); it != end; ++it) |
+ WillBeHeapHashSet<RawPtrWillBeMember<FontCacheClient> >::iterator end = fontCacheClients().end(); |
+ for (WillBeHeapHashSet<RawPtrWillBeMember<FontCacheClient> >::iterator it = fontCacheClients().begin(); it != end; ++it) |
clients.append(*it); |
ASSERT(numClients == clients.size()); |