Chromium Code Reviews| Index: chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| diff --git a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| index 4c7cfe23f373b9cf396d8713307cdf7f29bc82ce..234df8e4d4035bae76998002bb36fa0556733b13 100644 |
| --- a/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| +++ b/chrome/browser/subresource_filter/subresource_filter_browsertest.cc |
| @@ -11,6 +11,7 @@ |
| #include "base/strings/string_piece.h" |
| #include "base/test/histogram_tester.h" |
| #include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/metrics/subprocess_metrics_provider.h" |
| #include "chrome/browser/subresource_filter/test_ruleset_publisher.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| @@ -56,10 +57,12 @@ IN_PROC_BROWSER_TEST_F(SubresourceFilterDisabledBrowserTest, |
| // SubresourceFilterBrowserTest ----------------------------------------------- |
| -class SubresourceFilterBrowserTest : public InProcessBrowserTest { |
| +class SubresourceFilterBrowserTestImpl : public InProcessBrowserTest { |
| public: |
| - SubresourceFilterBrowserTest() {} |
| - ~SubresourceFilterBrowserTest() override {} |
| + explicit SubresourceFilterBrowserTestImpl(bool measure_performance) |
| + : measure_performance_(measure_performance) {} |
| + |
| + ~SubresourceFilterBrowserTestImpl() override {} |
| protected: |
| // It would be too late to enable the feature in SetUpOnMainThread(), as it is |
| @@ -80,7 +83,9 @@ class SubresourceFilterBrowserTest : public InProcessBrowserTest { |
| void SetUpOnMainThread() override { |
| scoped_feature_toggle_.reset(new ScopedSubresourceFilterFeatureToggle( |
| base::FeatureList::OVERRIDE_ENABLE_FEATURE, kActivationStateEnabled, |
| - kActivationScopeAllSites)); |
| + kActivationScopeAllSites, std::string(), |
| + measure_performance_ ? "1" : "0")); |
| + |
| base::FilePath test_data_dir; |
| PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir); |
| embedded_test_server()->ServeFilesFromDirectory(test_data_dir); |
| @@ -137,10 +142,30 @@ class SubresourceFilterBrowserTest : public InProcessBrowserTest { |
| private: |
| std::unique_ptr<ScopedSubresourceFilterFeatureToggle> scoped_feature_toggle_; |
| TestRulesetPublisher test_ruleset_publisher_; |
| + bool measure_performance_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SubresourceFilterBrowserTestImpl); |
| +}; |
| - DISALLOW_COPY_AND_ASSIGN(SubresourceFilterBrowserTest); |
| +class SubresourceFilterBrowserTest : public SubresourceFilterBrowserTestImpl { |
| + public: |
| + SubresourceFilterBrowserTest() : SubresourceFilterBrowserTestImpl(false) {} |
| +}; |
| + |
| +// TODO(pkalinnikov): It should be possible to have only one fixture, i.e., |
| +// SubresourceFilterBrowserTest, unsetting |measure_performance| by default, and |
| +// providing a method to switch it on. However, the current implementation of |
| +// ScopedSubresourceFilterFeatureToggle in use pollutes the global |
| +// FieldTrialList in such a way that variation parameters can not be reassigned. |
| +class SubresourceFilterWithPerformanceMeasurementBrowserTest |
| + : public SubresourceFilterBrowserTestImpl { |
| + public: |
| + SubresourceFilterWithPerformanceMeasurementBrowserTest() |
| + : SubresourceFilterBrowserTestImpl(true) {} |
| }; |
| +// Tests ----------------------------------------------------------------------- |
| + |
| IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, MainFrameActivation) { |
| GURL url(GetTestUrl("subresource_filter/frame_with_included_script.html")); |
| ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix( |
| @@ -243,4 +268,87 @@ IN_PROC_BROWSER_TEST_F(SubresourceFilterBrowserTest, |
| tester.ExpectBucketCount(kSubresourceFilterPromptHistogram, true, 2); |
| } |
| +// Tests checking how histograms are recorded. --------------------------------- |
| + |
| +namespace { |
| + |
| +// Path to a multi-frame document used for the tests below. |
| +constexpr const char kPathToFrameSet[] = "subresource_filter/frame_set.html"; |
|
engedy
2016/12/21 19:10:28
nit: This is used further up in the file in multip
pkalinnikov
2016/12/22 16:53:03
Done.
|
| + |
| +// The counters describing how much content the |kPathToFrameSet| contains. |
| +constexpr base::Histogram::Count number_of_pages = 1; |
|
engedy
2016/12/21 19:10:28
nit: kNumberOfPages
nit: Is there any real simple
pkalinnikov
2016/12/22 16:53:03
Done.
The encapsulation nit is probably not releva
|
| +constexpr base::Histogram::Count number_of_documents = 4; |
| +constexpr base::Histogram::Count number_of_subresources = 5; |
| + |
| +// Names of the histograms being checked. |
| +constexpr const char kActivationWallDuration[] = |
| + "SubresourceFilter.DocumentLoad.Activation.WallDuration"; |
| +constexpr const char kActivationCPUDuration[] = |
| + "SubresourceFilter.DocumentLoad.Activation.CPUDuration"; |
| +constexpr const char kEvaluationTotalWallDurationForPage[] = |
| + "SubresourceFilter.PageLoad.SubresourceEvaluation.TotalWallDuration"; |
| +constexpr const char kEvaluationTotalCPUDurationForPage[] = |
| + "SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration"; |
| +constexpr const char kEvaluationTotalWallDurationForDocument[] = |
| + "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalWallDuration"; |
| +constexpr const char kEvaluationTotalCPUDurationForDocument[] = |
| + "SubresourceFilter.DocumentLoad.SubresourceEvaluation.TotalCPUDuration"; |
| +constexpr const char kEvaluationWallDuration[] = |
| + "SubresourceFilter.SubresourceLoad.Evaluation.WallDuration"; |
| +constexpr const char kEvaluationCPUDuration[] = |
| + "SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"; |
| + |
| +} // namespace |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + SubresourceFilterBrowserTest, |
| + PerformanceHistogramsAreNotRecordedWhenMeasurementDisabled) { |
| + ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix("example")); |
|
engedy
2016/12/21 19:10:28
nit: Please use `suffix-that-does-not-match-anythi
pkalinnikov
2016/12/22 16:53:03
Done.
|
| + const GURL url = GetTestUrl(kPathToFrameSet); |
| + |
| + base::HistogramTester tester; |
| + ui_test_utils::NavigateToURL(browser(), url); |
| + |
| + // The following histograms are generated on the browser side. |
|
engedy
2016/12/21 19:10:28
Could you please also add checks for:
Subresource
pkalinnikov
2016/12/22 16:53:03
Done.
|
| + tester.ExpectTotalCount(kEvaluationTotalWallDurationForPage, 0); |
| + tester.ExpectTotalCount(kEvaluationTotalCPUDurationForPage, 0); |
| + |
| + // The rest is produced by renderers, therefore needs to be merged here. |
| + SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); |
| + tester.ExpectTotalCount(kEvaluationTotalWallDurationForDocument, 0); |
| + tester.ExpectTotalCount(kEvaluationTotalCPUDurationForDocument, 0); |
| + tester.ExpectTotalCount(kEvaluationWallDuration, 0); |
| + tester.ExpectTotalCount(kEvaluationCPUDuration, 0); |
| + |
| + // Activation histograms are always recorded. |
| + tester.ExpectTotalCount(kActivationWallDuration, number_of_documents); |
| + tester.ExpectTotalCount(kActivationCPUDuration, number_of_documents); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(SubresourceFilterWithPerformanceMeasurementBrowserTest, |
| + PerformanceHistogramsAreRecordedWhenMeasurementEnabled) { |
| + ASSERT_NO_FATAL_FAILURE(SetRulesetToDisallowURLsWithPathSuffix("example")); |
| + const GURL url = GetTestUrl("subresource_filter/frame_set.html"); |
| + |
| + base::HistogramTester tester; |
| + ui_test_utils::NavigateToURL(browser(), url); |
| + |
| + // The following histograms are generated on the browser side. |
| + tester.ExpectTotalCount(kEvaluationTotalWallDurationForPage, number_of_pages); |
| + tester.ExpectTotalCount(kEvaluationTotalCPUDurationForPage, number_of_pages); |
| + |
| + // The rest is produced by renderers, therefore needs to be merged here. |
| + SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); |
| + tester.ExpectTotalCount(kEvaluationTotalWallDurationForDocument, |
| + number_of_documents); |
| + tester.ExpectTotalCount(kEvaluationTotalCPUDurationForDocument, |
| + number_of_documents); |
| + tester.ExpectTotalCount(kEvaluationWallDuration, number_of_subresources); |
| + tester.ExpectTotalCount(kEvaluationCPUDuration, number_of_subresources); |
| + |
| + // Activation histograms are always recorded. |
| + tester.ExpectTotalCount(kActivationWallDuration, number_of_documents); |
| + tester.ExpectTotalCount(kActivationCPUDuration, number_of_documents); |
| +} |
| + |
| } // namespace subresource_filter |