Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/css/RemoteFontFaceSource.h" | 5 #include "core/css/RemoteFontFaceSource.h" |
| 6 | 6 |
| 7 #include "core/css/CSSCustomFontData.h" | 7 #include "core/css/CSSCustomFontData.h" |
| 8 #include "core/css/CSSFontFace.h" | 8 #include "core/css/CSSFontFace.h" |
| 9 #include "core/css/CSSFontSelector.h" | 9 #include "core/css/CSSFontSelector.h" |
| 10 #include "core/dom/Document.h" | 10 #include "core/dom/Document.h" |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 147 void RemoteFontFaceSource::fontLoadLongLimitExceeded(FontResource*) { | 147 void RemoteFontFaceSource::fontLoadLongLimitExceeded(FontResource*) { |
| 148 if (m_display == FontDisplayBlock || | 148 if (m_display == FontDisplayBlock || |
| 149 (!m_isInterventionTriggered && m_display == FontDisplayAuto)) | 149 (!m_isInterventionTriggered && m_display == FontDisplayAuto)) |
| 150 switchToSwapPeriod(); | 150 switchToSwapPeriod(); |
| 151 else if (m_display == FontDisplayFallback) | 151 else if (m_display == FontDisplayFallback) |
| 152 switchToFailurePeriod(); | 152 switchToFailurePeriod(); |
| 153 | 153 |
| 154 m_histograms.longLimitExceeded(m_isInterventionTriggered); | 154 m_histograms.longLimitExceeded(m_isInterventionTriggered); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void RemoteFontFaceSource::switchToSwapPeriod() { | 157 void RemoteFontFaceSource::willReloadAfterDiskCacheMiss(const FontResource*) { |
| 158 ASSERT(m_period == BlockPeriod); | 158 if (m_period == SwapPeriod || m_period == FailurePeriod) |
| 159 m_period = SwapPeriod; | 159 didBecomeVisibleFallback(); |
|
Kunihiko Sakamoto
2016/10/11 08:07:38
We should move to next period here, instead of kee
Shao-Chuan Lee
2016/10/11 10:58:48
Done.
| |
| 160 } | |
| 160 | 161 |
| 162 void RemoteFontFaceSource::didBecomeVisibleFallback() { | |
| 161 pruneTable(); | 163 pruneTable(); |
| 162 if (m_face) { | 164 if (m_face) { |
| 163 m_fontSelector->fontFaceInvalidated(); | 165 m_fontSelector->fontFaceInvalidated(); |
| 164 m_face->didBecomeVisibleFallback(this); | 166 m_face->didBecomeVisibleFallback(this); |
| 165 } | 167 } |
| 168 } | |
| 166 | 169 |
| 170 void RemoteFontFaceSource::switchToSwapPeriod() { | |
| 171 DCHECK(m_period == BlockPeriod); | |
| 172 m_period = SwapPeriod; | |
| 173 didBecomeVisibleFallback(); | |
| 167 m_histograms.recordFallbackTime(m_font.get()); | 174 m_histograms.recordFallbackTime(m_font.get()); |
| 168 } | 175 } |
| 169 | 176 |
| 170 void RemoteFontFaceSource::switchToFailurePeriod() { | 177 void RemoteFontFaceSource::switchToFailurePeriod() { |
| 171 if (m_period == BlockPeriod) | 178 if (m_period == BlockPeriod) |
| 172 switchToSwapPeriod(); | 179 switchToSwapPeriod(); |
| 173 ASSERT(m_period == SwapPeriod); | 180 DCHECK(m_period == SwapPeriod); |
| 174 m_period = FailurePeriod; | 181 m_period = FailurePeriod; |
| 175 } | 182 } |
| 176 | 183 |
| 177 bool RemoteFontFaceSource::shouldTriggerWebFontsIntervention() { | 184 bool RemoteFontFaceSource::shouldTriggerWebFontsIntervention() { |
| 178 if (RuntimeEnabledFeatures::webFontsInterventionTriggerEnabled()) | 185 if (RuntimeEnabledFeatures::webFontsInterventionTriggerEnabled()) |
| 179 return true; | 186 return true; |
| 180 if (m_histograms.dataSource() == FontLoadHistograms::FromMemoryCache || | 187 if (m_histograms.dataSource() == FontLoadHistograms::FromMemoryCache || |
| 181 m_histograms.dataSource() == FontLoadHistograms::FromDataURL) | 188 m_histograms.dataSource() == FontLoadHistograms::FromDataURL) |
| 182 return false; | 189 return false; |
| 183 | 190 |
| 184 bool isV2Enabled = | 191 bool isV2Enabled = |
| 185 RuntimeEnabledFeatures::webFontsInterventionV2With2GEnabled() || | 192 RuntimeEnabledFeatures::webFontsInterventionV2With2GEnabled() || |
| 186 RuntimeEnabledFeatures::webFontsInterventionV2With3GEnabled() || | 193 RuntimeEnabledFeatures::webFontsInterventionV2With3GEnabled() || |
| 187 RuntimeEnabledFeatures::webFontsInterventionV2WithSlow2GEnabled(); | 194 RuntimeEnabledFeatures::webFontsInterventionV2WithSlow2GEnabled(); |
| 188 | 195 |
| 189 bool networkIsSlow = | 196 bool networkIsSlow = |
| 190 isV2Enabled ? isEffectiveConnectionTypeSlowFor(m_fontSelector->document()) | 197 isV2Enabled ? isEffectiveConnectionTypeSlowFor(m_fontSelector->document()) |
| 191 : isConnectionTypeSlow(); | 198 : isConnectionTypeSlow(); |
| 192 | 199 |
| 193 return networkIsSlow && m_display == FontDisplayAuto; | 200 return networkIsSlow && m_display == FontDisplayAuto; |
| 194 } | 201 } |
| 195 | 202 |
| 203 bool RemoteFontFaceSource::shouldUseInvisibleFallback() const { | |
| 204 if (m_period == BlockPeriod) | |
| 205 return true; | |
| 206 if (m_font->resourceRequest().isCacheAwareLoadingActivated()) { | |
| 207 switch (m_display) { | |
| 208 case FontDisplaySwap: | |
| 209 case FontDisplayFallback: | |
| 210 case FontDisplayOptional: | |
| 211 return true; | |
| 212 case FontDisplayAuto: | |
| 213 case FontDisplayBlock: | |
| 214 break; | |
| 215 case FontDisplayEnumMax: | |
| 216 NOTREACHED(); | |
| 217 } | |
| 218 } | |
| 219 return false; | |
| 220 } | |
| 221 | |
| 196 PassRefPtr<SimpleFontData> RemoteFontFaceSource::createFontData( | 222 PassRefPtr<SimpleFontData> RemoteFontFaceSource::createFontData( |
| 197 const FontDescription& fontDescription) { | 223 const FontDescription& fontDescription) { |
| 198 if (!isLoaded()) | 224 if (!isLoaded()) |
| 199 return createLoadingFallbackFontData(fontDescription); | 225 return createLoadingFallbackFontData(fontDescription); |
| 200 | 226 |
| 201 if (!m_font->ensureCustomFontData() || m_period == FailurePeriod) | 227 if (!m_font->ensureCustomFontData() || m_period == FailurePeriod) |
| 202 return nullptr; | 228 return nullptr; |
| 203 | 229 |
| 204 m_histograms.recordFallbackTime(m_font.get()); | 230 m_histograms.recordFallbackTime(m_font.get()); |
| 205 | 231 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 216 // This temporary font is not retained and should not be returned. | 242 // This temporary font is not retained and should not be returned. |
| 217 FontCachePurgePreventer fontCachePurgePreventer; | 243 FontCachePurgePreventer fontCachePurgePreventer; |
| 218 SimpleFontData* temporaryFont = | 244 SimpleFontData* temporaryFont = |
| 219 FontCache::fontCache()->getNonRetainedLastResortFallbackFont( | 245 FontCache::fontCache()->getNonRetainedLastResortFallbackFont( |
| 220 fontDescription); | 246 fontDescription); |
| 221 if (!temporaryFont) { | 247 if (!temporaryFont) { |
| 222 ASSERT_NOT_REACHED(); | 248 ASSERT_NOT_REACHED(); |
| 223 return nullptr; | 249 return nullptr; |
| 224 } | 250 } |
| 225 RefPtr<CSSCustomFontData> cssFontData = CSSCustomFontData::create( | 251 RefPtr<CSSCustomFontData> cssFontData = CSSCustomFontData::create( |
| 226 this, m_period == BlockPeriod ? CSSCustomFontData::InvisibleFallback | 252 this, shouldUseInvisibleFallback() ? CSSCustomFontData::InvisibleFallback |
| 227 : CSSCustomFontData::VisibleFallback); | 253 : CSSCustomFontData::VisibleFallback); |
| 228 return SimpleFontData::create(temporaryFont->platformData(), cssFontData); | 254 return SimpleFontData::create(temporaryFont->platformData(), cssFontData); |
| 229 } | 255 } |
| 230 | 256 |
| 231 void RemoteFontFaceSource::beginLoadIfNeeded() { | 257 void RemoteFontFaceSource::beginLoadIfNeeded() { |
| 232 if (m_fontSelector->document() && m_font->stillNeedsLoad()) { | 258 if (m_fontSelector->document() && m_font->stillNeedsLoad()) { |
| 233 m_fontSelector->document()->fetcher()->startLoad(m_font); | 259 m_fontSelector->document()->fetcher()->startLoad(m_font); |
| 234 m_histograms.loadStarted(); | 260 m_histograms.loadStarted(); |
| 235 } | 261 } |
| 236 m_font->startLoadLimitTimersIfNeeded(); | 262 m_font->startLoadLimitTimersIfNeeded(); |
| 237 | 263 |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 419 return Miss; | 445 return Miss; |
| 420 case FromUnknown: | 446 case FromUnknown: |
| 421 // Fall through. | 447 // Fall through. |
| 422 default: | 448 default: |
| 423 NOTREACHED(); | 449 NOTREACHED(); |
| 424 } | 450 } |
| 425 return Miss; | 451 return Miss; |
| 426 } | 452 } |
| 427 | 453 |
| 428 } // namespace blink | 454 } // namespace blink |
| OLD | NEW |