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

Unified Diff: Source/core/css/CSSFontFace.cpp

Issue 63713002: Initiate webfont download right after style recalc (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix zoom-zoom-coords.xhtml Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/css/CSSFontFace.cpp
diff --git a/Source/core/css/CSSFontFace.cpp b/Source/core/css/CSSFontFace.cpp
index 3d149be9436a4d22638f12b7ed754145c27de4bb..5ad1bf1f5ac7b7069a109f696a608ecfb014f1cf 100644
--- a/Source/core/css/CSSFontFace.cpp
+++ b/Source/core/css/CSSFontFace.cpp
@@ -84,6 +84,7 @@ void CSSFontFace::fontLoaded(CSSFontFaceSource* source)
{
if (source != m_activeSource)
return;
+ m_activeSource = 0;
// FIXME: Can we assert that m_segmentedFontFace is non-null? That may
// require stopping in-progress font loading when the last
@@ -137,7 +138,16 @@ PassRefPtr<SimpleFontData> CSSFontFace::getFontData(const FontDescription& fontD
void CSSFontFace::willUseFontData(const FontDescription& fontDescription)
{
- if (loadStatus() != FontFace::Unloaded)
+ if (loadStatus() != FontFace::Unloaded || m_activeSource)
+ return;
+
+ // Kicks off font load here only if the @font-face has no unicode-range.
+ // @font-faces with unicode-range will be loaded when a GlyphPage for the
+ // font is created.
+ // FIXME: Pass around the text to render from RenderText, and kick download
+ // if m_ranges intersects with the text. Make sure this does not cause
+ // performance regression.
+ if (!m_ranges.isEntireRange())
return;
ASSERT(m_segmentedFontFace);
@@ -146,8 +156,10 @@ void CSSFontFace::willUseFontData(const FontDescription& fontDescription)
for (size_t i = 0; i < size; ++i) {
if (!m_sources[i]->isValid() || (m_sources[i]->isLocal() && !m_sources[i]->isLocalFontAvailable(fontDescription)))
continue;
- if (!m_sources[i]->isLocal())
+ if (!m_sources[i]->isLocal()) {
+ m_activeSource = m_sources[i].get();
m_sources[i]->willUseFontData();
+ }
break;
}
}
@@ -180,8 +192,8 @@ bool CSSFontFace::UnicodeRangeSet::intersectsWith(const String& text) const
{
if (text.isEmpty())
return false;
- if (m_ranges.isEmpty())
- return true; // Empty UnicodeRangeSet represents the whole code space.
+ if (isEntireRange())
+ return true;
// FIXME: This takes O(text.length() * m_ranges.size()) time. It would be
// better to make m_ranges sorted and use binary search.

Powered by Google App Engine
This is Rietveld 408576698