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

Side by Side Diff: third_party/WebKit/Source/platform/fonts/FontCache.cpp

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 3 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #include "platform/fonts/FontSmoothingMode.h" 43 #include "platform/fonts/FontSmoothingMode.h"
44 #include "platform/fonts/SimpleFontData.h" 44 #include "platform/fonts/SimpleFontData.h"
45 #include "platform/fonts/TextRenderingMode.h" 45 #include "platform/fonts/TextRenderingMode.h"
46 #include "platform/fonts/opentype/OpenTypeVerticalData.h" 46 #include "platform/fonts/opentype/OpenTypeVerticalData.h"
47 #include "platform/fonts/shaping/ShapeCache.h" 47 #include "platform/fonts/shaping/ShapeCache.h"
48 #include "platform/web_memory_allocator_dump.h" 48 #include "platform/web_memory_allocator_dump.h"
49 #include "platform/web_process_memory_dump.h" 49 #include "platform/web_process_memory_dump.h"
50 #include "public/platform/Platform.h" 50 #include "public/platform/Platform.h"
51 #include "wtf/HashMap.h" 51 #include "wtf/HashMap.h"
52 #include "wtf/ListHashSet.h" 52 #include "wtf/ListHashSet.h"
53 #include "wtf/PtrUtil.h"
54 #include "wtf/StdLibExtras.h" 53 #include "wtf/StdLibExtras.h"
55 #include "wtf/Vector.h" 54 #include "wtf/Vector.h"
56 #include "wtf/text/AtomicStringHash.h" 55 #include "wtf/text/AtomicStringHash.h"
57 #include "wtf/text/StringHash.h" 56 #include "wtf/text/StringHash.h"
58 #include <memory>
59 57
60 using namespace WTF; 58 using namespace WTF;
61 59
62 namespace blink { 60 namespace blink {
63 61
64 #if !OS(WIN) && !OS(LINUX) 62 #if !OS(WIN) && !OS(LINUX)
65 FontCache::FontCache() 63 FontCache::FontCache()
66 : m_purgePreventCount(0) 64 : m_purgePreventCount(0)
67 , m_fontManager(nullptr) 65 , m_fontManager(nullptr)
68 { 66 {
69 } 67 }
70 #endif // !OS(WIN) && !OS(LINUX) 68 #endif // !OS(WIN) && !OS(LINUX)
71 69
72 typedef HashMap<unsigned, std::unique_ptr<FontPlatformData>, WTF::IntHash<unsign ed>, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> SizedFontPlatformDataSet; 70 typedef HashMap<unsigned, OwnPtr<FontPlatformData>, WTF::IntHash<unsigned>, WTF: :UnsignedWithZeroKeyHashTraits<unsigned>> SizedFontPlatformDataSet;
73 typedef HashMap<FontCacheKey, SizedFontPlatformDataSet, FontCacheKeyHash, FontCa cheKeyTraits> FontPlatformDataCache; 71 typedef HashMap<FontCacheKey, SizedFontPlatformDataSet, FontCacheKeyHash, FontCa cheKeyTraits> FontPlatformDataCache;
74 typedef HashMap<FallbackListCompositeKey, std::unique_ptr<ShapeCache>, FallbackL istCompositeKeyHash, FallbackListCompositeKeyTraits> FallbackListShaperCache; 72 typedef HashMap<FallbackListCompositeKey, OwnPtr<ShapeCache>, FallbackListCompos iteKeyHash, FallbackListCompositeKeyTraits> FallbackListShaperCache;
75 73
76 static FontPlatformDataCache* gFontPlatformDataCache = nullptr; 74 static FontPlatformDataCache* gFontPlatformDataCache = nullptr;
77 static FallbackListShaperCache* gFallbackListShaperCache = nullptr; 75 static FallbackListShaperCache* gFallbackListShaperCache = nullptr;
78 76
79 SkFontMgr* FontCache::s_fontManager = nullptr; 77 SkFontMgr* FontCache::s_fontManager = nullptr;
80 78
81 #if OS(WIN) 79 #if OS(WIN)
82 bool FontCache::s_antialiasedTextEnabled = false; 80 bool FontCache::s_antialiasedTextEnabled = false;
83 bool FontCache::s_lcdTextEnabled = false; 81 bool FontCache::s_lcdTextEnabled = false;
84 float FontCache::s_deviceScaleFactor = 1.0; 82 float FontCache::s_deviceScaleFactor = 1.0;
(...skipping 28 matching lines...) Expand all
113 111
114 { 112 {
115 // addResult's scope must end before we recurse for alternate family nam es below, 113 // addResult's scope must end before we recurse for alternate family nam es below,
116 // to avoid trigering its dtor hash-changed asserts. 114 // to avoid trigering its dtor hash-changed asserts.
117 SizedFontPlatformDataSet* sizedFonts = &gFontPlatformDataCache->add(key, SizedFontPlatformDataSet()).storedValue->value; 115 SizedFontPlatformDataSet* sizedFonts = &gFontPlatformDataCache->add(key, SizedFontPlatformDataSet()).storedValue->value;
118 bool wasEmpty = sizedFonts->isEmpty(); 116 bool wasEmpty = sizedFonts->isEmpty();
119 117
120 // Take a different size instance of the same font before adding an entr y to |sizedFont|. 118 // Take a different size instance of the same font before adding an entr y to |sizedFont|.
121 FontPlatformData* anotherSize = wasEmpty ? nullptr : sizedFonts->begin() ->value.get(); 119 FontPlatformData* anotherSize = wasEmpty ? nullptr : sizedFonts->begin() ->value.get();
122 auto addResult = sizedFonts->add(roundedSize, nullptr); 120 auto addResult = sizedFonts->add(roundedSize, nullptr);
123 std::unique_ptr<FontPlatformData>* found = &addResult.storedValue->value ; 121 OwnPtr<FontPlatformData>* found = &addResult.storedValue->value;
124 if (addResult.isNewEntry) { 122 if (addResult.isNewEntry) {
125 if (wasEmpty) 123 if (wasEmpty)
126 *found = createFontPlatformData(fontDescription, creationParams, size); 124 *found = createFontPlatformData(fontDescription, creationParams, size);
127 else if (anotherSize) 125 else if (anotherSize)
128 *found = scaleFontPlatformData(*anotherSize, fontDescription, cr eationParams, size); 126 *found = scaleFontPlatformData(*anotherSize, fontDescription, cr eationParams, size);
129 } 127 }
130 128
131 result = found->get(); 129 result = found->get();
132 foundResult = result || !addResult.isNewEntry; 130 foundResult = result || !addResult.isNewEntry;
133 } 131 }
134 132
135 if (!foundResult && !checkingAlternateName && creationParams.creationType() == CreateFontByFamily) { 133 if (!foundResult && !checkingAlternateName && creationParams.creationType() == CreateFontByFamily) {
136 // We were unable to find a font. We have a small set of fonts that we a lias to other names, 134 // We were unable to find a font. We have a small set of fonts that we a lias to other names,
137 // e.g., Arial/Helvetica, Courier/Courier New, etc. Try looking up the f ont under the aliased name. 135 // e.g., Arial/Helvetica, Courier/Courier New, etc. Try looking up the f ont under the aliased name.
138 const AtomicString& alternateName = alternateFamilyName(creationParams.f amily()); 136 const AtomicString& alternateName = alternateFamilyName(creationParams.f amily());
139 if (!alternateName.isEmpty()) { 137 if (!alternateName.isEmpty()) {
140 FontFaceCreationParams createByAlternateFamily(alternateName); 138 FontFaceCreationParams createByAlternateFamily(alternateName);
141 result = getFontPlatformData(fontDescription, createByAlternateFamil y, true); 139 result = getFontPlatformData(fontDescription, createByAlternateFamil y, true);
142 } 140 }
143 if (result) { 141 if (result) {
144 // Cache the result under the old name. 142 // Cache the result under the old name.
145 auto adding = &gFontPlatformDataCache->add(key, SizedFontPlatformDat aSet()).storedValue->value; 143 auto adding = &gFontPlatformDataCache->add(key, SizedFontPlatformDat aSet()).storedValue->value;
146 adding->set(roundedSize, wrapUnique(new FontPlatformData(*result))); 144 adding->set(roundedSize, adoptPtr(new FontPlatformData(*result)));
147 } 145 }
148 } 146 }
149 147
150 return result; 148 return result;
151 } 149 }
152 150
153 std::unique_ptr<FontPlatformData> FontCache::scaleFontPlatformData(const FontPla tformData& fontPlatformData, const FontDescription& fontDescription, const FontF aceCreationParams& creationParams, float fontSize) 151 PassOwnPtr<FontPlatformData> FontCache::scaleFontPlatformData(const FontPlatform Data& fontPlatformData, const FontDescription& fontDescription, const FontFaceCr eationParams& creationParams, float fontSize)
154 { 152 {
155 #if OS(MACOSX) 153 #if OS(MACOSX)
156 return createFontPlatformData(fontDescription, creationParams, fontSize); 154 return createFontPlatformData(fontDescription, creationParams, fontSize);
157 #else 155 #else
158 return wrapUnique(new FontPlatformData(fontPlatformData, fontSize)); 156 return adoptPtr(new FontPlatformData(fontPlatformData, fontSize));
159 #endif 157 #endif
160 } 158 }
161 159
162 ShapeCache* FontCache::getShapeCache(const FallbackListCompositeKey& key) 160 ShapeCache* FontCache::getShapeCache(const FallbackListCompositeKey& key)
163 { 161 {
164 if (!gFallbackListShaperCache) 162 if (!gFallbackListShaperCache)
165 gFallbackListShaperCache = new FallbackListShaperCache; 163 gFallbackListShaperCache = new FallbackListShaperCache;
166 164
167 FallbackListShaperCache::iterator it = gFallbackListShaperCache->find(key); 165 FallbackListShaperCache::iterator it = gFallbackListShaperCache->find(key);
168 ShapeCache* result = nullptr; 166 ShapeCache* result = nullptr;
169 if (it == gFallbackListShaperCache->end()) { 167 if (it == gFallbackListShaperCache->end()) {
170 result = new ShapeCache(); 168 result = new ShapeCache();
171 gFallbackListShaperCache->set(key, wrapUnique(result)); 169 gFallbackListShaperCache->set(key, adoptPtr(result));
172 } else { 170 } else {
173 result = it->value.get(); 171 result = it->value.get();
174 } 172 }
175 173
176 ASSERT(result); 174 ASSERT(result);
177 return result; 175 return result;
178 } 176 }
179 177
180 typedef HashMap<FontCache::FontFileKey, RefPtr<OpenTypeVerticalData>, IntHash<Fo ntCache::FontFileKey>, UnsignedWithZeroKeyHashTraits<FontCache::FontFileKey>> Fo ntVerticalDataCache; 178 typedef HashMap<FontCache::FontFileKey, RefPtr<OpenTypeVerticalData>, IntHash<Fo ntCache::FontFileKey>, UnsignedWithZeroKeyHashTraits<FontCache::FontFileKey>> Fo ntVerticalDataCache;
181 179
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 case USCRIPT_SIMPLIFIED_HAN: 420 case USCRIPT_SIMPLIFIED_HAN:
423 return "zh-Hans"; 421 return "zh-Hans";
424 case USCRIPT_TRADITIONAL_HAN: 422 case USCRIPT_TRADITIONAL_HAN:
425 return "zh-Hant"; 423 return "zh-Hant";
426 default: 424 default:
427 return locale.ascii(); 425 return locale.ascii();
428 } 426 }
429 } 427 }
430 428
431 } // namespace blink 429 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698