Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/test/base/uma_histogram_helper.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/metrics/statistics_recorder.h"
      9 #include "base/test/test_timeouts.h"
     10 #include "chrome/test/base/ui_test_utils.h"
     11 #include "content/public/browser/histogram_fetcher.h"
     12 
     13 UMAHistogramHelper::UMAHistogramHelper() {
     14 }
     15 
     16 void UMAHistogramHelper::Fetch() {
     17   base::Closure callback = base::Bind(&UMAHistogramHelper::FetchCallback,
     18                                       base::Unretained(this));
     19 
     20   content::FetchHistogramsAsynchronously(
     21       base::MessageLoop::current(),
     22       callback,
     23       // If this call times out, it means that a child process is not
     24       // responding, which is something we should not ignore.  The timeout is
     25       // set to be longer than the normal browser test timeout so that it will
     26       // be prempted by the normal timeout.
     27       TestTimeouts::action_max_timeout() * 2);
     28   content::RunMessageLoop();
     29 }
     30 
     31 void UMAHistogramHelper::ExpectUniqueSample(
     32     const std::string& name,
     33     base::HistogramBase::Sample sample,
     34     base::HistogramBase::Count expected_count) {
     35   base::HistogramBase* histogram =
     36       base::StatisticsRecorder::FindHistogram(name);
     37   EXPECT_NE(static_cast<base::HistogramBase*>(NULL), histogram)
     38       << "Histogram \"" << name << "\" does not exist.";
     39 
     40   if (histogram) {
     41     scoped_ptr<base::HistogramSamples> samples(histogram->SnapshotSamples());
     42     CheckBucketCount(name, sample, expected_count, *samples);
     43     CheckTotalCount(name, expected_count, *samples);
     44   }
     45 }
     46 
     47 void UMAHistogramHelper::ExpectTotalCount(
     48     const std::string& name,
     49     base::HistogramBase::Count count) {
     50   base::HistogramBase* histogram =
     51       base::StatisticsRecorder::FindHistogram(name);
     52   EXPECT_NE(static_cast<base::HistogramBase*>(NULL), histogram)
     53       << "Histogram \"" << name << "\" does not exist.";
     54 
     55   if (histogram) {
     56     scoped_ptr<base::HistogramSamples> samples(histogram->SnapshotSamples());
     57     CheckTotalCount(name, count, *samples);
     58   }
     59 }
     60 
     61 void UMAHistogramHelper::FetchCallback() {
     62   base::MessageLoopForUI::current()->Quit();
     63 }
     64 
     65 void UMAHistogramHelper::CheckBucketCount(
     66     const std::string& name,
     67     base::HistogramBase::Sample sample,
     68     base::HistogramBase::Count expected_count,
     69     base::HistogramSamples& samples) {
     70   EXPECT_EQ(expected_count, samples.GetCount(sample))
     71       << "Histogram \"" << name
     72       << "\" does not have the right number of samples (" << expected_count
     73       << ") in the expected bucket (" << sample << ").";
     74 }
     75 
     76 void UMAHistogramHelper::CheckTotalCount(
     77     const std::string& name,
     78     base::HistogramBase::Count expected_count,
     79     base::HistogramSamples& samples) {
     80   EXPECT_EQ(expected_count, samples.TotalCount())
     81       << "Histogram \"" << name
     82       << "\" does not have the right total number of samples ("
     83       << expected_count << ").";
     84 }
     85