Index: base/metrics/histogram_snapshot_manager_unittest.cc |
diff --git a/base/metrics/histogram_snapshot_manager_unittest.cc b/base/metrics/histogram_snapshot_manager_unittest.cc |
index 72db7d58674520206bb96c77e0abc7fffc9a9493..8ec03daa8d97c9579f97dc949c18bfe59c02eb2f 100644 |
--- a/base/metrics/histogram_snapshot_manager_unittest.cc |
+++ b/base/metrics/histogram_snapshot_manager_unittest.cc |
@@ -10,7 +10,9 @@ |
#include "base/macros.h" |
#include "base/metrics/histogram_delta_serialization.h" |
#include "base/metrics/histogram_macros.h" |
+#include "base/metrics/sample_vector.h" |
#include "base/metrics/statistics_recorder.h" |
+#include "base/stl_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace base { |
@@ -22,6 +24,11 @@ class HistogramFlattenerDeltaRecorder : public HistogramFlattener { |
void RecordDelta(const HistogramBase& histogram, |
const HistogramSamples& snapshot) override { |
recorded_delta_histogram_names_.push_back(histogram.histogram_name()); |
+ ASSERT_FALSE(ContainsKey(recorded_delta_histogram_sum_, |
+ histogram.histogram_name())); |
+ // Keep pointer to snapshot for testing. This really isn't ideal but the |
+ // snapshot-manager keeps the snapshot alive until it's "forgotten". |
+ recorded_delta_histogram_sum_[histogram.histogram_name()] = snapshot.sum(); |
} |
void InconsistencyDetected(HistogramBase::Inconsistency problem) override { |
@@ -37,12 +44,23 @@ class HistogramFlattenerDeltaRecorder : public HistogramFlattener { |
ASSERT_TRUE(false); |
} |
+ void Reset() { |
+ recorded_delta_histogram_names_.clear(); |
+ recorded_delta_histogram_sum_.clear(); |
+ } |
+ |
std::vector<std::string> GetRecordedDeltaHistogramNames() { |
return recorded_delta_histogram_names_; |
} |
+ int64_t GetRecordedDeltaHistogramSum(const std::string& name) { |
+ EXPECT_TRUE(ContainsKey(recorded_delta_histogram_sum_, name)); |
+ return recorded_delta_histogram_sum_[name]; |
+ } |
+ |
private: |
std::vector<std::string> recorded_delta_histogram_names_; |
+ std::map<std::string, int64_t> recorded_delta_histogram_sum_; |
DISALLOW_COPY_AND_ASSIGN(HistogramFlattenerDeltaRecorder); |
}; |
@@ -61,7 +79,7 @@ class HistogramSnapshotManagerTest : public testing::Test { |
TEST_F(HistogramSnapshotManagerTest, PrepareDeltasNoFlagsFilter) { |
// kNoFlags filter should record all histograms. |
- UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 2); |
+ UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 4); |
UMA_STABILITY_HISTOGRAM_ENUMERATION("UmaStabilityHistogram", 1, 2); |
histogram_snapshot_manager_.PrepareDeltas( |
@@ -77,7 +95,7 @@ TEST_F(HistogramSnapshotManagerTest, PrepareDeltasNoFlagsFilter) { |
TEST_F(HistogramSnapshotManagerTest, PrepareDeltasUmaHistogramFlagFilter) { |
// Note that kUmaStabilityHistogramFlag includes kUmaTargetedHistogramFlag. |
- UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 2); |
+ UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 4); |
UMA_STABILITY_HISTOGRAM_ENUMERATION("UmaStabilityHistogram", 1, 2); |
histogram_snapshot_manager_.PrepareDeltas( |
@@ -93,7 +111,7 @@ TEST_F(HistogramSnapshotManagerTest, PrepareDeltasUmaHistogramFlagFilter) { |
TEST_F(HistogramSnapshotManagerTest, |
PrepareDeltasUmaStabilityHistogramFlagFilter) { |
- UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 2); |
+ UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 4); |
UMA_STABILITY_HISTOGRAM_ENUMERATION("UmaStabilityHistogram", 1, 2); |
histogram_snapshot_manager_.PrepareDeltas( |
@@ -106,4 +124,35 @@ TEST_F(HistogramSnapshotManagerTest, |
EXPECT_EQ("UmaStabilityHistogram", histograms[0]); |
} |
+TEST_F(HistogramSnapshotManagerTest, CheckMerge) { |
+ UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 4); |
+ UMA_STABILITY_HISTOGRAM_ENUMERATION("UmaStabilityHistogram", 1, 2); |
+ |
+ base::HistogramBase* h1 = base::LinearHistogram::FactoryGet( |
+ "UmaHistogram", 1, 4, 5, 0); |
+ ASSERT_TRUE(h1); |
+ base::HistogramBase* h2 = base::LinearHistogram::FactoryGet( |
+ "UmaStabilityHistogram", 1, 2, 3, 0); |
+ ASSERT_TRUE(h2); |
+ |
+ histogram_snapshot_manager_.StartDeltas(); |
+ histogram_snapshot_manager_.PrepareDelta(h1); |
+ histogram_snapshot_manager_.PrepareDelta(h1); // Delta will be zero. |
+ histogram_snapshot_manager_.PrepareDelta(h2); |
+ h1->Add(2); |
+ h2->Add(1); |
+ histogram_snapshot_manager_.PrepareDelta(h2); |
+ histogram_snapshot_manager_.PrepareDelta(h1); |
+ histogram_snapshot_manager_.FinishDeltas(); |
+ { |
+ const std::vector<std::string> histograms = |
+ histogram_flattener_delta_recorder_.GetRecordedDeltaHistogramNames(); |
+ EXPECT_EQ(2U, histograms.size()); |
+ EXPECT_EQ(3, histogram_flattener_delta_recorder_. |
+ GetRecordedDeltaHistogramSum("UmaHistogram")); |
+ EXPECT_EQ(2, histogram_flattener_delta_recorder_. |
+ GetRecordedDeltaHistogramSum("UmaStabilityHistogram")); |
+ } |
+} |
+ |
} // namespace base |