Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / chrome / test / base / uma_histogram_helper.h
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 #ifndef CHROME_TEST_BASE_UMA_HISTOGRAM_HELPER_H_
6 #define CHROME_TEST_BASE_UMA_HISTOGRAM_HELPER_H_
7
8 #include "base/memory/linked_ptr.h"
9 #include "base/metrics/histogram.h"
10 #include "base/metrics/histogram_base.h"
11 #include "base/metrics/histogram_samples.h"
12
13 // UMAHistogramHelper provides a simple interface for examining UMA histograms.
14 // Tests can use this interface to verify that UMA data is getting logged as
15 // intended.
16 class UMAHistogramHelper {
17  public:
18   // UMAHistogramHelper should be created before the execution of the test case.
19   UMAHistogramHelper();
20
21   ~UMAHistogramHelper();
22
23   // Parameters should be string literals of all histograms to snapshot.
24   // Call this before executing the test code. This method can be called
25   // multiple times. The existing snapshots are preserved, except when one of
26   // the |histogram_names| was previously passed as a parameter, then a new
27   // snapshot will replace the existing one.
28   void PrepareSnapshot(const char* const histogram_names[],
29                        size_t num_histograms);
30
31   // Each child process may have its own histogram data, make sure this data
32   // gets accumulated into the browser process before we examine the histograms.
33   void Fetch();
34
35   // We know the exact number of samples in a bucket, and that no other bucket
36   // should have samples. If |PrepareSnapshot| was called for the histogram
37   // named |name| then the |expected_count| is the diff from the snapshot.
38   void ExpectUniqueSample(const std::string& name,
39                           base::HistogramBase::Sample sample,
40                           base::HistogramBase::Count expected_count);
41
42   // We know the exact number of samples in a bucket, but other buckets may
43   // have samples as well. If |PrepareSnapshot| was called for histogram named
44   // |name| then the |expected_count| is the diff from the snapshot.
45   void ExpectBucketCount(const std::string& name,
46                           base::HistogramBase::Sample sample,
47                           base::HistogramBase::Count expected_count);
48
49   // We don't know the values of the samples, but we know how many there are. If
50   // |PrepareSnapshot| was called for |name| histogram, then the
51   // |count| is the diff from the snapshot.
52   void ExpectTotalCount(const std::string& name,
53                         base::HistogramBase::Count count);
54
55  private:
56   void FetchCallback();
57
58   void CheckBucketCount(const std::string& name,
59                         base::HistogramBase::Sample sample,
60                         base::Histogram::Count expected_count,
61                         base::HistogramSamples& samples);
62
63   void CheckTotalCount(const std::string& name,
64                        base::Histogram::Count expected_count,
65                        base::HistogramSamples& samples);
66
67   DISALLOW_COPY_AND_ASSIGN(UMAHistogramHelper);
68
69   // The map from histogram names to their snapshots
70   std::map<std::string, linked_ptr<base::HistogramSamples> >
71       histogram_snapshots;
72 };
73
74 #endif  // CHROME_TEST_BASE_UMA_HISTOGRAM_HELPER_H_