Пример #1
0
TEST(UseCounterTest, SVGImageContext) {
  UseCounter useCounter(UseCounter::SVGImageContext);
  HistogramTester histogramTester;

  // Verify that SVGImage related feature counters get recorded in a separate
  // histogram.
  EXPECT_FALSE(
      useCounter.hasRecordedMeasurement(UseCounter::SVGSMILAdditiveAnimation));
  useCounter.recordMeasurement(UseCounter::SVGSMILAdditiveAnimation);
  EXPECT_TRUE(
      useCounter.hasRecordedMeasurement(UseCounter::SVGSMILAdditiveAnimation));
  histogramTester.expectUniqueSample(kSVGFeaturesHistogramName,
                                     UseCounter::SVGSMILAdditiveAnimation, 1);

  // And for the CSS counters
  EXPECT_FALSE(useCounter.isCounted(CSSPropertyFont));
  useCounter.count(HTMLStandardMode, CSSPropertyFont);
  EXPECT_TRUE(useCounter.isCounted(CSSPropertyFont));
  histogramTester.expectUniqueSample(
      kSVGCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      1);

  // After a page load, the histograms will be updated
  useCounter.didCommitLoad();
  histogramTester.expectBucketCount(kSVGFeaturesHistogramName,
                                    UseCounter::PageVisits, 1);
  histogramTester.expectTotalCount(kSVGFeaturesHistogramName, 2);
  histogramTester.expectBucketCount(kSVGCSSHistogramName, 1, 1);
  histogramTester.expectTotalCount(kSVGCSSHistogramName, 2);

  // And the legacy histogram will be updated to include these
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::SVGSMILAdditiveAnimation, 1);
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::PageVisits, 1);
  histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 2);
  histogramTester.expectBucketCount(
      kLegacyCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      1);
  histogramTester.expectBucketCount(kLegacyCSSHistogramName, 1, 1);
  histogramTester.expectTotalCount(kLegacyCSSHistogramName, 2);

  // None of this should update the non-legacy non-SVG histograms
  histogramTester.expectTotalCount(kCSSHistogramName, 0);
  histogramTester.expectTotalCount(kFeaturesHistogramName, 0);
}
Пример #2
0
TEST(UseCounterTest, InspectorDisablesMeasurement) {
  UseCounter useCounter;
  HistogramTester histogramTester;

  // The specific feature we use here isn't important.
  UseCounter::Feature feature = UseCounter::Feature::SVGSMILElementInDocument;
  CSSPropertyID property = CSSPropertyFontWeight;
  CSSParserMode parserMode = HTMLStandardMode;

  EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));

  useCounter.muteForInspector();
  useCounter.recordMeasurement(feature);
  EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));
  useCounter.count(parserMode, property);
  EXPECT_FALSE(useCounter.isCounted(property));
  histogramTester.expectTotalCount(kFeaturesHistogramName, 0);
  histogramTester.expectTotalCount(kCSSHistogramName, 0);

  useCounter.muteForInspector();
  useCounter.recordMeasurement(feature);
  EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));
  useCounter.count(parserMode, property);
  EXPECT_FALSE(useCounter.isCounted(property));
  histogramTester.expectTotalCount(kFeaturesHistogramName, 0);
  histogramTester.expectTotalCount(kCSSHistogramName, 0);

  useCounter.unmuteForInspector();
  useCounter.recordMeasurement(feature);
  EXPECT_FALSE(useCounter.hasRecordedMeasurement(feature));
  useCounter.count(parserMode, property);
  EXPECT_FALSE(useCounter.isCounted(property));
  histogramTester.expectTotalCount(kFeaturesHistogramName, 0);
  histogramTester.expectTotalCount(kCSSHistogramName, 0);

  useCounter.unmuteForInspector();
  useCounter.recordMeasurement(feature);
  EXPECT_TRUE(useCounter.hasRecordedMeasurement(feature));
  useCounter.count(parserMode, property);
  EXPECT_TRUE(useCounter.isCounted(property));
  histogramTester.expectUniqueSample(kFeaturesHistogramName, feature, 1);
  histogramTester.expectUniqueSample(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(property), 1);
}
Пример #3
0
 void runTest(const char* histogramName) {
     HistogramTester histogramTester;
     loadImage(this->GetParam().filename);
     histogramTester.expectUniqueSample(histogramName, this->GetParam().type, 1);
 }
Пример #4
0
TEST(UseCounterTest, RecordingCSSProperties) {
  UseCounter useCounter;
  HistogramTester histogramTester;

  // Test recording a single (arbitrary) property
  EXPECT_FALSE(useCounter.isCounted(CSSPropertyFont));
  useCounter.count(HTMLStandardMode, CSSPropertyFont);
  EXPECT_TRUE(useCounter.isCounted(CSSPropertyFont));
  histogramTester.expectUniqueSample(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      1);
  histogramTester.expectTotalCount(kLegacyCSSHistogramName, 0);

  // Test that repeated measurements have no effect
  useCounter.count(HTMLStandardMode, CSSPropertyFont);
  histogramTester.expectUniqueSample(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      1);
  histogramTester.expectTotalCount(kLegacyCSSHistogramName, 0);

  // Test recording a different sample
  EXPECT_FALSE(useCounter.isCounted(CSSPropertyZoom));
  useCounter.count(HTMLStandardMode, CSSPropertyZoom);
  EXPECT_TRUE(useCounter.isCounted(CSSPropertyZoom));
  histogramTester.expectBucketCount(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      1);
  histogramTester.expectBucketCount(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom),
      1);
  histogramTester.expectTotalCount(kCSSHistogramName, 2);
  histogramTester.expectTotalCount(kLegacyCSSHistogramName, 0);

  // Test the impact of page load on the new histogram
  useCounter.didCommitLoad();
  histogramTester.expectBucketCount(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      1);
  histogramTester.expectBucketCount(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom),
      1);
  histogramTester.expectBucketCount(kCSSHistogramName, 1, 1);
  histogramTester.expectTotalCount(kCSSHistogramName, 3);

  // And verify the legacy histogram now looks the same
  histogramTester.expectBucketCount(
      kLegacyCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      1);
  histogramTester.expectBucketCount(
      kLegacyCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom),
      1);
  histogramTester.expectBucketCount(kLegacyCSSHistogramName, 1, 1);
  histogramTester.expectTotalCount(kLegacyCSSHistogramName, 3);

  // Now a repeat measurement should get recorded again, exactly once
  EXPECT_FALSE(useCounter.isCounted(CSSPropertyFont));
  useCounter.count(HTMLStandardMode, CSSPropertyFont);
  useCounter.count(HTMLStandardMode, CSSPropertyFont);
  EXPECT_TRUE(useCounter.isCounted(CSSPropertyFont));
  histogramTester.expectBucketCount(
      kCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      2);
  histogramTester.expectTotalCount(kCSSHistogramName, 4);

  // And on the next page load, the legacy histogram will again be updated
  useCounter.didCommitLoad();
  histogramTester.expectBucketCount(
      kLegacyCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyFont),
      2);
  histogramTester.expectBucketCount(
      kLegacyCSSHistogramName,
      UseCounter::mapCSSPropertyIdToCSSSampleIdForHistogram(CSSPropertyZoom),
      1);
  histogramTester.expectBucketCount(kLegacyCSSHistogramName, 1, 2);
  histogramTester.expectTotalCount(kLegacyCSSHistogramName, 5);

  // None of this should update any of the SVG histograms
  histogramTester.expectTotalCount(kSVGFeaturesHistogramName, 0);
  histogramTester.expectTotalCount(kSVGCSSHistogramName, 0);
}
Пример #5
0
TEST(UseCounterTest, RecordingFeatures) {
  UseCounter useCounter;
  HistogramTester histogramTester;

  // Test recording a single (arbitrary) counter
  EXPECT_FALSE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
  useCounter.recordMeasurement(UseCounter::Fetch);
  EXPECT_TRUE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
  histogramTester.expectUniqueSample(kFeaturesHistogramName, UseCounter::Fetch,
                                     1);
  histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 0);

  // Test that repeated measurements have no effect
  useCounter.recordMeasurement(UseCounter::Fetch);
  histogramTester.expectUniqueSample(kFeaturesHistogramName, UseCounter::Fetch,
                                     1);
  histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 0);

  // Test recording a different sample
  EXPECT_FALSE(useCounter.hasRecordedMeasurement(UseCounter::FetchBodyStream));
  useCounter.recordMeasurement(UseCounter::FetchBodyStream);
  EXPECT_TRUE(useCounter.hasRecordedMeasurement(UseCounter::FetchBodyStream));
  histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::Fetch,
                                    1);
  histogramTester.expectBucketCount(kFeaturesHistogramName,
                                    UseCounter::FetchBodyStream, 1);
  histogramTester.expectTotalCount(kFeaturesHistogramName, 2);
  histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 0);

  // Test the impact of page load on the new histogram
  useCounter.didCommitLoad();
  histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::Fetch,
                                    1);
  histogramTester.expectBucketCount(kFeaturesHistogramName,
                                    UseCounter::FetchBodyStream, 1);
  histogramTester.expectBucketCount(kFeaturesHistogramName,
                                    UseCounter::PageVisits, 1);
  histogramTester.expectTotalCount(kFeaturesHistogramName, 3);

  // And verify the legacy histogram now looks the same
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::Fetch, 1);
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::FetchBodyStream, 1);
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::PageVisits, 1);
  histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 3);

  // Now a repeat measurement should get recorded again, exactly once
  EXPECT_FALSE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
  useCounter.recordMeasurement(UseCounter::Fetch);
  useCounter.recordMeasurement(UseCounter::Fetch);
  EXPECT_TRUE(useCounter.hasRecordedMeasurement(UseCounter::Fetch));
  histogramTester.expectBucketCount(kFeaturesHistogramName, UseCounter::Fetch,
                                    2);
  histogramTester.expectTotalCount(kFeaturesHistogramName, 4);

  // And on the next page load, the legacy histogram will again be updated
  useCounter.didCommitLoad();
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::Fetch, 2);
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::FetchBodyStream, 1);
  histogramTester.expectBucketCount(kLegacyFeaturesHistogramName,
                                    UseCounter::PageVisits, 2);
  histogramTester.expectTotalCount(kLegacyFeaturesHistogramName, 5);

  // None of this should update any of the SVG histograms
  histogramTester.expectTotalCount(kSVGFeaturesHistogramName, 0);
  histogramTester.expectTotalCount(kSVGCSSHistogramName, 0);
}