mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
501 lines
19 KiB
C++
501 lines
19 KiB
C++
/*
|
|
* Copyright (C) 2012 Google, Inc. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef UseCounter_h
|
|
#define UseCounter_h
|
|
|
|
#include "core/CSSPropertyNames.h"
|
|
#include "wtf/BitVector.h"
|
|
#include "wtf/Noncopyable.h"
|
|
#include "wtf/OwnPtr.h"
|
|
#include "wtf/PassOwnPtr.h"
|
|
#include "wtf/text/WTFString.h"
|
|
|
|
namespace blink {
|
|
|
|
class CSSStyleSheet;
|
|
class LocalDOMWindow;
|
|
class Document;
|
|
class ExecutionContext;
|
|
class StyleSheetContents;
|
|
|
|
// UseCounter is used for counting the number of times features of
|
|
// Blink are used on real web pages and help us know commonly
|
|
// features are used and thus when it's safe to remove or change them.
|
|
//
|
|
// The Chromium Content layer controls what is done with this data.
|
|
// For instance, in Google Chrome, these counts are submitted
|
|
// anonymously through the Histogram recording system in Chrome
|
|
// for users who opt-in to "Usage Statistics" submission
|
|
// during their install of Google Chrome:
|
|
// http://www.google.com/chrome/intl/en/privacy.html
|
|
|
|
class UseCounter {
|
|
WTF_MAKE_NONCOPYABLE(UseCounter);
|
|
public:
|
|
UseCounter();
|
|
~UseCounter();
|
|
|
|
enum Feature {
|
|
// Do not change assigned numbers of existing items: add new features
|
|
// to the end of the list.
|
|
PageDestruction = 0,
|
|
PrefixedIndexedDB = 3,
|
|
WorkerStart = 4,
|
|
SharedWorkerStart = 5,
|
|
UnprefixedIndexedDB = 9,
|
|
OpenWebDatabase = 10,
|
|
UnprefixedRequestAnimationFrame = 13,
|
|
PrefixedRequestAnimationFrame = 14,
|
|
PrefixedTransitionEndEvent = 18,
|
|
UnprefixedTransitionEndEvent = 19,
|
|
PrefixedAndUnprefixedTransitionEndEvent = 20,
|
|
AutoFocusAttribute = 21,
|
|
DataListElement = 23,
|
|
FormAttribute = 24,
|
|
IncrementalAttribute = 25,
|
|
InputTypeColor = 26,
|
|
InputTypeDate = 27,
|
|
InputTypeDateTimeFallback = 29,
|
|
InputTypeDateTimeLocal = 30,
|
|
InputTypeEmail = 31,
|
|
InputTypeMonth = 32,
|
|
InputTypeNumber = 33,
|
|
InputTypeRange = 34,
|
|
InputTypeSearch = 35,
|
|
InputTypeTel = 36,
|
|
InputTypeTime = 37,
|
|
InputTypeURL = 38,
|
|
InputTypeWeek = 39,
|
|
InputTypeWeekFallback = 40,
|
|
ListAttribute = 41,
|
|
MaxAttribute = 42,
|
|
MinAttribute = 43,
|
|
PatternAttribute = 44,
|
|
PlaceholderAttribute = 45,
|
|
PrefixedDirectoryAttribute = 47,
|
|
RequiredAttribute = 49,
|
|
ResultsAttribute = 50,
|
|
StepAttribute = 51,
|
|
PageVisits = 52,
|
|
PrefixedStorageInfo = 57,
|
|
XFrameOptions = 58,
|
|
XFrameOptionsSameOrigin = 59,
|
|
XFrameOptionsSameOriginWithBadAncestorChain = 60,
|
|
DeprecatedFlexboxWebContent = 61,
|
|
DeprecatedFlexboxChrome = 62,
|
|
DeprecatedFlexboxChromeExtension = 63,
|
|
UnprefixedPerformanceTimeline = 65,
|
|
UnprefixedUserTiming = 67,
|
|
WindowEvent = 69,
|
|
PrefixedMediaAddKey = 71,
|
|
PrefixedMediaGenerateKeyRequest = 72,
|
|
SVGFontElement = 76,
|
|
XMLDocument = 77,
|
|
SVGSwitchElement = 80,
|
|
DocumentAll = 83,
|
|
FormElement = 84,
|
|
DemotedFormElement = 85,
|
|
SVGAnimationElement = 90,
|
|
KeyboardEventKeyLocation = 91,
|
|
LineClamp = 96,
|
|
TextReplaceWholeText = 100,
|
|
ConsoleMarkTimeline = 102,
|
|
CSSPseudoElementUserAgentCustomPseudo = 103,
|
|
ElementGetAttributeNode = 107, // Removed from DOM4.
|
|
ElementSetAttributeNode = 108, // Removed from DOM4.
|
|
ElementRemoveAttributeNode = 109, // Removed from DOM4.
|
|
DocumentCreateAttribute = 111, // Removed from DOM4.
|
|
DocumentCreateAttributeNS = 112, // Removed from DOM4.
|
|
DocumentInputEncoding = 114, // Removed from DOM4.
|
|
DocumentXMLEncoding = 115, // Removed from DOM4.
|
|
DocumentXMLStandalone = 116, // Removed from DOM4.
|
|
NodeIsSameNode = 118, // Removed from DOM4.
|
|
NodeNamespaceURI = 120, // Removed from DOM4.
|
|
NodeLocalName = 122, // Removed from DOM4.
|
|
NavigatorProductSub = 123,
|
|
NavigatorVendor = 124,
|
|
NavigatorVendorSub = 125,
|
|
FileError = 126,
|
|
DocumentCharset = 127, // Documented as IE extensions = 0, from KHTML days.
|
|
PrefixedAnimationEndEvent = 128,
|
|
UnprefixedAnimationEndEvent = 129,
|
|
PrefixedAndUnprefixedAnimationEndEvent = 130,
|
|
PrefixedAnimationStartEvent = 131,
|
|
UnprefixedAnimationStartEvent = 132,
|
|
PrefixedAndUnprefixedAnimationStartEvent = 133,
|
|
PrefixedAnimationIterationEvent = 134,
|
|
UnprefixedAnimationIterationEvent = 135,
|
|
PrefixedAndUnprefixedAnimationIterationEvent = 136,
|
|
EventReturnValue = 137, // Legacy IE extension.
|
|
HasAttributes = 142, // Removed from DOM4.
|
|
DOMSubtreeModifiedEvent = 143,
|
|
DOMNodeInsertedEvent = 144,
|
|
DOMNodeRemovedEvent = 145,
|
|
DOMNodeRemovedFromDocumentEvent = 146,
|
|
DOMNodeInsertedIntoDocumentEvent = 147,
|
|
DOMCharacterDataModifiedEvent = 148,
|
|
DocumentAllLegacyCall = 150,
|
|
GetMatchedCSSRules = 155,
|
|
SVGFontInCSS = 156,
|
|
AttributeOwnerElement = 160, // Removed in DOM4.
|
|
AttributeSpecified = 162, // Removed in DOM4.
|
|
PrefixedAudioDecodedByteCount = 164,
|
|
PrefixedVideoDecodedByteCount = 165,
|
|
PrefixedVideoSupportsFullscreen = 166,
|
|
PrefixedVideoDisplayingFullscreen = 167,
|
|
PrefixedVideoEnterFullscreen = 168,
|
|
PrefixedVideoExitFullscreen = 169,
|
|
PrefixedVideoEnterFullScreen = 170,
|
|
PrefixedVideoExitFullScreen = 171,
|
|
PrefixedVideoDecodedFrameCount = 172,
|
|
PrefixedVideoDroppedFrameCount = 173,
|
|
PrefixedElementRequestFullscreen = 176,
|
|
PrefixedElementRequestFullScreen = 177,
|
|
InputTypeEmailMultiple = 184,
|
|
InputTypeEmailMaxLength = 185,
|
|
InputTypeEmailMultipleMaxLength = 186,
|
|
InputTypeText = 190,
|
|
InputTypeTextMaxLength = 191,
|
|
InputTypePassword = 192,
|
|
InputTypePasswordMaxLength = 193,
|
|
PrefixedPageVisibility = 196,
|
|
CSSStyleSheetInsertRuleOptionalArg = 198, // Inconsistent with the specification and other browsers.
|
|
DocumentUnloadRegistered = 202,
|
|
DocumentUnloadFired = 203,
|
|
SVGLocatableNearestViewportElement = 204,
|
|
SVGLocatableFarthestViewportElement = 205,
|
|
HTMLHeadElementProfile = 207,
|
|
OverflowChangedEvent = 208,
|
|
SVGPointMatrixTransform = 209,
|
|
DOMFocusInOutEvent = 211,
|
|
FileGetLastModifiedDate = 212,
|
|
HTMLElementInnerText = 213,
|
|
HTMLElementOuterText = 214,
|
|
ElementPrefixedMatchesSelector = 217,
|
|
CSSStyleSheetRules = 219,
|
|
CSSStyleSheetAddRule = 220,
|
|
CSSStyleSheetRemoveRule = 221,
|
|
// The above items are available in M33 branch.
|
|
|
|
InitMessageEvent = 222,
|
|
ElementSetPrefix = 224, // Element.prefix is readonly in DOM4.
|
|
CSSStyleDeclarationGetPropertyCSSValue = 225,
|
|
PrefixedMediaCancelKeyRequest = 229,
|
|
DOMImplementationHasFeature = 230,
|
|
DOMImplementationHasFeatureReturnFalse = 231,
|
|
CanPlayTypeKeySystem = 232,
|
|
PrefixedDevicePixelRatioMediaFeature = 233,
|
|
PrefixedMaxDevicePixelRatioMediaFeature = 234,
|
|
PrefixedMinDevicePixelRatioMediaFeature = 235,
|
|
PrefixedTransform3dMediaFeature = 237,
|
|
PrefixedStorageQuota = 240,
|
|
ResetReferrerPolicy = 243,
|
|
CaseInsensitiveAttrSelectorMatch = 244, // Case-insensitivity dropped from specification.
|
|
FormNameAccessForImageElement = 246,
|
|
FormNameAccessForPastNamesMap = 247,
|
|
FormAssociationByParser = 248,
|
|
MediaErrorEncrypted = 253,
|
|
WebSocketURL = 255,
|
|
WorkerAllowedByChildBlockedByScript = 258,
|
|
DeprecatedWebKitGradient = 260,
|
|
DeprecatedWebKitLinearGradient = 261,
|
|
DeprecatedWebKitRepeatingLinearGradient = 262,
|
|
DeprecatedWebKitRadialGradient = 263,
|
|
DeprecatedWebKitRepeatingRadialGradient = 264,
|
|
PrefixedImageSmoothingEnabled = 267,
|
|
UnprefixedImageSmoothingEnabled = 268,
|
|
// The above items are available in M34 branch.
|
|
|
|
TextAutosizing = 274,
|
|
HTMLAnchorElementPingAttribute = 276,
|
|
SVGClassName = 279,
|
|
HTMLMediaElementSeekToFragmentStart = 281,
|
|
HTMLMediaElementPauseAtFragmentEnd = 282,
|
|
PrefixedWindowURL = 283,
|
|
PrefixedWorkerURL = 284, // This didn't work because of crbug.com/376039. Available since M37.
|
|
WindowOrientation = 285,
|
|
DOMStringListContains = 286,
|
|
DocumentCaptureEvents = 287,
|
|
DocumentReleaseEvents = 288,
|
|
WindowCaptureEvents = 289,
|
|
WindowReleaseEvents = 290,
|
|
PrefixedGamepad = 291,
|
|
ElementAnimateKeyframeListEffectObjectTiming = 292,
|
|
ElementAnimateKeyframeListEffectDoubleTiming = 293,
|
|
ElementAnimateKeyframeListEffectNoTiming = 294,
|
|
AttrGetValue = 298,
|
|
AttrSetValue = 299,
|
|
AnimationConstructorKeyframeListEffectObjectTiming = 300,
|
|
AnimationConstructorKeyframeListEffectDoubleTiming = 301,
|
|
AnimationConstructorKeyframeListEffectNoTiming = 302,
|
|
AttrSetValueWithElement = 303,
|
|
PrefixedCancelAnimationFrame = 304,
|
|
PrefixedCancelRequestAnimationFrame = 305,
|
|
NamedNodeMapGetNamedItem = 306,
|
|
NamedNodeMapSetNamedItem = 307,
|
|
NamedNodeMapRemoveNamedItem = 308,
|
|
NamedNodeMapItem = 309,
|
|
OpenWebDatabaseInWorker = 313, // This didn't work because of crbug.com/376039. Available since M37.
|
|
OpenWebDatabaseSyncInWorker = 314, // This didn't work because of crbug.com/376039. Available since M37.
|
|
XHRProgressEventPosition = 316,
|
|
XHRProgressEventTotalSize = 317,
|
|
PrefixedDocumentIsFullscreen = 318,
|
|
PrefixedDocumentFullScreenKeyboardInputAllowed = 319,
|
|
PrefixedDocumentCurrentFullScreenElement = 320,
|
|
PrefixedDocumentCancelFullScreen = 321,
|
|
PrefixedDocumentFullscreenEnabled = 322,
|
|
PrefixedDocumentFullscreenElement = 323,
|
|
PrefixedDocumentExitFullscreen = 324,
|
|
// The above items are available in M35 branch.
|
|
|
|
SVGForeignObjectElement = 325,
|
|
SelectionSetPosition = 327,
|
|
AnimationPlayerFinishEvent = 328,
|
|
CanvasRenderingContext2DSetAlpha = 330,
|
|
CanvasRenderingContext2DSetCompositeOperation = 331,
|
|
CanvasRenderingContext2DSetLineWidth = 332,
|
|
CanvasRenderingContext2DSetLineCap = 333,
|
|
CanvasRenderingContext2DSetLineJoin = 334,
|
|
CanvasRenderingContext2DSetMiterLimit = 335,
|
|
CanvasRenderingContext2DClearShadow = 336,
|
|
CanvasRenderingContext2DSetStrokeColor = 337,
|
|
CanvasRenderingContext2DSetFillColor = 338,
|
|
CanvasRenderingContext2DDrawImageFromRect = 339,
|
|
CanvasRenderingContext2DSetShadow = 340,
|
|
PrefixedPerformanceClearResourceTimings = 341,
|
|
PrefixedPerformanceSetResourceTimingBufferSize = 342,
|
|
EventSrcElement = 343,
|
|
EventCancelBubble = 344,
|
|
EventPath = 345,
|
|
EventClipboardData = 346,
|
|
AttrNodeValue = 348,
|
|
AttrTextContent = 349,
|
|
EventGetReturnValueTrue = 350,
|
|
EventGetReturnValueFalse = 351,
|
|
EventSetReturnValueTrue = 352,
|
|
EventSetReturnValueFalse = 353,
|
|
WindowOffscreenBuffering = 356,
|
|
WindowDefaultStatus = 357,
|
|
WindowDefaultstatus = 358,
|
|
PrefixedTransitionEventConstructor = 361,
|
|
PrefixedMutationObserverConstructor = 362,
|
|
PrefixedIDBCursorConstructor = 363,
|
|
PrefixedIDBDatabaseConstructor = 364,
|
|
PrefixedIDBFactoryConstructor = 365,
|
|
PrefixedIDBIndexConstructor = 366,
|
|
PrefixedIDBKeyRangeConstructor = 367,
|
|
PrefixedIDBObjectStoreConstructor = 368,
|
|
PrefixedIDBRequestConstructor = 369,
|
|
PrefixedIDBTransactionConstructor = 370,
|
|
NotificationPermission = 371,
|
|
RangeDetach = 372,
|
|
PrefixedTouchRadiusX = 378,
|
|
PrefixedTouchRadiusY = 379,
|
|
PrefixedTouchRotationAngle = 380,
|
|
PrefixedTouchForce = 381,
|
|
PrefixedMouseEventMovementX = 382,
|
|
PrefixedMouseEventMovementY = 383,
|
|
PrefixedFileRelativePath = 386,
|
|
DocumentCaretRangeFromPoint = 387,
|
|
DocumentGetCSSCanvasContext = 388,
|
|
ElementScrollIntoViewIfNeeded = 389,
|
|
RangeCompareNode = 392,
|
|
RangeExpand = 393,
|
|
HTMLImageElementX = 396,
|
|
HTMLImageElementY = 397,
|
|
SelectionBaseNode = 400,
|
|
SelectionBaseOffset = 401,
|
|
SelectionExtentNode = 402,
|
|
SelectionExtentOffset = 403,
|
|
SelectionType = 404,
|
|
SelectionModify = 405,
|
|
SelectionSetBaseAndExtent = 406,
|
|
SelectionEmpty = 407,
|
|
// The above items are available in M36 branch.
|
|
|
|
PostMessageFromSecureToInsecure = 419,
|
|
PostMessageFromInsecureToSecure = 420,
|
|
PrefixedCursorZoomIn = 424,
|
|
PrefixedCursorZoomOut = 425,
|
|
CSSCharsetRuleEncoding = 426,
|
|
DocumentSetCharset = 427,
|
|
DocumentDefaultCharset = 428,
|
|
TextEncoderConstructor = 429,
|
|
TextEncoderEncode = 430,
|
|
TextDecoderConstructor = 431,
|
|
TextDecoderDecode = 432,
|
|
FocusInOutEvent = 433,
|
|
MouseEventMovementX = 434,
|
|
MouseEventMovementY = 435,
|
|
MixedContentRaw = 437,
|
|
MixedContentImage = 438,
|
|
MixedContentMedia = 439,
|
|
DocumentFonts = 440,
|
|
MixedContentFormsSubmitted = 441,
|
|
FormsSubmitted = 442,
|
|
TextInputEventOnInput = 443,
|
|
TextInputEventOnTextArea = 444,
|
|
TextInputEventOnContentEditable = 445,
|
|
TextInputEventOnNotNode = 446,
|
|
WebkitBeforeTextInsertedOnInput = 447,
|
|
WebkitBeforeTextInsertedOnTextArea = 448,
|
|
WebkitBeforeTextInsertedOnContentEditable = 449,
|
|
WebkitBeforeTextInsertedOnNotNode = 450,
|
|
WebkitEditableContentChangedOnInput = 451,
|
|
WebkitEditableContentChangedOnTextArea = 452,
|
|
WebkitEditableContentChangedOnContentEditable = 453,
|
|
WebkitEditableContentChangedOnNotNode = 454,
|
|
HTMLImports = 455,
|
|
ElementCreateShadowRoot = 456,
|
|
DocumentRegisterElement = 457,
|
|
EditingAppleInterchangeNewline = 458,
|
|
EditingAppleConvertedSpace = 459,
|
|
EditingApplePasteAsQuotation = 460,
|
|
EditingAppleStyleSpanClass = 461,
|
|
EditingAppleTabSpanClass = 462,
|
|
HTMLImportsAsyncAttribute = 463,
|
|
FontFaceSetReady = 464,
|
|
|
|
CSSSelectorPseudoUnresolved = 466,
|
|
|
|
CSSSelectorPseudoHost = 469,
|
|
|
|
CSSDeepCombinator = 471,
|
|
SyncXHRWithCredentials = 472,
|
|
// The above items are available in M37 branch.
|
|
|
|
UseAsm = 473,
|
|
KeyEventNotAllowedInFullScreen = 474,
|
|
DOMWindowOpen = 475,
|
|
DOMWindowOpenFeatures = 476,
|
|
AspectRatioFlexItem = 479,
|
|
DetailsElement = 480,
|
|
DialogElement = 481,
|
|
MapElement = 482,
|
|
MeterElement = 483,
|
|
ProgressElement = 484,
|
|
VideoFullscreenAllowedExemption = 485,
|
|
PrefixedHTMLElementDropzone = 490,
|
|
WheelEventWheelDeltaX = 491,
|
|
WheelEventWheelDeltaY = 492,
|
|
WheelEventWheelDelta = 493,
|
|
SendBeacon = 494,
|
|
SendBeaconQuotaExceeded = 495,
|
|
SVGSMILElementInDocument = 501,
|
|
MouseEventOffsetX = 502,
|
|
MouseEventOffsetY = 503,
|
|
MouseEventX = 504,
|
|
MouseEventY = 505,
|
|
MouseEventFromElement = 506,
|
|
MouseEventToElement = 507,
|
|
RequestFileSystem = 508,
|
|
RequestFileSystemWorker = 509,
|
|
RequestFileSystemSyncWorker = 510,
|
|
UIEventLayerX = 511,
|
|
UIEventLayerY = 512,
|
|
UIEventPageX = 513,
|
|
UIEventPageY = 514,
|
|
BgPropertiesFixed = 515,
|
|
HTMLImageElementComposite = 516,
|
|
DevToolsConsoleTimeline = 517,
|
|
DevToolsConsoleProfile = 518,
|
|
PictureSourceSrc = 520,
|
|
// The above items are available in M38 branch.
|
|
|
|
Picture = 521,
|
|
Sizes = 522,
|
|
SrcsetXDescriptor = 523,
|
|
SrcsetWDescriptor = 524,
|
|
SelectionContainsNode = 525,
|
|
// Add new features immediately above this line. Don't change assigned
|
|
// numbers of any item, and don't reuse removed slots.
|
|
// Also, run update_use_counter_feature_enum.py in chromium/src/tools/metrics/histograms/
|
|
// to update the UMA mapping.
|
|
NumberOfFeatures, // This enum value must be last.
|
|
};
|
|
|
|
// "count" sets the bit for this feature to 1. Repeated calls are ignored.
|
|
static void count(const Document&, Feature);
|
|
// This doesn't count for ExecutionContexts for shared workers and service
|
|
// workers.
|
|
static void count(const ExecutionContext*, Feature);
|
|
void count(CSSParserContext, CSSPropertyID);
|
|
void count(Feature);
|
|
|
|
// "countDeprecation" sets the bit for this feature to 1, and sends a deprecation
|
|
// warning to the console. Repeated calls are ignored.
|
|
//
|
|
// Be considerate to developers' consoles: features should only send
|
|
// deprecation warnings when we're actively interested in removing them from
|
|
// the platform.
|
|
//
|
|
// The ExecutionContext* overload doesn't work for shared workers and
|
|
// service workers.
|
|
static void countDeprecation(const LocalDOMWindow*, Feature);
|
|
static void countDeprecation(ExecutionContext*, Feature);
|
|
static void countDeprecation(const Document&, Feature);
|
|
String deprecationMessage(Feature);
|
|
|
|
void didCommitLoad();
|
|
|
|
static UseCounter* getFrom(const Document*);
|
|
static UseCounter* getFrom(const CSSStyleSheet*);
|
|
static UseCounter* getFrom(const StyleSheetContents*);
|
|
|
|
static void muteForInspector();
|
|
static void unmuteForInspector();
|
|
|
|
private:
|
|
static int m_muteCount;
|
|
|
|
bool recordMeasurement(Feature feature)
|
|
{
|
|
if (UseCounter::m_muteCount)
|
|
return false;
|
|
ASSERT(feature != PageDestruction); // PageDestruction is reserved as a scaling factor.
|
|
ASSERT(feature < NumberOfFeatures);
|
|
if (!m_countBits) {
|
|
m_countBits = adoptPtr(new BitVector(NumberOfFeatures));
|
|
m_countBits->clearAll();
|
|
}
|
|
|
|
if (m_countBits->quickGet(feature))
|
|
return false;
|
|
|
|
m_countBits->quickSet(feature);
|
|
return true;
|
|
}
|
|
|
|
void updateMeasurements();
|
|
|
|
OwnPtr<BitVector> m_countBits;
|
|
BitVector m_CSSFeatureBits;
|
|
};
|
|
|
|
} // namespace blink
|
|
|
|
#endif // UseCounter_h
|