Changeset 275488 in webkit
- Timestamp:
- Apr 5, 2021 9:18:26 PM (3 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r275485 r275488 1 2021-04-05 Simon Fraser <simon.fraser@apple.com> 2 3 Wasted vector capacity in CSSSegmentedFontFace 4 https://bugs.webkit.org/show_bug.cgi?id=224167 5 6 Reviewed by Myles C. Maxfield. 7 8 Shrink FontRanges.m_ranges. This saves about 12KB on youtube.com. 9 10 * css/CSSSegmentedFontFace.cpp: 11 (WebCore::CSSSegmentedFontFace::fontRanges): 12 * platform/graphics/FontRanges.h: 13 (WebCore::FontRanges::shrinkToFit): 14 1 15 2021-04-05 Chris Dumez <cdumez@apple.com> 2 16 -
trunk/Source/WebCore/css/CSSSegmentedFontFace.cpp
r256659 r275488 109 109 FontRanges CSSSegmentedFontFace::fontRanges(const FontDescription& fontDescription) 110 110 { 111 auto addResult = m_cache.add(FontDescriptionKey(fontDescription), FontRanges()); 112 auto& ranges = addResult.iterator->value; 113 114 if (!addResult.isNewEntry) 115 return ranges; 116 111 117 auto desiredRequest = fontDescription.fontSelectionRequest(); 112 118 113 auto addResult = m_cache.add(FontDescriptionKey(fontDescription), FontRanges()); 114 auto& result = addResult.iterator->value; 119 for (auto& face : m_fontFaces) { 120 if (face->computeFailureState()) 121 continue; 115 122 116 if (addResult.isNewEntry) { 117 for (auto& face : m_fontFaces) { 118 if (face->computeFailureState()) 119 continue; 123 auto selectionCapabilitiesWrapped = face->fontSelectionCapabilities(); 124 ASSERT(selectionCapabilitiesWrapped.hasValue()); 125 auto selectionCapabilities = selectionCapabilitiesWrapped.value(); 120 126 121 auto selectionCapabilitiesWrapped = face->fontSelectionCapabilities(); 122 ASSERT(selectionCapabilitiesWrapped.hasValue()); 123 auto selectionCapabilities = selectionCapabilitiesWrapped.value(); 127 bool syntheticBold = (fontDescription.fontSynthesis() & FontSynthesisWeight) && !isFontWeightBold(selectionCapabilities.weight.maximum) && isFontWeightBold(desiredRequest.weight); 128 bool syntheticItalic = (fontDescription.fontSynthesis() & FontSynthesisStyle) && !isItalic(selectionCapabilities.slope.maximum) && isItalic(desiredRequest.slope); 124 129 125 bool syntheticBold = (fontDescription.fontSynthesis() & FontSynthesisWeight) && !isFontWeightBold(selectionCapabilities.weight.maximum) && isFontWeightBold(desiredRequest.weight); 126 bool syntheticItalic = (fontDescription.fontSynthesis() & FontSynthesisStyle) && !isItalic(selectionCapabilities.slope.maximum) && isItalic(desiredRequest.slope); 127 128 // Metrics used for layout come from FontRanges::fontForFirstRange(), which assumes that the first font is non-null. 129 auto fontAccessor = CSSFontAccessor::create(face, fontDescription, syntheticBold, syntheticItalic); 130 if (result.isNull() && !fontAccessor->font(ExternalResourceDownloadPolicy::Forbid)) 131 continue; 132 133 auto faceRangesWrapped = face->ranges(); 134 ASSERT(faceRangesWrapped.hasValue()); 135 auto faceRanges = faceRangesWrapped.value(); 136 appendFont(result, WTFMove(fontAccessor), faceRanges); 137 } 130 // Metrics used for layout come from FontRanges::fontForFirstRange(), which assumes that the first font is non-null. 131 auto fontAccessor = CSSFontAccessor::create(face, fontDescription, syntheticBold, syntheticItalic); 132 if (ranges.isNull() && !fontAccessor->font(ExternalResourceDownloadPolicy::Forbid)) 133 continue; 134 135 auto faceRangesWrapped = face->ranges(); 136 ASSERT(faceRangesWrapped.hasValue()); 137 auto faceRanges = faceRangesWrapped.value(); 138 appendFont(ranges, WTFMove(fontAccessor), faceRanges); 138 139 } 139 return result; 140 141 ranges.shrinkToFit(); 142 return ranges; 140 143 } 141 144 -
trunk/Source/WebCore/platform/graphics/FontRanges.h
r226668 r275488 84 84 const Range& rangeAt(unsigned i) const { return m_ranges[i]; } 85 85 86 void shrinkToFit() { m_ranges.shrinkToFit(); } 87 86 88 WEBCORE_EXPORT GlyphData glyphDataForCharacter(UChar32, ExternalResourceDownloadPolicy) const; 87 89 WEBCORE_EXPORT const Font* fontForCharacter(UChar32) const;
Note: See TracChangeset
for help on using the changeset viewer.