2 * Copyright (C) 2012 Google, Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include "core/CSSPropertyNames.h"
30 #include "wtf/BitVector.h"
31 #include "wtf/Noncopyable.h"
32 #include "wtf/OwnPtr.h"
33 #include "wtf/PassOwnPtr.h"
34 #include "wtf/text/WTFString.h"
41 class ExecutionContext;
42 class StyleSheetContents;
44 // UseCounter is used for counting the number of times features of
45 // Blink are used on real web pages and help us know commonly
46 // features are used and thus when it's safe to remove or change them.
48 // The Chromium Content layer controls what is done with this data.
49 // For instance, in Google Chrome, these counts are submitted
50 // anonymously through the Histogram recording system in Chrome
51 // for users who opt-in to "Usage Statistics" submission
52 // during their install of Google Chrome:
53 // http://www.google.com/chrome/intl/en/privacy.html
56 WTF_MAKE_NONCOPYABLE(UseCounter);
62 // Do not change assigned numbers of existing items: add new features
63 // to the end of the list.
65 PrefixedIndexedDB = 3,
67 SharedWorkerStart = 5,
68 UnprefixedIndexedDB = 9,
70 UnprefixedRequestAnimationFrame = 13,
71 PrefixedRequestAnimationFrame = 14,
72 ContentSecurityPolicy = 15,
73 ContentSecurityPolicyReportOnly = 16,
74 PrefixedTransitionEndEvent = 18,
75 UnprefixedTransitionEndEvent = 19,
76 PrefixedAndUnprefixedTransitionEndEvent = 20,
77 AutoFocusAttribute = 21,
80 IncrementalAttribute = 25,
83 InputTypeDateTimeFallback = 29,
84 InputTypeDateTimeLocal = 30,
94 InputTypeWeekFallback = 40,
98 PatternAttribute = 44,
99 PlaceholderAttribute = 45,
100 PrefixedDirectoryAttribute = 47,
101 RequiredAttribute = 49,
102 ResultsAttribute = 50,
105 HTMLMarqueeElement = 53,
107 PrefixedStorageInfo = 57,
109 XFrameOptionsSameOrigin = 59,
110 XFrameOptionsSameOriginWithBadAncestorChain = 60,
111 DeprecatedFlexboxWebContent = 61,
112 DeprecatedFlexboxChrome = 62,
113 DeprecatedFlexboxChromeExtension = 63,
114 UnprefixedPerformanceTimeline = 65,
115 UnprefixedUserTiming = 67,
117 ContentSecurityPolicyWithBaseElement = 70,
118 PrefixedMediaAddKey = 71,
119 PrefixedMediaGenerateKeyRequest = 72,
123 XSLProcessingInstruction = 78,
125 SVGSwitchElement = 80,
128 DemotedFormElement = 85,
129 SVGAnimationElement = 90,
130 KeyboardEventKeyLocation = 91,
132 SubFrameBeforeUnloadRegistered = 97,
133 SubFrameBeforeUnloadFired = 98,
134 TextReplaceWholeText = 100,
135 ConsoleMarkTimeline = 102,
136 CSSPseudoElementUserAgentCustomPseudo = 103,
137 ElementGetAttributeNode = 107, // Removed from DOM4.
138 ElementSetAttributeNode = 108, // Removed from DOM4.
139 ElementRemoveAttributeNode = 109, // Removed from DOM4.
140 ElementGetAttributeNodeNS = 110, // Removed from DOM4.
141 DocumentCreateAttribute = 111, // Removed from DOM4.
142 DocumentCreateAttributeNS = 112, // Removed from DOM4.
143 DocumentCreateCDATASection = 113, // Removed from DOM4.
144 DocumentInputEncoding = 114, // Removed from DOM4.
145 DocumentXMLEncoding = 115, // Removed from DOM4.
146 DocumentXMLStandalone = 116, // Removed from DOM4.
147 DocumentXMLVersion = 117, // Removed from DOM4.
148 NodeIsSameNode = 118, // Removed from DOM4.
149 NodeNamespaceURI = 120, // Removed from DOM4.
150 NodeLocalName = 122, // Removed from DOM4.
151 NavigatorProductSub = 123,
152 NavigatorVendor = 124,
153 NavigatorVendorSub = 125,
155 DocumentCharset = 127, // Documented as IE extensions = 0, from KHTML days.
156 PrefixedAnimationEndEvent = 128,
157 UnprefixedAnimationEndEvent = 129,
158 PrefixedAndUnprefixedAnimationEndEvent = 130,
159 PrefixedAnimationStartEvent = 131,
160 UnprefixedAnimationStartEvent = 132,
161 PrefixedAndUnprefixedAnimationStartEvent = 133,
162 PrefixedAnimationIterationEvent = 134,
163 UnprefixedAnimationIterationEvent = 135,
164 PrefixedAndUnprefixedAnimationIterationEvent = 136,
165 EventReturnValue = 137, // Legacy IE extension.
167 InsertAdjacentText = 140,
168 InsertAdjacentElement = 141,
169 HasAttributes = 142, // Removed from DOM4.
170 DOMSubtreeModifiedEvent = 143,
171 DOMNodeInsertedEvent = 144,
172 DOMNodeRemovedEvent = 145,
173 DOMNodeRemovedFromDocumentEvent = 146,
174 DOMNodeInsertedIntoDocumentEvent = 147,
175 DOMCharacterDataModifiedEvent = 148,
176 DocumentAllLegacyCall = 150,
177 HTMLAppletElementLegacyCall = 151,
178 HTMLEmbedElementLegacyCall = 152,
179 HTMLObjectElementLegacyCall = 153,
180 GetMatchedCSSRules = 155,
182 AttributeOwnerElement = 160, // Removed in DOM4.
183 AttributeSpecified = 162, // Removed in DOM4.
184 PrefixedAudioDecodedByteCount = 164,
185 PrefixedVideoDecodedByteCount = 165,
186 PrefixedVideoSupportsFullscreen = 166,
187 PrefixedVideoDisplayingFullscreen = 167,
188 PrefixedVideoEnterFullscreen = 168,
189 PrefixedVideoExitFullscreen = 169,
190 PrefixedVideoEnterFullScreen = 170,
191 PrefixedVideoExitFullScreen = 171,
192 PrefixedVideoDecodedFrameCount = 172,
193 PrefixedVideoDroppedFrameCount = 173,
194 PrefixedElementRequestFullscreen = 176,
195 PrefixedElementRequestFullScreen = 177,
196 BarPropLocationbar = 178,
197 BarPropMenubar = 179,
198 BarPropPersonalbar = 180,
199 BarPropScrollbars = 181,
200 BarPropStatusbar = 182,
201 BarPropToolbar = 183,
202 InputTypeEmailMultiple = 184,
203 InputTypeEmailMaxLength = 185,
204 InputTypeEmailMultipleMaxLength = 186,
206 InputTypeTextMaxLength = 191,
207 InputTypePassword = 192,
208 InputTypePasswordMaxLength = 193,
209 ShowModalDialog = 195,
210 PrefixedPageVisibility = 196,
211 CSSStyleSheetInsertRuleOptionalArg = 198, // Inconsistent with the specification and other browsers.
212 DocumentBeforeUnloadRegistered = 200,
213 DocumentBeforeUnloadFired = 201,
214 DocumentUnloadRegistered = 202,
215 DocumentUnloadFired = 203,
216 SVGLocatableNearestViewportElement = 204,
217 SVGLocatableFarthestViewportElement = 205,
218 HTMLHeadElementProfile = 207,
219 OverflowChangedEvent = 208,
220 SVGPointMatrixTransform = 209,
221 DOMFocusInOutEvent = 211,
222 FileGetLastModifiedDate = 212,
223 HTMLElementInnerText = 213,
224 HTMLElementOuterText = 214,
225 ReplaceDocumentViaJavaScriptURL = 215,
226 ElementSetAttributeNodeNS = 216, // Removed from DOM4.
227 ElementPrefixedMatchesSelector = 217,
228 CSSStyleSheetRules = 219,
229 CSSStyleSheetAddRule = 220,
230 CSSStyleSheetRemoveRule = 221,
231 // The above items are available in M33 branch.
233 InitMessageEvent = 222,
234 ElementSetPrefix = 224, // Element.prefix is readonly in DOM4.
235 CSSStyleDeclarationGetPropertyCSSValue = 225,
236 PrefixedMediaCancelKeyRequest = 229,
237 DOMImplementationHasFeature = 230,
238 DOMImplementationHasFeatureReturnFalse = 231,
239 CanPlayTypeKeySystem = 232,
240 PrefixedDevicePixelRatioMediaFeature = 233,
241 PrefixedMaxDevicePixelRatioMediaFeature = 234,
242 PrefixedMinDevicePixelRatioMediaFeature = 235,
243 PrefixedTransform3dMediaFeature = 237,
244 PrefixedStorageQuota = 240,
245 ContentSecurityPolicyReportOnlyInMeta = 241,
246 ResetReferrerPolicy = 243,
247 CaseInsensitiveAttrSelectorMatch = 244, // Case-insensitivity dropped from specification.
248 FormNameAccessForImageElement = 246,
249 FormNameAccessForPastNamesMap = 247,
250 FormAssociationByParser = 248,
251 SVGSVGElementInDocument = 250,
252 SVGDocumentRootElement = 251,
253 MediaErrorEncrypted = 253,
254 EventSourceURL = 254,
256 WorkerSubjectToCSP = 257,
257 WorkerAllowedByChildBlockedByScript = 258,
258 DeprecatedWebKitGradient = 260,
259 DeprecatedWebKitLinearGradient = 261,
260 DeprecatedWebKitRepeatingLinearGradient = 262,
261 DeprecatedWebKitRadialGradient = 263,
262 DeprecatedWebKitRepeatingRadialGradient = 264,
263 PrefixedImageSmoothingEnabled = 267,
264 UnprefixedImageSmoothingEnabled = 268,
265 // The above items are available in M34 branch.
267 TextAutosizing = 274,
268 HTMLAnchorElementPingAttribute = 276,
269 InsertAdjacentHTML = 278,
271 HTMLAppletElement = 280,
272 HTMLMediaElementSeekToFragmentStart = 281,
273 HTMLMediaElementPauseAtFragmentEnd = 282,
274 PrefixedWindowURL = 283,
275 PrefixedWorkerURL = 284, // This didn't work because of crbug.com/376039. Available since M37.
276 WindowOrientation = 285,
277 DOMStringListContains = 286,
278 DocumentCaptureEvents = 287,
279 DocumentReleaseEvents = 288,
280 WindowCaptureEvents = 289,
281 WindowReleaseEvents = 290,
282 PrefixedGamepad = 291,
283 ElementAnimateKeyframeListEffectObjectTiming = 292,
284 ElementAnimateKeyframeListEffectDoubleTiming = 293,
285 ElementAnimateKeyframeListEffectNoTiming = 294,
286 DocumentXPathCreateExpression = 295,
287 DocumentXPathCreateNSResolver = 296,
288 DocumentXPathEvaluate = 297,
291 AnimationConstructorKeyframeListEffectObjectTiming = 300,
292 AnimationConstructorKeyframeListEffectDoubleTiming = 301,
293 AnimationConstructorKeyframeListEffectNoTiming = 302,
294 AttrSetValueWithElement = 303,
295 PrefixedCancelAnimationFrame = 304,
296 PrefixedCancelRequestAnimationFrame = 305,
297 NamedNodeMapGetNamedItem = 306,
298 NamedNodeMapSetNamedItem = 307,
299 NamedNodeMapRemoveNamedItem = 308,
300 NamedNodeMapItem = 309,
301 NamedNodeMapGetNamedItemNS = 310,
302 NamedNodeMapSetNamedItemNS = 311,
303 NamedNodeMapRemoveNamedItemNS = 312,
304 XHRProgressEventPosition = 316,
305 XHRProgressEventTotalSize = 317,
306 PrefixedDocumentIsFullscreen = 318,
307 PrefixedDocumentFullScreenKeyboardInputAllowed = 319,
308 PrefixedDocumentCurrentFullScreenElement = 320,
309 PrefixedDocumentCancelFullScreen = 321,
310 PrefixedDocumentFullscreenEnabled = 322,
311 PrefixedDocumentFullscreenElement = 323,
312 PrefixedDocumentExitFullscreen = 324,
313 // The above items are available in M35 branch.
315 SVGForeignObjectElement = 325,
316 SelectionSetPosition = 327,
317 AnimationPlayerFinishEvent = 328,
318 SVGSVGElementInXMLDocument = 329,
319 CanvasRenderingContext2DSetAlpha = 330,
320 CanvasRenderingContext2DSetCompositeOperation = 331,
321 CanvasRenderingContext2DSetLineWidth = 332,
322 CanvasRenderingContext2DSetLineCap = 333,
323 CanvasRenderingContext2DSetLineJoin = 334,
324 CanvasRenderingContext2DSetMiterLimit = 335,
325 CanvasRenderingContext2DClearShadow = 336,
326 CanvasRenderingContext2DSetStrokeColor = 337,
327 CanvasRenderingContext2DSetFillColor = 338,
328 CanvasRenderingContext2DDrawImageFromRect = 339,
329 CanvasRenderingContext2DSetShadow = 340,
330 PrefixedPerformanceClearResourceTimings = 341,
331 PrefixedPerformanceSetResourceTimingBufferSize = 342,
332 EventSrcElement = 343,
333 EventCancelBubble = 344,
335 EventClipboardData = 346,
336 NodeIteratorDetach = 347,
338 AttrTextContent = 349,
339 EventGetReturnValueTrue = 350,
340 EventGetReturnValueFalse = 351,
341 EventSetReturnValueTrue = 352,
342 EventSetReturnValueFalse = 353,
343 NodeIteratorExpandEntityReferences = 354,
344 TreeWalkerExpandEntityReferences = 355,
345 WindowOffscreenBuffering = 356,
346 WindowDefaultStatus = 357,
347 WindowDefaultstatus = 358,
348 PrefixedTransitionEventConstructor = 361,
349 PrefixedMutationObserverConstructor = 362,
350 PrefixedIDBCursorConstructor = 363,
351 PrefixedIDBDatabaseConstructor = 364,
352 PrefixedIDBFactoryConstructor = 365,
353 PrefixedIDBIndexConstructor = 366,
354 PrefixedIDBKeyRangeConstructor = 367,
355 PrefixedIDBObjectStoreConstructor = 368,
356 PrefixedIDBRequestConstructor = 369,
357 PrefixedIDBTransactionConstructor = 370,
358 NotificationPermission = 371,
360 HTMLTableElementVspace = 374,
361 HTMLTableElementHspace = 375,
362 PrefixedTouchRadiusX = 378,
363 PrefixedTouchRadiusY = 379,
364 PrefixedTouchRotationAngle = 380,
365 PrefixedTouchForce = 381,
366 PrefixedMouseEventMovementX = 382,
367 PrefixedMouseEventMovementY = 383,
368 PrefixedFileRelativePath = 386,
369 DocumentCaretRangeFromPoint = 387,
370 DocumentGetCSSCanvasContext = 388,
371 ElementScrollIntoViewIfNeeded = 389,
372 RangeCompareNode = 392,
374 HTMLImageElementX = 396,
375 HTMLImageElementY = 397,
376 SelectionBaseNode = 400,
377 SelectionBaseOffset = 401,
378 SelectionExtentNode = 402,
379 SelectionExtentOffset = 403,
381 SelectionModify = 405,
382 SelectionSetBaseAndExtent = 406,
383 SelectionEmpty = 407,
386 VTTCueRenderVertical = 411,
387 VTTCueRenderSnapToLinesFalse = 412,
388 VTTCueRenderLineNotAuto = 413,
389 VTTCueRenderPositionNot50 = 414,
390 VTTCueRenderSizeNot100 = 415,
391 VTTCueRenderAlignNotMiddle = 416,
392 // The above items are available in M36 branch.
394 ElementRequestPointerLock = 417,
395 VTTCueRenderRtl = 418,
396 PostMessageFromSecureToInsecure = 419,
397 PostMessageFromInsecureToSecure = 420,
398 DocumentExitPointerLock = 421,
399 DocumentPointerLockElement = 422,
400 PrefixedCursorZoomIn = 424,
401 PrefixedCursorZoomOut = 425,
402 CSSCharsetRuleEncoding = 426,
403 DocumentSetCharset = 427,
404 DocumentDefaultCharset = 428,
405 TextEncoderConstructor = 429,
406 TextEncoderEncode = 430,
407 TextDecoderConstructor = 431,
408 TextDecoderDecode = 432,
409 FocusInOutEvent = 433,
410 MouseEventMovementX = 434,
411 MouseEventMovementY = 435,
412 MixedContentRaw = 437,
413 MixedContentImage = 438,
414 MixedContentMedia = 439,
416 MixedContentFormsSubmitted = 441,
417 FormsSubmitted = 442,
418 TextInputEventOnInput = 443,
419 TextInputEventOnTextArea = 444,
420 TextInputEventOnContentEditable = 445,
421 TextInputEventOnNotNode = 446,
422 WebkitBeforeTextInsertedOnInput = 447,
423 WebkitBeforeTextInsertedOnTextArea = 448,
424 WebkitBeforeTextInsertedOnContentEditable = 449,
425 WebkitBeforeTextInsertedOnNotNode = 450,
426 WebkitEditableContentChangedOnInput = 451,
427 WebkitEditableContentChangedOnTextArea = 452,
428 WebkitEditableContentChangedOnContentEditable = 453,
429 WebkitEditableContentChangedOnNotNode = 454,
431 ElementCreateShadowRoot = 456,
432 DocumentRegisterElement = 457,
433 EditingAppleInterchangeNewline = 458,
434 EditingAppleConvertedSpace = 459,
435 EditingApplePasteAsQuotation = 460,
436 EditingAppleStyleSpanClass = 461,
437 EditingAppleTabSpanClass = 462,
438 HTMLImportsAsyncAttribute = 463,
439 FontFaceSetReady = 464,
440 XMLHttpRequestSynchronous = 465,
441 CSSSelectorPseudoUnresolved = 466,
442 CSSSelectorPseudoShadow = 467,
443 CSSSelectorPseudoContent = 468,
444 CSSSelectorPseudoHost = 469,
445 CSSSelectorPseudoHostContext = 470,
446 CSSDeepCombinator = 471,
447 SyncXHRWithCredentials = 472,
448 // The above items are available in M37 branch.
451 KeyEventNotAllowedInFullScreen = 474,
453 DOMWindowOpenFeatures = 476,
454 MediaStreamTrackGetSources = 478,
455 AspectRatioFlexItem = 479,
456 DetailsElement = 480,
460 ProgressElement = 484,
461 VideoFullscreenAllowedExemption = 485,
462 PrefixedHTMLElementDropzone = 490,
463 WheelEventWheelDeltaX = 491,
464 WheelEventWheelDeltaY = 492,
465 WheelEventWheelDelta = 493,
467 SendBeaconQuotaExceeded = 495,
468 SVGSMILElementInDocument = 501,
469 MouseEventOffsetX = 502,
470 MouseEventOffsetY = 503,
473 MouseEventFromElement = 506,
474 MouseEventToElement = 507,
475 RequestFileSystem = 508,
476 RequestFileSystemWorker = 509,
477 RequestFileSystemSyncWorker = 510,
482 BgPropertiesFixed = 515,
483 HTMLImageElementComposite = 516,
484 DevToolsConsoleTimeline = 517,
485 DevToolsConsoleProfile = 518,
486 SVGStyleElementTitle = 519,
487 PictureSourceSrc = 520,
488 // The above items are available in M38 branch.
492 SrcsetXDescriptor = 523,
493 SrcsetWDescriptor = 524,
494 SelectionContainsNode = 525,
495 MediaStreamEnded = 526,
496 MixedContentPrivateIPInPublicWebsitePassive = 527,
497 MixedContentPrivateIPInPublicWebsiteActive = 528,
498 XMLExternalResourceLoad = 529,
499 MixedContentPrivateHostnameInPublicHostname = 530,
500 LegacyProtocolEmbeddedAsSubresource = 531,
501 RequestedSubresourceWithEmbeddedCredentials = 532,
502 NotificationCreated = 533,
503 NotificationClosed = 534,
504 NotificationPermissionRequested = 535,
505 MediaStreamLabel = 536,
506 MediaStreamStop = 537,
507 ConsoleTimeline = 538,
508 ConsoleTimelineEnd = 539,
509 SRIElementWithMatchingIntegrityAttribute = 540,
510 SRIElementWithNonMatchingIntegrityAttribute = 541,
511 SRIElementWithUnparsableIntegrityAttribute = 542,
512 SRIElementWithIntegrityAttributeAndInsecureOrigin = 543,
513 SRIElementWithIntegrityAttributeAndInsecureResource = 544,
514 AnimationPlayerGetStartTime = 545,
515 AnimationPlayerSetStartTime = 546,
516 AnimationPlayerGetCurrentTime = 547,
517 AnimationPlayerSetCurrentTime = 548,
518 AnimationPlayerGetPlaybackRate = 549,
519 AnimationPlayerSetPlaybackRate = 550,
520 AnimationPlayerGetPlayState = 551,
521 AnimationPlayerFinish = 552,
522 AnimationPlayerPlay = 553,
523 AnimationPlayerPause = 554,
524 AnimationPlayerReverse = 555,
525 // Add new features immediately above this line. Don't change assigned
526 // numbers of any item, and don't reuse removed slots.
527 // Also, run update_use_counter_feature_enum.py in chromium/src/tools/metrics/histograms/
528 // to update the UMA mapping.
529 NumberOfFeatures, // This enum value must be last.
532 // "count" sets the bit for this feature to 1. Repeated calls are ignored.
533 static void count(const Document&, Feature);
534 // This doesn't count for ExecutionContexts for shared workers and service
536 static void count(const ExecutionContext*, Feature);
537 void count(CSSParserContext, CSSPropertyID);
540 // "countDeprecation" sets the bit for this feature to 1, and sends a deprecation
541 // warning to the console. Repeated calls are ignored.
543 // Be considerate to developers' consoles: features should only send
544 // deprecation warnings when we're actively interested in removing them from
547 // The ExecutionContext* overload doesn't work for shared workers and
549 static void countDeprecation(const LocalDOMWindow*, Feature);
550 static void countDeprecation(ExecutionContext*, Feature);
551 static void countDeprecation(const Document&, Feature);
552 String deprecationMessage(Feature);
554 void didCommitLoad();
556 static UseCounter* getFrom(const Document*);
557 static UseCounter* getFrom(const CSSStyleSheet*);
558 static UseCounter* getFrom(const StyleSheetContents*);
560 static int mapCSSPropertyIdToCSSSampleIdForHistogram(int id);
562 static void muteForInspector();
563 static void unmuteForInspector();
566 static int m_muteCount;
568 bool recordMeasurement(Feature feature)
570 if (UseCounter::m_muteCount)
572 ASSERT(feature != PageDestruction); // PageDestruction is reserved as a scaling factor.
573 ASSERT(feature < NumberOfFeatures);
575 m_countBits = adoptPtr(new BitVector(NumberOfFeatures));
576 m_countBits->clearAll();
579 if (m_countBits->quickGet(feature))
582 m_countBits->quickSet(feature);
586 void updateMeasurements();
588 OwnPtr<BitVector> m_countBits;
589 BitVector m_CSSFeatureBits;
594 #endif // UseCounter_h