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

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

Issue 2680423006: UseCounter: Introduce UseCounter::Observer for layout tests (Closed)
Patch Set: instance method Created 3 years, 10 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 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1118 PageVisits); // PageDestruction is reserved as a scaling factor. 1118 PageVisits); // PageDestruction is reserved as a scaling factor.
1119 DCHECK(feature < NumberOfFeatures); 1119 DCHECK(feature < NumberOfFeatures);
1120 1120
1121 if (!m_featuresRecorded.quickGet(feature)) { 1121 if (!m_featuresRecorded.quickGet(feature)) {
1122 // Note that HTTPArchive tooling looks specifically for this event - see 1122 // Note that HTTPArchive tooling looks specifically for this event - see
1123 // https://github.com/HTTPArchive/httparchive/issues/59 1123 // https://github.com/HTTPArchive/httparchive/issues/59
1124 if (!m_disableReporting) { 1124 if (!m_disableReporting) {
1125 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"), 1125 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"),
1126 "FeatureFirstUsed", "feature", feature); 1126 "FeatureFirstUsed", "feature", feature);
1127 featuresHistogram().count(feature); 1127 featuresHistogram().count(feature);
1128 notifyFeatureCounted(feature);
1128 } 1129 }
1129 m_featuresRecorded.quickSet(feature); 1130 m_featuresRecorded.quickSet(feature);
1130 } 1131 }
1131 m_legacyCounter.countFeature(feature); 1132 m_legacyCounter.countFeature(feature);
1132 } 1133 }
1133 1134
1134 bool UseCounter::hasRecordedMeasurement(Feature feature) const { 1135 bool UseCounter::hasRecordedMeasurement(Feature feature) const {
1135 if (m_muteCount) 1136 if (m_muteCount)
1136 return false; 1137 return false;
1137 1138
1138 DCHECK(feature != OBSOLETE_PageDestruction && 1139 DCHECK(feature != OBSOLETE_PageDestruction &&
1139 feature != 1140 feature !=
1140 PageVisits); // PageDestruction is reserved as a scaling factor. 1141 PageVisits); // PageDestruction is reserved as a scaling factor.
1141 DCHECK(feature < NumberOfFeatures); 1142 DCHECK(feature < NumberOfFeatures);
1142 1143
1143 return m_featuresRecorded.quickGet(feature); 1144 return m_featuresRecorded.quickGet(feature);
1144 } 1145 }
1145 1146
1147 DEFINE_TRACE(UseCounter) {
1148 visitor->trace(m_observers);
1149 }
1150
1146 void UseCounter::didCommitLoad(KURL url) { 1151 void UseCounter::didCommitLoad(KURL url) {
1147 m_legacyCounter.updateMeasurements(); 1152 m_legacyCounter.updateMeasurements();
1148 1153
1149 // Reset state from previous load. 1154 // Reset state from previous load.
1150 m_disableReporting = false; 1155 m_disableReporting = false;
1151 1156
1152 // Use the protocol of the document being loaded into the main frame to 1157 // Use the protocol of the document being loaded into the main frame to
1153 // decide whether this page is interesting from a metrics perspective. 1158 // decide whether this page is interesting from a metrics perspective.
1154 // Note that SVGImage cases always have an about:blank URL 1159 // Note that SVGImage cases always have an about:blank URL
1155 if (m_context == DefaultContext && 1160 if (m_context == DefaultContext &&
(...skipping 30 matching lines...) Expand all
1186 FrameHost* host = frame->host(); 1191 FrameHost* host = frame->host();
1187 if (!host) 1192 if (!host)
1188 return false; 1193 return false;
1189 return host->useCounter().hasRecordedMeasurement(feature); 1194 return host->useCounter().hasRecordedMeasurement(feature);
1190 } 1195 }
1191 1196
1192 bool UseCounter::isCounted(CSSPropertyID unresolvedProperty) { 1197 bool UseCounter::isCounted(CSSPropertyID unresolvedProperty) {
1193 return m_CSSRecorded.quickGet(unresolvedProperty); 1198 return m_CSSRecorded.quickGet(unresolvedProperty);
1194 } 1199 }
1195 1200
1201 void UseCounter::addObserver(Observer* observer) {
1202 DCHECK(!m_observers.contains(observer));
1203 m_observers.insert(observer);
1204 }
1205
1196 bool UseCounter::isCounted(Document& document, const String& string) { 1206 bool UseCounter::isCounted(Document& document, const String& string) {
1197 Frame* frame = document.frame(); 1207 Frame* frame = document.frame();
1198 if (!frame) 1208 if (!frame)
1199 return false; 1209 return false;
1200 FrameHost* host = frame->host(); 1210 FrameHost* host = frame->host();
1201 if (!host) 1211 if (!host)
1202 return false; 1212 return false;
1203 1213
1204 CSSPropertyID unresolvedProperty = unresolvedCSSPropertyID(string); 1214 CSSPropertyID unresolvedProperty = unresolvedCSSPropertyID(string);
1205 if (unresolvedProperty == CSSPropertyInvalid) 1215 if (unresolvedProperty == CSSPropertyInvalid)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 } 1252 }
1243 m_CSSRecorded.quickSet(property); 1253 m_CSSRecorded.quickSet(property);
1244 } 1254 }
1245 m_legacyCounter.countCSS(property); 1255 m_legacyCounter.countCSS(property);
1246 } 1256 }
1247 1257
1248 void UseCounter::count(Feature feature) { 1258 void UseCounter::count(Feature feature) {
1249 recordMeasurement(feature); 1259 recordMeasurement(feature);
1250 } 1260 }
1251 1261
1262 void UseCounter::notifyFeatureCounted(Feature feature) {
1263 DCHECK(!m_muteCount);
1264 DCHECK(!m_disableReporting);
1265 HeapHashSet<Member<Observer>> toBeRemoved;
1266 for (auto observer : m_observers) {
1267 if (observer->onCountFeature(feature))
1268 toBeRemoved.insert(observer);
1269 }
1270 m_observers.removeAll(toBeRemoved);
1271 }
1272
1252 EnumerationHistogram& UseCounter::featuresHistogram() const { 1273 EnumerationHistogram& UseCounter::featuresHistogram() const {
1253 // Every SVGImage has it's own Page instance, and multiple web pages can 1274 // Every SVGImage has it's own Page instance, and multiple web pages can
1254 // share the usage of a single SVGImage. Ideally perhaps we'd delegate 1275 // share the usage of a single SVGImage. Ideally perhaps we'd delegate
1255 // metrics from an SVGImage to one of the Page's it's displayed in, but 1276 // metrics from an SVGImage to one of the Page's it's displayed in, but
1256 // that's tricky (SVGImage is intentionally isolated, and the Page that 1277 // that's tricky (SVGImage is intentionally isolated, and the Page that
1257 // created it may not even exist anymore). 1278 // created it may not even exist anymore).
1258 // So instead we just use a dedicated histogram for the SVG case. 1279 // So instead we just use a dedicated histogram for the SVG case.
1259 DEFINE_STATIC_LOCAL( 1280 DEFINE_STATIC_LOCAL(
1260 blink::EnumerationHistogram, histogram, 1281 blink::EnumerationHistogram, histogram,
1261 ("Blink.UseCounter.Features", blink::UseCounter::NumberOfFeatures)); 1282 ("Blink.UseCounter.Features", blink::UseCounter::NumberOfFeatures));
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 } 1356 }
1336 } 1357 }
1337 1358
1338 if (needsPagesMeasuredUpdate) 1359 if (needsPagesMeasuredUpdate)
1339 cssPropertiesHistogram.count(totalPagesMeasuredCSSSampleId()); 1360 cssPropertiesHistogram.count(totalPagesMeasuredCSSSampleId());
1340 1361
1341 m_CSSBits.clearAll(); 1362 m_CSSBits.clearAll();
1342 } 1363 }
1343 1364
1344 } // namespace blink 1365 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/UseCounter.h ('k') | third_party/WebKit/Source/core/page/Page.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698