| OLD | NEW |
| 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 Loading... |
| 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" |
| 53 #include "wtf/StdLibExtras.h" | 54 #include "wtf/StdLibExtras.h" |
| 54 #include "wtf/Vector.h" | 55 #include "wtf/Vector.h" |
| 55 #include "wtf/text/AtomicStringHash.h" | 56 #include "wtf/text/AtomicStringHash.h" |
| 56 #include "wtf/text/StringHash.h" | 57 #include "wtf/text/StringHash.h" |
| 58 #include <memory> |
| 57 | 59 |
| 58 using namespace WTF; | 60 using namespace WTF; |
| 59 | 61 |
| 60 namespace blink { | 62 namespace blink { |
| 61 | 63 |
| 62 #if !OS(WIN) && !OS(LINUX) | 64 #if !OS(WIN) && !OS(LINUX) |
| 63 FontCache::FontCache() | 65 FontCache::FontCache() |
| 64 : m_purgePreventCount(0) | 66 : m_purgePreventCount(0) |
| 65 , m_fontManager(nullptr) | 67 , m_fontManager(nullptr) |
| 66 { | 68 { |
| 67 } | 69 } |
| 68 #endif // !OS(WIN) && !OS(LINUX) | 70 #endif // !OS(WIN) && !OS(LINUX) |
| 69 | 71 |
| 70 typedef HashMap<unsigned, OwnPtr<FontPlatformData>, WTF::IntHash<unsigned>, WTF:
:UnsignedWithZeroKeyHashTraits<unsigned>> SizedFontPlatformDataSet; | 72 typedef HashMap<unsigned, std::unique_ptr<FontPlatformData>, WTF::IntHash<unsign
ed>, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> SizedFontPlatformDataSet; |
| 71 typedef HashMap<FontCacheKey, SizedFontPlatformDataSet, FontCacheKeyHash, FontCa
cheKeyTraits> FontPlatformDataCache; | 73 typedef HashMap<FontCacheKey, SizedFontPlatformDataSet, FontCacheKeyHash, FontCa
cheKeyTraits> FontPlatformDataCache; |
| 72 typedef HashMap<FallbackListCompositeKey, OwnPtr<ShapeCache>, FallbackListCompos
iteKeyHash, FallbackListCompositeKeyTraits> FallbackListShaperCache; | 74 typedef HashMap<FallbackListCompositeKey, std::unique_ptr<ShapeCache>, FallbackL
istCompositeKeyHash, FallbackListCompositeKeyTraits> FallbackListShaperCache; |
| 73 | 75 |
| 74 static FontPlatformDataCache* gFontPlatformDataCache = nullptr; | 76 static FontPlatformDataCache* gFontPlatformDataCache = nullptr; |
| 75 static FallbackListShaperCache* gFallbackListShaperCache = nullptr; | 77 static FallbackListShaperCache* gFallbackListShaperCache = nullptr; |
| 76 | 78 |
| 77 SkFontMgr* FontCache::s_fontManager = nullptr; | 79 SkFontMgr* FontCache::s_fontManager = nullptr; |
| 78 | 80 |
| 79 #if OS(WIN) | 81 #if OS(WIN) |
| 80 bool FontCache::s_antialiasedTextEnabled = false; | 82 bool FontCache::s_antialiasedTextEnabled = false; |
| 81 bool FontCache::s_lcdTextEnabled = false; | 83 bool FontCache::s_lcdTextEnabled = false; |
| 82 float FontCache::s_deviceScaleFactor = 1.0; | 84 float FontCache::s_deviceScaleFactor = 1.0; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 111 | 113 |
| 112 { | 114 { |
| 113 // addResult's scope must end before we recurse for alternate family nam
es below, | 115 // addResult's scope must end before we recurse for alternate family nam
es below, |
| 114 // to avoid trigering its dtor hash-changed asserts. | 116 // to avoid trigering its dtor hash-changed asserts. |
| 115 SizedFontPlatformDataSet* sizedFonts = &gFontPlatformDataCache->add(key,
SizedFontPlatformDataSet()).storedValue->value; | 117 SizedFontPlatformDataSet* sizedFonts = &gFontPlatformDataCache->add(key,
SizedFontPlatformDataSet()).storedValue->value; |
| 116 bool wasEmpty = sizedFonts->isEmpty(); | 118 bool wasEmpty = sizedFonts->isEmpty(); |
| 117 | 119 |
| 118 // Take a different size instance of the same font before adding an entr
y to |sizedFont|. | 120 // Take a different size instance of the same font before adding an entr
y to |sizedFont|. |
| 119 FontPlatformData* anotherSize = wasEmpty ? nullptr : sizedFonts->begin()
->value.get(); | 121 FontPlatformData* anotherSize = wasEmpty ? nullptr : sizedFonts->begin()
->value.get(); |
| 120 auto addResult = sizedFonts->add(roundedSize, nullptr); | 122 auto addResult = sizedFonts->add(roundedSize, nullptr); |
| 121 OwnPtr<FontPlatformData>* found = &addResult.storedValue->value; | 123 std::unique_ptr<FontPlatformData>* found = &addResult.storedValue->value
; |
| 122 if (addResult.isNewEntry) { | 124 if (addResult.isNewEntry) { |
| 123 if (wasEmpty) | 125 if (wasEmpty) |
| 124 *found = createFontPlatformData(fontDescription, creationParams,
size); | 126 *found = createFontPlatformData(fontDescription, creationParams,
size); |
| 125 else if (anotherSize) | 127 else if (anotherSize) |
| 126 *found = scaleFontPlatformData(*anotherSize, fontDescription, cr
eationParams, size); | 128 *found = scaleFontPlatformData(*anotherSize, fontDescription, cr
eationParams, size); |
| 127 } | 129 } |
| 128 | 130 |
| 129 result = found->get(); | 131 result = found->get(); |
| 130 foundResult = result || !addResult.isNewEntry; | 132 foundResult = result || !addResult.isNewEntry; |
| 131 } | 133 } |
| 132 | 134 |
| 133 if (!foundResult && !checkingAlternateName && creationParams.creationType()
== CreateFontByFamily) { | 135 if (!foundResult && !checkingAlternateName && creationParams.creationType()
== CreateFontByFamily) { |
| 134 // We were unable to find a font. We have a small set of fonts that we a
lias to other names, | 136 // We were unable to find a font. We have a small set of fonts that we a
lias to other names, |
| 135 // e.g., Arial/Helvetica, Courier/Courier New, etc. Try looking up the f
ont under the aliased name. | 137 // e.g., Arial/Helvetica, Courier/Courier New, etc. Try looking up the f
ont under the aliased name. |
| 136 const AtomicString& alternateName = alternateFamilyName(creationParams.f
amily()); | 138 const AtomicString& alternateName = alternateFamilyName(creationParams.f
amily()); |
| 137 if (!alternateName.isEmpty()) { | 139 if (!alternateName.isEmpty()) { |
| 138 FontFaceCreationParams createByAlternateFamily(alternateName); | 140 FontFaceCreationParams createByAlternateFamily(alternateName); |
| 139 result = getFontPlatformData(fontDescription, createByAlternateFamil
y, true); | 141 result = getFontPlatformData(fontDescription, createByAlternateFamil
y, true); |
| 140 } | 142 } |
| 141 if (result) { | 143 if (result) { |
| 142 // Cache the result under the old name. | 144 // Cache the result under the old name. |
| 143 auto adding = &gFontPlatformDataCache->add(key, SizedFontPlatformDat
aSet()).storedValue->value; | 145 auto adding = &gFontPlatformDataCache->add(key, SizedFontPlatformDat
aSet()).storedValue->value; |
| 144 adding->set(roundedSize, adoptPtr(new FontPlatformData(*result))); | 146 adding->set(roundedSize, wrapUnique(new FontPlatformData(*result))); |
| 145 } | 147 } |
| 146 } | 148 } |
| 147 | 149 |
| 148 return result; | 150 return result; |
| 149 } | 151 } |
| 150 | 152 |
| 151 PassOwnPtr<FontPlatformData> FontCache::scaleFontPlatformData(const FontPlatform
Data& fontPlatformData, const FontDescription& fontDescription, const FontFaceCr
eationParams& creationParams, float fontSize) | 153 std::unique_ptr<FontPlatformData> FontCache::scaleFontPlatformData(const FontPla
tformData& fontPlatformData, const FontDescription& fontDescription, const FontF
aceCreationParams& creationParams, float fontSize) |
| 152 { | 154 { |
| 153 #if OS(MACOSX) | 155 #if OS(MACOSX) |
| 154 return createFontPlatformData(fontDescription, creationParams, fontSize); | 156 return createFontPlatformData(fontDescription, creationParams, fontSize); |
| 155 #else | 157 #else |
| 156 return adoptPtr(new FontPlatformData(fontPlatformData, fontSize)); | 158 return wrapUnique(new FontPlatformData(fontPlatformData, fontSize)); |
| 157 #endif | 159 #endif |
| 158 } | 160 } |
| 159 | 161 |
| 160 ShapeCache* FontCache::getShapeCache(const FallbackListCompositeKey& key) | 162 ShapeCache* FontCache::getShapeCache(const FallbackListCompositeKey& key) |
| 161 { | 163 { |
| 162 if (!gFallbackListShaperCache) | 164 if (!gFallbackListShaperCache) |
| 163 gFallbackListShaperCache = new FallbackListShaperCache; | 165 gFallbackListShaperCache = new FallbackListShaperCache; |
| 164 | 166 |
| 165 FallbackListShaperCache::iterator it = gFallbackListShaperCache->find(key); | 167 FallbackListShaperCache::iterator it = gFallbackListShaperCache->find(key); |
| 166 ShapeCache* result = nullptr; | 168 ShapeCache* result = nullptr; |
| 167 if (it == gFallbackListShaperCache->end()) { | 169 if (it == gFallbackListShaperCache->end()) { |
| 168 result = new ShapeCache(); | 170 result = new ShapeCache(); |
| 169 gFallbackListShaperCache->set(key, adoptPtr(result)); | 171 gFallbackListShaperCache->set(key, wrapUnique(result)); |
| 170 } else { | 172 } else { |
| 171 result = it->value.get(); | 173 result = it->value.get(); |
| 172 } | 174 } |
| 173 | 175 |
| 174 ASSERT(result); | 176 ASSERT(result); |
| 175 return result; | 177 return result; |
| 176 } | 178 } |
| 177 | 179 |
| 178 typedef HashMap<FontCache::FontFileKey, RefPtr<OpenTypeVerticalData>, IntHash<Fo
ntCache::FontFileKey>, UnsignedWithZeroKeyHashTraits<FontCache::FontFileKey>> Fo
ntVerticalDataCache; | 180 typedef HashMap<FontCache::FontFileKey, RefPtr<OpenTypeVerticalData>, IntHash<Fo
ntCache::FontFileKey>, UnsignedWithZeroKeyHashTraits<FontCache::FontFileKey>> Fo
ntVerticalDataCache; |
| 179 | 181 |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 case USCRIPT_SIMPLIFIED_HAN: | 422 case USCRIPT_SIMPLIFIED_HAN: |
| 421 return "zh-Hans"; | 423 return "zh-Hans"; |
| 422 case USCRIPT_TRADITIONAL_HAN: | 424 case USCRIPT_TRADITIONAL_HAN: |
| 423 return "zh-Hant"; | 425 return "zh-Hant"; |
| 424 default: | 426 default: |
| 425 return locale.ascii(); | 427 return locale.ascii(); |
| 426 } | 428 } |
| 427 } | 429 } |
| 428 | 430 |
| 429 } // namespace blink | 431 } // namespace blink |
| OLD | NEW |