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

Side by Side Diff: Source/core/css/CSSFontFaceSource.cpp

Issue 23446007: Use unicode-range to prevent unnecessary @font-face donwnloads (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebase and add toSegmentedFontData() Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/css/CSSFontFaceSource.h ('k') | Source/core/css/CSSSegmentedFontFace.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007, 2008, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2007, 2008, 2010, 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 if (m_font) 61 if (m_font)
62 m_font->removeClient(this); 62 m_font->removeClient(this);
63 pruneTable(); 63 pruneTable();
64 } 64 }
65 65
66 void CSSFontFaceSource::pruneTable() 66 void CSSFontFaceSource::pruneTable()
67 { 67 {
68 if (m_fontDataTable.isEmpty()) 68 if (m_fontDataTable.isEmpty())
69 return; 69 return;
70 70
71 for (FontDataTable::iterator it = m_fontDataTable.begin(); it != m_fontDataT able.end(); ++it) {
72 if (SimpleFontData* fontData = it->value.get())
73 fontData->clearCSSFontFaceSource();
74 }
71 m_fontDataTable.clear(); 75 m_fontDataTable.clear();
72 } 76 }
73 77
74 bool CSSFontFaceSource::isLocal() const 78 bool CSSFontFaceSource::isLocal() const
75 { 79 {
76 if (m_font) 80 if (m_font)
77 return false; 81 return false;
78 #if ENABLE(SVG_FONTS) 82 #if ENABLE(SVG_FONTS)
79 if (m_svgFontFaceElement) 83 if (m_svgFontFaceElement)
80 return false; 84 return false;
81 #endif 85 #endif
82 return true; 86 return true;
83 } 87 }
84 88
89 bool CSSFontFaceSource::isLoading() const
90 {
91 if (m_font)
92 return !m_font->stillNeedsLoad() && !m_font->isLoaded();
93 return false;
94 }
95
85 bool CSSFontFaceSource::isLoaded() const 96 bool CSSFontFaceSource::isLoaded() const
86 { 97 {
87 if (m_font) 98 if (m_font)
88 return m_font->isLoaded(); 99 return m_font->isLoaded();
89 return true; 100 return true;
90 } 101 }
91 102
92 bool CSSFontFaceSource::isValid() const 103 bool CSSFontFaceSource::isValid() const
93 { 104 {
94 if (m_font) 105 if (m_font)
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 fontDescription.orientation(), fontDescription.widthVariant( )), true, false); 197 fontDescription.orientation(), fontDescription.widthVariant( )), true, false);
187 } 198 }
188 } else { 199 } else {
189 #if ENABLE(SVG_FONTS) 200 #if ENABLE(SVG_FONTS)
190 // In-Document SVG Fonts 201 // In-Document SVG Fonts
191 if (m_svgFontFaceElement) 202 if (m_svgFontFaceElement)
192 fontData = SimpleFontData::create(SVGFontData::create(m_svgFontF aceElement.get()), fontDescription.computedPixelSize(), syntheticBold, synthetic Italic); 203 fontData = SimpleFontData::create(SVGFontData::create(m_svgFontF aceElement.get()), fontDescription.computedPixelSize(), syntheticBold, synthetic Italic);
193 #endif 204 #endif
194 } 205 }
195 } else { 206 } else {
196 // Kick off the load. Do it soon rather than now, because we may be in t he middle of layout,
197 // and the loader may invoke arbitrary delegate or event handler code.
198 fontSelector->beginLoadingFontSoon(m_font.get());
199
200 // This temporary font is not retained and should not be returned. 207 // This temporary font is not retained and should not be returned.
201 FontCachePurgePreventer fontCachePurgePreventer; 208 FontCachePurgePreventer fontCachePurgePreventer;
202 SimpleFontData* temporaryFont = fontCache()->getNonRetainedLastResortFal lbackFont(fontDescription); 209 SimpleFontData* temporaryFont = fontCache()->getNonRetainedLastResortFal lbackFont(fontDescription);
203 fontData = SimpleFontData::create(temporaryFont->platformData(), true, t rue); 210 fontData = SimpleFontData::create(temporaryFont->platformData(), true, t rue);
211 fontData->setCSSFontFaceSource(this);
204 } 212 }
205 213
206 return fontData; // No release, because fontData is a reference to a RefPtr that is held in the m_fontDataTable. 214 return fontData; // No release, because fontData is a reference to a RefPtr that is held in the m_fontDataTable.
207 } 215 }
208 216
209 #if ENABLE(SVG_FONTS) 217 #if ENABLE(SVG_FONTS)
210 SVGFontFaceElement* CSSFontFaceSource::svgFontFaceElement() const 218 SVGFontFaceElement* CSSFontFaceSource::svgFontFaceElement() const
211 { 219 {
212 return m_svgFontFaceElement.get(); 220 return m_svgFontFaceElement.get();
213 } 221 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 return false; 255 return false;
248 return fontCache()->isPlatformFontAvailable(fontDescription, m_string, true) ; 256 return fontCache()->isPlatformFontAvailable(fontDescription, m_string, true) ;
249 } 257 }
250 258
251 void CSSFontFaceSource::willUseFontData() 259 void CSSFontFaceSource::willUseFontData()
252 { 260 {
253 if (m_font) 261 if (m_font)
254 m_font->willUseFontData(); 262 m_font->willUseFontData();
255 } 263 }
256 264
265 void CSSFontFaceSource::beginLoadingFontSoon()
266 {
267 ASSERT(m_face);
268 ASSERT(m_font);
269 m_face->beginLoadingFontSoon(m_font.get());
270 }
271
257 void CSSFontFaceSource::FontLoadHistograms::loadStarted() 272 void CSSFontFaceSource::FontLoadHistograms::loadStarted()
258 { 273 {
259 if (!m_loadStartTime) 274 if (!m_loadStartTime)
260 m_loadStartTime = currentTimeMS(); 275 m_loadStartTime = currentTimeMS();
261 } 276 }
262 277
263 void CSSFontFaceSource::FontLoadHistograms::recordLocalFont(bool loadSuccess) 278 void CSSFontFaceSource::FontLoadHistograms::recordLocalFont(bool loadSuccess)
264 { 279 {
265 if (!m_loadStartTime) { 280 if (!m_loadStartTime) {
266 HistogramSupport::histogramEnumeration("WebFont.LocalFontUsed", loadSucc ess ? 1 : 0, 2); 281 HistogramSupport::histogramEnumeration("WebFont.LocalFontUsed", loadSucc ess ? 1 : 0, 2);
(...skipping 21 matching lines...) Expand all
288 if (size < 50 * 1024) 303 if (size < 50 * 1024)
289 return "WebFont.DownloadTime.1.10KBTo50KB"; 304 return "WebFont.DownloadTime.1.10KBTo50KB";
290 if (size < 100 * 1024) 305 if (size < 100 * 1024)
291 return "WebFont.DownloadTime.2.50KBTo100KB"; 306 return "WebFont.DownloadTime.2.50KBTo100KB";
292 if (size < 1024 * 1024) 307 if (size < 1024 * 1024)
293 return "WebFont.DownloadTime.3.100KBTo1MB"; 308 return "WebFont.DownloadTime.3.100KBTo1MB";
294 return "WebFont.DownloadTime.4.Over1MB"; 309 return "WebFont.DownloadTime.4.Over1MB";
295 } 310 }
296 311
297 } 312 }
OLDNEW
« no previous file with comments | « Source/core/css/CSSFontFaceSource.h ('k') | Source/core/css/CSSSegmentedFontFace.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698