diff options
author | lpromero@chromium.org <lpromero@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-20 17:46:47 +0000 |
---|---|---|
committer | lpromero@chromium.org <lpromero@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-20 17:46:47 +0000 |
commit | bbc2e4c6ab8afb95f5e63b7a02f8ef60c71dec9b (patch) | |
tree | 228ab5edfa0163c9c80daf33daa226b3d9fa6299 /net | |
parent | 473bdc43543599e19a749a530b839fac5f865e0c (diff) | |
download | chromium_src-bbc2e4c6ab8afb95f5e63b7a02f8ef60c71dec9b.zip chromium_src-bbc2e4c6ab8afb95f5e63b7a02f8ef60c71dec9b.tar.gz chromium_src-bbc2e4c6ab8afb95f5e63b7a02f8ef60c71dec9b.tar.bz2 |
Reland "Add a HistogramRecorder class and use cases."
This CL adds a utility class to streamline the task of testing that metrics have been updated as expected. Specifically, the HistogramRecorder class allows a client to obtain the differential value of a given histogram in the interval since the given HistogramRecorder instance was created.
This reverts commit b957026f43ef9464a8cdd5a240867c807b2281da.
BUG=232414
TBR=rsleevi, mark, groby, thakis
Review URL: https://codereview.chromium.org/19866004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@242121 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/url_request/url_request_throttler_unittest.cc | 82 |
1 files changed, 18 insertions, 64 deletions
diff --git a/net/url_request/url_request_throttler_unittest.cc b/net/url_request/url_request_throttler_unittest.cc index b964b10..52b3a0a 100644 --- a/net/url_request/url_request_throttler_unittest.cc +++ b/net/url_request/url_request_throttler_unittest.cc @@ -5,13 +5,12 @@ #include "net/url_request/url_request_throttler_manager.h" #include "base/memory/scoped_ptr.h" -#include "base/metrics/histogram.h" #include "base/metrics/histogram_samples.h" -#include "base/metrics/statistics_recorder.h" #include "base/pickle.h" #include "base/stl_util.h" #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" +#include "base/test/histogram_recorder.h" #include "base/time/time.h" #include "net/base/load_flags.h" #include "net/base/request_priority.h" @@ -29,10 +28,7 @@ namespace net { namespace { -using base::Histogram; -using base::HistogramBase; -using base::HistogramSamples; -using base::StatisticsRecorder; +const char kRequestThrottledHistogramName[] = "Throttling.RequestThrottled"; class MockURLRequestThrottlerEntry : public URLRequestThrottlerEntry { public: @@ -176,32 +172,22 @@ class URLRequestThrottlerEntryTest : public testing::Test { URLRequestThrottlerEntryTest() : request_(GURL(), DEFAULT_PRIORITY, NULL, &context_) {} - virtual void SetUp(); - virtual void TearDown(); + static void SetUpTestCase() { + base::HistogramRecorder::Initialize(); + } - // After calling this function, histogram snapshots in |samples_| contain - // only the delta caused by the test case currently running. - void CalculateHistogramDeltas(); + virtual void SetUp(); TimeTicks now_; MockURLRequestThrottlerManager manager_; // Dummy object, not used. scoped_refptr<MockURLRequestThrottlerEntry> entry_; - std::map<std::string, HistogramSamples*> original_samples_; - std::map<std::string, HistogramSamples*> samples_; + scoped_ptr<base::HistogramRecorder> histogram_recorder_; TestURLRequestContext context_; TestURLRequest request_; }; -// List of all histograms we care about in these unit tests. -const char* kHistogramNames[] = { - "Throttling.FailureCountAtSuccess", - "Throttling.PerceivedDowntime", - "Throttling.RequestThrottled", - "Throttling.SiteOptedOut", -}; - void URLRequestThrottlerEntryTest::SetUp() { request_.SetLoadFlags(0); @@ -209,43 +195,7 @@ void URLRequestThrottlerEntryTest::SetUp() { entry_ = new MockURLRequestThrottlerEntry(&manager_); entry_->ResetToBlank(now_); - for (size_t i = 0; i < arraysize(kHistogramNames); ++i) { - // Must retrieve original samples for each histogram for comparison - // as other tests may affect them. - const char* name = kHistogramNames[i]; - HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); - if (histogram) { - original_samples_[name] = histogram->SnapshotSamples().release(); - } else { - original_samples_[name] = NULL; - } - } -} - -void URLRequestThrottlerEntryTest::TearDown() { - STLDeleteValues(&original_samples_); - STLDeleteValues(&samples_); -} - -void URLRequestThrottlerEntryTest::CalculateHistogramDeltas() { - for (size_t i = 0; i < arraysize(kHistogramNames); ++i) { - const char* name = kHistogramNames[i]; - HistogramSamples* original = original_samples_[name]; - - HistogramBase* histogram = StatisticsRecorder::FindHistogram(name); - if (histogram) { - ASSERT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histogram->flags()); - - scoped_ptr<HistogramSamples> samples(histogram->SnapshotSamples()); - if (original) - samples->Subtract(*original); - samples_[name] = samples.release(); - } - } - - // Ensure we don't accidentally use the originals in our tests. - STLDeleteValues(&original_samples_); - original_samples_.clear(); + histogram_recorder_.reset(new base::HistogramRecorder()); } std::ostream& operator<<(std::ostream& out, const base::TimeTicks& time) { @@ -273,9 +223,11 @@ TEST_F(URLRequestThrottlerEntryTest, InterfaceDuringExponentialBackoff) { request_.SetLoadFlags(LOAD_MAYBE_USER_GESTURE); EXPECT_FALSE(entry_->ShouldRejectRequest(request_)); - CalculateHistogramDeltas(); - ASSERT_EQ(1, samples_["Throttling.RequestThrottled"]->GetCount(0)); - ASSERT_EQ(1, samples_["Throttling.RequestThrottled"]->GetCount(1)); + scoped_ptr<base::HistogramSamples> samples( + histogram_recorder_->GetHistogramSamplesSinceCreation( + kRequestThrottledHistogramName)); + ASSERT_EQ(1, samples->GetCount(0)); + ASSERT_EQ(1, samples->GetCount(1)); } TEST_F(URLRequestThrottlerEntryTest, InterfaceNotDuringExponentialBackoff) { @@ -285,9 +237,11 @@ TEST_F(URLRequestThrottlerEntryTest, InterfaceNotDuringExponentialBackoff) { entry_->fake_time_now_ - TimeDelta::FromMilliseconds(1)); EXPECT_FALSE(entry_->ShouldRejectRequest(request_)); - CalculateHistogramDeltas(); - ASSERT_EQ(2, samples_["Throttling.RequestThrottled"]->GetCount(0)); - ASSERT_EQ(0, samples_["Throttling.RequestThrottled"]->GetCount(1)); + scoped_ptr<base::HistogramSamples> samples( + histogram_recorder_->GetHistogramSamplesSinceCreation( + kRequestThrottledHistogramName)); + ASSERT_EQ(2, samples->GetCount(0)); + ASSERT_EQ(0, samples->GetCount(1)); } TEST_F(URLRequestThrottlerEntryTest, InterfaceUpdateFailure) { |