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/FontLoader.h" | 9 #include "core/css/FontLoader.h" |
10 #include "core/page/NetworkStateNotifier.h" | 10 #include "core/page/NetworkStateNotifier.h" |
| 11 #include "platform/Histogram.h" |
11 #include "platform/RuntimeEnabledFeatures.h" | 12 #include "platform/RuntimeEnabledFeatures.h" |
12 #include "platform/fonts/FontCache.h" | 13 #include "platform/fonts/FontCache.h" |
13 #include "platform/fonts/FontDescription.h" | 14 #include "platform/fonts/FontDescription.h" |
14 #include "platform/fonts/SimpleFontData.h" | 15 #include "platform/fonts/SimpleFontData.h" |
15 #include "public/platform/Platform.h" | 16 #include "public/platform/Platform.h" |
16 #include "wtf/CurrentTime.h" | 17 #include "wtf/CurrentTime.h" |
17 | 18 |
18 namespace blink { | 19 namespace blink { |
19 | 20 |
20 RemoteFontFaceSource::RemoteFontFaceSource(FontResource* font, PassRefPtrWillBeR
awPtr<FontLoader> fontLoader, FontDisplay display) | 21 RemoteFontFaceSource::RemoteFontFaceSource(FontResource* font, PassRefPtrWillBeR
awPtr<FontLoader> fontLoader, FontDisplay display) |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 { | 213 { |
213 m_isLongLimitExceeded = true; | 214 m_isLongLimitExceeded = true; |
214 recordInterventionResult(isInterventionTriggered); | 215 recordInterventionResult(isInterventionTriggered); |
215 } | 216 } |
216 | 217 |
217 void RemoteFontFaceSource::FontLoadHistograms::recordFallbackTime(const FontReso
urce* font) | 218 void RemoteFontFaceSource::FontLoadHistograms::recordFallbackTime(const FontReso
urce* font) |
218 { | 219 { |
219 if (m_fallbackPaintTime <= 0) | 220 if (m_fallbackPaintTime <= 0) |
220 return; | 221 return; |
221 int duration = static_cast<int>(currentTimeMS() - m_fallbackPaintTime); | 222 int duration = static_cast<int>(currentTimeMS() - m_fallbackPaintTime); |
222 Platform::current()->histogramCustomCounts("WebFont.BlankTextShownTime", dur
ation, 0, 10000, 50); | 223 DEFINE_STATIC_LOCAL(CustomCountHistogram, blankTextShownTimeHistogram, ("Web
Font.BlankTextShownTime", 0, 10000, 50)); |
| 224 blankTextShownTimeHistogram.count(duration); |
223 m_fallbackPaintTime = -1; | 225 m_fallbackPaintTime = -1; |
224 } | 226 } |
225 | 227 |
226 void RemoteFontFaceSource::FontLoadHistograms::recordRemoteFont(const FontResour
ce* font) | 228 void RemoteFontFaceSource::FontLoadHistograms::recordRemoteFont(const FontResour
ce* font) |
227 { | 229 { |
228 if (m_loadStartTime > 0 && font && !font->isLoading()) { | 230 if (m_loadStartTime > 0 && font && !font->isLoading()) { |
229 int duration = static_cast<int>(currentTimeMS() - m_loadStartTime); | 231 int duration = static_cast<int>(currentTimeMS() - m_loadStartTime); |
230 Platform::current()->histogramCustomCounts(histogramName(font), duration
, 0, 10000, 50); | 232 recordLoadTimeHistogram(font, duration); |
231 m_loadStartTime = -1; | 233 m_loadStartTime = -1; |
232 | 234 |
233 enum { Miss, Hit, DataUrl, CacheHitEnumMax }; | 235 enum { Miss, Hit, DataUrl, CacheHitEnumMax }; |
234 int histogramValue = font->url().protocolIsData() ? DataUrl | 236 int histogramValue = font->url().protocolIsData() ? DataUrl |
235 : font->response().wasCached() ? Hit | 237 : font->response().wasCached() ? Hit |
236 : Miss; | 238 : Miss; |
237 Platform::current()->histogramEnumeration("WebFont.CacheHit", histogramV
alue, CacheHitEnumMax); | 239 Platform::current()->histogramEnumeration("WebFont.CacheHit", histogramV
alue, CacheHitEnumMax); |
238 | 240 |
239 enum { CORSFail, CORSSuccess, CORSEnumMax }; | 241 enum { CORSFail, CORSSuccess, CORSEnumMax }; |
240 int corsValue = font->isCORSFailed() ? CORSFail : CORSSuccess; | 242 int corsValue = font->isCORSFailed() ? CORSFail : CORSSuccess; |
241 Platform::current()->histogramEnumeration("WebFont.CORSSuccess", corsVal
ue, CORSEnumMax); | 243 Platform::current()->histogramEnumeration("WebFont.CORSSuccess", corsVal
ue, CORSEnumMax); |
242 } | 244 } |
243 } | 245 } |
244 | 246 |
245 const char* RemoteFontFaceSource::FontLoadHistograms::histogramName(const FontRe
source* font) | 247 void RemoteFontFaceSource::FontLoadHistograms::recordLoadTimeHistogram(const Fon
tResource* font, int duration) |
246 { | 248 { |
247 if (font->errorOccurred()) | 249 if (font->errorOccurred()) { |
248 return "WebFont.DownloadTime.LoadError"; | 250 DEFINE_STATIC_LOCAL(CustomCountHistogram, loadErrorHistogram, ("WebFont.
DownloadTime.LoadError", 0, 10000, 50)); |
| 251 loadErrorHistogram.count(duration); |
| 252 return; |
| 253 } |
249 | 254 |
250 unsigned size = font->encodedSize(); | 255 unsigned size = font->encodedSize(); |
251 if (size < 10 * 1024) | 256 if (size < 10 * 1024) { |
252 return "WebFont.DownloadTime.0.Under10KB"; | 257 DEFINE_STATIC_LOCAL(CustomCountHistogram, under10kHistogram, ("WebFont.D
ownloadTime.0.Under10KB", 0, 10000, 50)); |
253 if (size < 50 * 1024) | 258 under10kHistogram.count(duration); |
254 return "WebFont.DownloadTime.1.10KBTo50KB"; | 259 return; |
255 if (size < 100 * 1024) | 260 } |
256 return "WebFont.DownloadTime.2.50KBTo100KB"; | 261 if (size < 50 * 1024) { |
257 if (size < 1024 * 1024) | 262 DEFINE_STATIC_LOCAL(CustomCountHistogram, under50kHistogram, ("WebFont.D
ownloadTime.1.10KBTo50KB", 0, 10000, 50)); |
258 return "WebFont.DownloadTime.3.100KBTo1MB"; | 263 under50kHistogram.count(duration); |
259 return "WebFont.DownloadTime.4.Over1MB"; | 264 return; |
| 265 } |
| 266 if (size < 100 * 1024) { |
| 267 DEFINE_STATIC_LOCAL(CustomCountHistogram, under100kHistogram, ("WebFont.
DownloadTime.2.50KBTo100KB", 0, 10000, 50)); |
| 268 under100kHistogram.count(duration); |
| 269 return; |
| 270 } |
| 271 if (size < 1024 * 1024) { |
| 272 DEFINE_STATIC_LOCAL(CustomCountHistogram, under1mbHistogram, ("WebFont.D
ownloadTime.3.100KBTo1MB", 0, 10000, 50)); |
| 273 under1mbHistogram.count(duration); |
| 274 return; |
| 275 } |
| 276 DEFINE_STATIC_LOCAL(CustomCountHistogram, over1mbHistogram, ("WebFont.Downlo
adTime.4.Over1MB", 0, 10000, 50)); |
| 277 over1mbHistogram.count(duration); |
260 } | 278 } |
261 | 279 |
262 void RemoteFontFaceSource::FontLoadHistograms::recordInterventionResult(bool tri
ggered) | 280 void RemoteFontFaceSource::FontLoadHistograms::recordInterventionResult(bool tri
ggered) |
263 { | 281 { |
264 if (!RuntimeEnabledFeatures::webFontsInterventionEnabled()) | 282 if (!RuntimeEnabledFeatures::webFontsInterventionEnabled()) |
265 return; | 283 return; |
266 // interventionResult takes 0-3 values. | 284 // interventionResult takes 0-3 values. |
267 int interventionResult = 0; | 285 int interventionResult = 0; |
268 if (m_isLongLimitExceeded) | 286 if (m_isLongLimitExceeded) |
269 interventionResult |= 1 << 0; | 287 interventionResult |= 1 << 0; |
270 if (triggered) | 288 if (triggered) |
271 interventionResult |= 1 << 1; | 289 interventionResult |= 1 << 1; |
272 const int boundary = 1 << 2; | 290 const int boundary = 1 << 2; |
273 Platform::current()->histogramEnumeration("WebFont.InterventionResult", inte
rventionResult, boundary); | 291 Platform::current()->histogramEnumeration("WebFont.InterventionResult", inte
rventionResult, boundary); |
274 } | 292 } |
275 | 293 |
276 } // namespace blink | 294 } // namespace blink |
OLD | NEW |