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

Side by Side Diff: third_party/WebKit/Source/core/frame/UseCounter.cpp

Issue 2678143003: Move CSS animations use counters to UseCounter (Closed)
Patch Set: Rebase incl FrameHost->Page change, tweak test Created 3 years, 9 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google, Inc. All rights reserved. 2 * Copyright (C) 2012 Google, 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 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after
1094 1094
1095 ASSERT_NOT_REACHED(); 1095 ASSERT_NOT_REACHED();
1096 return 0; 1096 return 0;
1097 } 1097 }
1098 1098
1099 UseCounter::UseCounter(Context context) 1099 UseCounter::UseCounter(Context context)
1100 : m_muteCount(0), 1100 : m_muteCount(0),
1101 m_disableReporting(false), 1101 m_disableReporting(false),
1102 m_context(context), 1102 m_context(context),
1103 m_featuresRecorded(NumberOfFeatures), 1103 m_featuresRecorded(NumberOfFeatures),
1104 m_CSSRecorded(numCSSPropertyIDs) {} 1104 m_CSSRecorded(numCSSPropertyIDs),
1105 m_animatedCSSRecorded(numCSSPropertyIDs) {}
1105 1106
1106 void UseCounter::muteForInspector() { 1107 void UseCounter::muteForInspector() {
1107 m_muteCount++; 1108 m_muteCount++;
1108 } 1109 }
1109 1110
1110 void UseCounter::unmuteForInspector() { 1111 void UseCounter::unmuteForInspector() {
1111 m_muteCount--; 1112 m_muteCount--;
1112 } 1113 }
1113 1114
1114 void UseCounter::recordMeasurement(Feature feature) { 1115 void UseCounter::recordMeasurement(Feature feature) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 // Use the protocol of the document being loaded into the main frame to 1160 // Use the protocol of the document being loaded into the main frame to
1160 // decide whether this page is interesting from a metrics perspective. 1161 // decide whether this page is interesting from a metrics perspective.
1161 // Note that SVGImage cases always have an about:blank URL 1162 // Note that SVGImage cases always have an about:blank URL
1162 if (m_context == DefaultContext && 1163 if (m_context == DefaultContext &&
1163 !SchemeRegistry::shouldTrackUsageMetricsForScheme(url.protocol())) { 1164 !SchemeRegistry::shouldTrackUsageMetricsForScheme(url.protocol())) {
1164 m_disableReporting = true; 1165 m_disableReporting = true;
1165 } 1166 }
1166 1167
1167 m_featuresRecorded.clearAll(); 1168 m_featuresRecorded.clearAll();
1168 m_CSSRecorded.clearAll(); 1169 m_CSSRecorded.clearAll();
1170 m_animatedCSSRecorded.clearAll();
1169 if (!m_disableReporting && !m_muteCount) { 1171 if (!m_disableReporting && !m_muteCount) {
1170 featuresHistogram().count(PageVisits); 1172 featuresHistogram().count(PageVisits);
1171 cssHistogram().count(totalPagesMeasuredCSSSampleId()); 1173 cssHistogram().count(totalPagesMeasuredCSSSampleId());
1174 animatedCSSHistogram().count(totalPagesMeasuredCSSSampleId());
1172 } 1175 }
1173 } 1176 }
1174 1177
1175 void UseCounter::count(const Frame* frame, Feature feature) { 1178 void UseCounter::count(const Frame* frame, Feature feature) {
1176 if (!frame) 1179 if (!frame)
1177 return; 1180 return;
1178 Page* page = frame->page(); 1181 Page* page = frame->page();
1179 if (!page) 1182 if (!page)
1180 return; 1183 return;
1181 1184
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 } 1228 }
1226 1229
1227 void UseCounter::countCrossOriginIframe(const Document& document, 1230 void UseCounter::countCrossOriginIframe(const Document& document,
1228 Feature feature) { 1231 Feature feature) {
1229 LocalFrame* frame = document.frame(); 1232 LocalFrame* frame = document.frame();
1230 if (frame && frame->isCrossOriginSubframe()) 1233 if (frame && frame->isCrossOriginSubframe())
1231 count(frame, feature); 1234 count(frame, feature);
1232 } 1235 }
1233 1236
1234 void UseCounter::count(CSSParserMode cssParserMode, CSSPropertyID property) { 1237 void UseCounter::count(CSSParserMode cssParserMode, CSSPropertyID property) {
1238 // FIXME(suzyh): Count custom properties as well as named properties
1235 DCHECK(isCSSPropertyIDWithName(property)); 1239 DCHECK(isCSSPropertyIDWithName(property));
1236 1240
1237 if (!isUseCounterEnabledForMode(cssParserMode) || m_muteCount) 1241 if (!isUseCounterEnabledForMode(cssParserMode) || m_muteCount)
1238 return; 1242 return;
1239 1243
1240 if (!m_CSSRecorded.quickGet(property)) { 1244 if (!m_CSSRecorded.quickGet(property)) {
1241 // Note that HTTPArchive tooling looks specifically for this event - see 1245 // Note that HTTPArchive tooling looks specifically for this event - see
1242 // https://github.com/HTTPArchive/httparchive/issues/59 1246 // https://github.com/HTTPArchive/httparchive/issues/59
1243 int sampleId = mapCSSPropertyIdToCSSSampleIdForHistogram(property); 1247 int sampleId = mapCSSPropertyIdToCSSSampleIdForHistogram(property);
1244 if (!m_disableReporting) { 1248 if (!m_disableReporting) {
1245 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"), 1249 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"),
1246 "CSSFirstUsed", "feature", sampleId); 1250 "CSSFirstUsed", "feature", sampleId);
1247 cssHistogram().count(sampleId); 1251 cssHistogram().count(sampleId);
1248 } 1252 }
1249 m_CSSRecorded.quickSet(property); 1253 m_CSSRecorded.quickSet(property);
1250 } 1254 }
1251 m_legacyCounter.countCSS(property); 1255 m_legacyCounter.countCSS(property);
1252 } 1256 }
1253 1257
1254 void UseCounter::count(Feature feature) { 1258 void UseCounter::count(Feature feature) {
1255 recordMeasurement(feature); 1259 recordMeasurement(feature);
1256 } 1260 }
1257 1261
1262 bool UseCounter::isCountedAnimatedCSS(CSSPropertyID unresolvedProperty) {
1263 return m_animatedCSSRecorded.quickGet(unresolvedProperty);
1264 }
1265
1266 bool UseCounter::isCountedAnimatedCSS(Document& document,
1267 const String& string) {
1268 Page* page = document.page();
1269 if (!page)
1270 return false;
1271
1272 CSSPropertyID unresolvedProperty = unresolvedCSSPropertyID(string);
1273 if (unresolvedProperty == CSSPropertyInvalid)
1274 return false;
1275 return page->useCounter().isCountedAnimatedCSS(unresolvedProperty);
1276 }
1277
1278 void UseCounter::countAnimatedCSS(const Document& document,
1279 CSSPropertyID property) {
1280 Page* page = document.page();
1281 if (!page)
1282 return;
1283
1284 page->useCounter().countAnimatedCSS(property);
1285 }
1286
1287 void UseCounter::countAnimatedCSS(CSSPropertyID property) {
1288 DCHECK(isCSSPropertyIDWithName(property) || property == CSSPropertyVariable);
1289
1290 if (m_muteCount)
1291 return;
1292
1293 if (!m_animatedCSSRecorded.quickGet(property)) {
1294 int sampleId = mapCSSPropertyIdToCSSSampleIdForHistogram(property);
1295 if (!m_disableReporting) {
1296 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"),
1297 "AnimatedCSSFirstUsed", "feature", sampleId);
1298 animatedCSSHistogram().count(sampleId);
1299 }
1300 m_animatedCSSRecorded.quickSet(property);
1301 }
1302 }
1303
1258 void UseCounter::notifyFeatureCounted(Feature feature) { 1304 void UseCounter::notifyFeatureCounted(Feature feature) {
1259 DCHECK(!m_muteCount); 1305 DCHECK(!m_muteCount);
1260 DCHECK(!m_disableReporting); 1306 DCHECK(!m_disableReporting);
1261 HeapHashSet<Member<Observer>> toBeRemoved; 1307 HeapHashSet<Member<Observer>> toBeRemoved;
1262 for (auto observer : m_observers) { 1308 for (auto observer : m_observers) {
1263 if (observer->onCountFeature(feature)) 1309 if (observer->onCountFeature(feature))
1264 toBeRemoved.insert(observer); 1310 toBeRemoved.insert(observer);
1265 } 1311 }
1266 m_observers.removeAll(toBeRemoved); 1312 m_observers.removeAll(toBeRemoved);
1267 } 1313 }
(...skipping 18 matching lines...) Expand all
1286 EnumerationHistogram& UseCounter::cssHistogram() const { 1332 EnumerationHistogram& UseCounter::cssHistogram() const {
1287 DEFINE_STATIC_LOCAL(blink::EnumerationHistogram, histogram, 1333 DEFINE_STATIC_LOCAL(blink::EnumerationHistogram, histogram,
1288 ("Blink.UseCounter.CSSProperties", kMaximumCSSSampleId)); 1334 ("Blink.UseCounter.CSSProperties", kMaximumCSSSampleId));
1289 DEFINE_STATIC_LOCAL( 1335 DEFINE_STATIC_LOCAL(
1290 blink::EnumerationHistogram, svgHistogram, 1336 blink::EnumerationHistogram, svgHistogram,
1291 ("Blink.UseCounter.SVGImage.CSSProperties", kMaximumCSSSampleId)); 1337 ("Blink.UseCounter.SVGImage.CSSProperties", kMaximumCSSSampleId));
1292 1338
1293 return m_context == SVGImageContext ? svgHistogram : histogram; 1339 return m_context == SVGImageContext ? svgHistogram : histogram;
1294 } 1340 }
1295 1341
1342 EnumerationHistogram& UseCounter::animatedCSSHistogram() const {
1343 DEFINE_STATIC_LOCAL(
1344 blink::EnumerationHistogram, histogram,
1345 ("Blink.UseCounter.AnimatedCSSProperties", kMaximumCSSSampleId));
1346 DEFINE_STATIC_LOCAL(
1347 blink::EnumerationHistogram, svgHistogram,
1348 ("Blink.UseCounter.SVGImage.AnimatedCSSProperties", kMaximumCSSSampleId));
1349
1350 return m_context == SVGImageContext ? svgHistogram : histogram;
1351 }
1352
1296 /* 1353 /*
1297 * 1354 *
1298 * LEGACY metrics support - WebCore.FeatureObserver is to be superceded by 1355 * LEGACY metrics support - WebCore.FeatureObserver is to be superceded by
1299 * WebCore.UseCounter 1356 * WebCore.UseCounter
1300 * 1357 *
1301 */ 1358 */
1302 1359
1303 static EnumerationHistogram& featureObserverHistogram() { 1360 static EnumerationHistogram& featureObserverHistogram() {
1304 DEFINE_STATIC_LOCAL( 1361 DEFINE_STATIC_LOCAL(
1305 EnumerationHistogram, histogram, 1362 EnumerationHistogram, histogram,
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1351 } 1408 }
1352 } 1409 }
1353 1410
1354 if (needsPagesMeasuredUpdate) 1411 if (needsPagesMeasuredUpdate)
1355 cssPropertiesHistogram.count(totalPagesMeasuredCSSSampleId()); 1412 cssPropertiesHistogram.count(totalPagesMeasuredCSSSampleId());
1356 1413
1357 m_CSSBits.clearAll(); 1414 m_CSSBits.clearAll();
1358 } 1415 }
1359 1416
1360 } // namespace blink 1417 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/UseCounter.h ('k') | third_party/WebKit/Source/core/frame/UseCounterTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698