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

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

Issue 2680423006: UseCounter: Introduce UseCounter::Observer for layout tests (Closed)
Patch Set: 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
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * 12 *
13 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY 13 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 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. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #ifndef UseCounter_h 26 #ifndef UseCounter_h
27 #define UseCounter_h 27 #define UseCounter_h
28 28
29 #include <v8.h>
29 #include "core/CSSPropertyNames.h" 30 #include "core/CSSPropertyNames.h"
30 #include "core/CoreExport.h" 31 #include "core/CoreExport.h"
31 #include "core/css/parser/CSSParserMode.h" 32 #include "core/css/parser/CSSParserMode.h"
33 #include "platform/heap/GarbageCollected.h"
34 #include "platform/heap/HeapAllocator.h"
32 #include "platform/weborigin/KURL.h" 35 #include "platform/weborigin/KURL.h"
33 #include "wtf/BitVector.h" 36 #include "wtf/BitVector.h"
34 #include "wtf/Noncopyable.h" 37 #include "wtf/Noncopyable.h"
35 #include "wtf/text/WTFString.h" 38 #include "wtf/text/WTFString.h"
36 #include <v8.h>
37 39
38 namespace blink { 40 namespace blink {
39 41
40 class CSSStyleSheet; 42 class CSSStyleSheet;
41 class Document; 43 class Document;
42 class EnumerationHistogram; 44 class EnumerationHistogram;
43 class ExecutionContext; 45 class ExecutionContext;
44 class Frame; 46 class Frame;
45 class StyleSheetContents; 47 class StyleSheetContents;
46 48
(...skipping 1410 matching lines...) Expand 10 before | Expand all | Expand 10 after
1457 PointerEventSetCaptureOutsideDispatch = 1806, 1459 PointerEventSetCaptureOutsideDispatch = 1806,
1458 NotificationPermissionRequestedInsecureOrigin = 1807, 1460 NotificationPermissionRequestedInsecureOrigin = 1807,
1459 1461
1460 // Add new features immediately above this line. Don't change assigned 1462 // Add new features immediately above this line. Don't change assigned
1461 // numbers of any item, and don't reuse removed slots. 1463 // numbers of any item, and don't reuse removed slots.
1462 // Also, run update_use_counter_feature_enum.py in 1464 // Also, run update_use_counter_feature_enum.py in
1463 // chromium/src/tools/metrics/histograms/ to update the UMA mapping. 1465 // chromium/src/tools/metrics/histograms/ to update the UMA mapping.
1464 NumberOfFeatures, // This enum value must be last. 1466 NumberOfFeatures, // This enum value must be last.
1465 }; 1467 };
1466 1468
1469 // An interface to observe UseCounter changes.
1470 class Observer : public GarbageCollected<Observer> {
1471 public:
1472 // Returns true if this observer no longer needs to observe the counter.
1473 virtual bool onCountFeature(Feature) = 0;
1474
1475 DEFINE_INLINE_VIRTUAL_TRACE() {}
1476 };
1477
1467 // "count" sets the bit for this feature to 1. Repeated calls are ignored. 1478 // "count" sets the bit for this feature to 1. Repeated calls are ignored.
1468 static void count(const Frame*, Feature); 1479 static void count(const Frame*, Feature);
1469 static void count(const Document&, Feature); 1480 static void count(const Document&, Feature);
1470 static void count(ExecutionContext*, Feature); 1481 static void count(ExecutionContext*, Feature);
1471 1482
1472 void count(CSSParserMode, CSSPropertyID); 1483 void count(CSSParserMode, CSSPropertyID);
1473 void count(Feature); 1484 void count(Feature);
1474 1485
1475 // Count only features if they're being used in an iframe which does not 1486 // Count only features if they're being used in an iframe which does not
1476 // have script access into the top level document. 1487 // have script access into the top level document.
1477 static void countCrossOriginIframe(const Document&, Feature); 1488 static void countCrossOriginIframe(const Document&, Feature);
1478 1489
1479 // Return whether the Feature was previously counted for this document. 1490 // Return whether the Feature was previously counted for this document.
1480 // NOTE: only for use in testing. 1491 // NOTE: only for use in testing.
1481 static bool isCounted(Document&, Feature); 1492 static bool isCounted(Document&, Feature);
1482 // Return whether the CSSPropertyID was previously counted for this document. 1493 // Return whether the CSSPropertyID was previously counted for this document.
1483 // NOTE: only for use in testing. 1494 // NOTE: only for use in testing.
1484 static bool isCounted(Document&, const String&); 1495 static bool isCounted(Document&, const String&);
1485 bool isCounted(CSSPropertyID unresolvedProperty); 1496 bool isCounted(CSSPropertyID unresolvedProperty);
1486 1497
1498 // Adds an observer that observes UseCounter changes.
1499 static void addObserver(Document&, Observer*);
1500
1487 // Invoked when a new document is loaded into the main frame of the page. 1501 // Invoked when a new document is loaded into the main frame of the page.
1488 void didCommitLoad(KURL); 1502 void didCommitLoad(KURL);
1489 1503
1490 static int mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyID); 1504 static int mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyID);
1491 1505
1492 // When muted, all calls to "count" functions are ignoed. May be nested. 1506 // When muted, all calls to "count" functions are ignoed. May be nested.
1493 void muteForInspector(); 1507 void muteForInspector();
1494 void unmuteForInspector(); 1508 void unmuteForInspector();
1495 1509
1496 void recordMeasurement(Feature); 1510 void recordMeasurement(Feature);
1497 1511
1498 // Return whether the feature has been seen since the last page load 1512 // Return whether the feature has been seen since the last page load
1499 // (except when muted). Does include features seen in documents which have 1513 // (except when muted). Does include features seen in documents which have
1500 // reporting disabled. 1514 // reporting disabled.
1501 bool hasRecordedMeasurement(Feature) const; 1515 bool hasRecordedMeasurement(Feature) const;
1502 1516
1517 DECLARE_TRACE();
1518
1503 private: 1519 private:
1504 EnumerationHistogram& featuresHistogram() const; 1520 EnumerationHistogram& featuresHistogram() const;
1505 EnumerationHistogram& cssHistogram() const; 1521 EnumerationHistogram& cssHistogram() const;
1506 1522
1507 // If non-zero, ignore all 'count' calls completely. 1523 // If non-zero, ignore all 'count' calls completely.
1508 unsigned m_muteCount; 1524 unsigned m_muteCount;
1509 1525
1510 // If true, disable reporting all histogram entries. 1526 // If true, disable reporting all histogram entries.
1511 bool m_disableReporting; 1527 bool m_disableReporting;
1512 1528
1513 // The scope represented by this UseCounter instance. 1529 // The scope represented by this UseCounter instance.
1514 Context m_context; 1530 Context m_context;
1515 1531
1516 // Track what features/properties have been reported to the (non-legacy) 1532 // Track what features/properties have been reported to the (non-legacy)
1517 // histograms. 1533 // histograms.
1518 BitVector m_featuresRecorded; 1534 BitVector m_featuresRecorded;
1519 BitVector m_CSSRecorded; 1535 BitVector m_CSSRecorded;
1520 1536
1537 HeapHashSet<Member<Observer>> m_observers;
1538
1521 // Encapsulates the work to preserve the old "FeatureObserver" histogram with 1539 // Encapsulates the work to preserve the old "FeatureObserver" histogram with
1522 // original semantics 1540 // original semantics
1523 // TODO(rbyers): remove this - http://crbug.com/676837 1541 // TODO(rbyers): remove this - http://crbug.com/676837
1524 class CORE_EXPORT LegacyCounter { 1542 class CORE_EXPORT LegacyCounter {
1525 public: 1543 public:
1526 LegacyCounter(); 1544 LegacyCounter();
1527 ~LegacyCounter(); 1545 ~LegacyCounter();
1528 void countFeature(Feature); 1546 void countFeature(Feature);
1529 void countCSS(CSSPropertyID); 1547 void countCSS(CSSPropertyID);
1530 void updateMeasurements(); 1548 void updateMeasurements();
1531 1549
1532 private: 1550 private:
1533 // Tracks what features/properties need to be reported to the legacy 1551 // Tracks what features/properties need to be reported to the legacy
1534 // histograms. 1552 // histograms.
1535 BitVector m_featureBits; 1553 BitVector m_featureBits;
1536 BitVector m_CSSBits; 1554 BitVector m_CSSBits;
1537 } m_legacyCounter; 1555 } m_legacyCounter;
1538 }; 1556 };
1539 1557
1540 } // namespace blink 1558 } // namespace blink
1541 1559
1542 #endif // UseCounter_h 1560 #endif // UseCounter_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698