histogram_snapshot_manager_unittest.cc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Copyright 2014 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. #include "base/metrics/histogram_snapshot_manager.h"
  5. #include <string>
  6. #include <vector>
  7. #include "base/containers/contains.h"
  8. #include "base/metrics/histogram_delta_serialization.h"
  9. #include "base/metrics/histogram_macros.h"
  10. #include "base/metrics/sample_vector.h"
  11. #include "base/metrics/statistics_recorder.h"
  12. #include "testing/gtest/include/gtest/gtest.h"
  13. namespace base {
  14. class HistogramFlattenerDeltaRecorder : public HistogramFlattener {
  15. public:
  16. HistogramFlattenerDeltaRecorder() = default;
  17. HistogramFlattenerDeltaRecorder(const HistogramFlattenerDeltaRecorder&) =
  18. delete;
  19. HistogramFlattenerDeltaRecorder& operator=(
  20. const HistogramFlattenerDeltaRecorder&) = delete;
  21. void RecordDelta(const HistogramBase& histogram,
  22. const HistogramSamples& snapshot) override {
  23. recorded_delta_histogram_names_.push_back(histogram.histogram_name());
  24. // Use CHECK instead of ASSERT to get full stack-trace and thus origin.
  25. CHECK(!Contains(recorded_delta_histogram_sum_, histogram.histogram_name()));
  26. // Keep pointer to snapshot for testing. This really isn't ideal but the
  27. // snapshot-manager keeps the snapshot alive until it's "forgotten".
  28. recorded_delta_histogram_sum_[histogram.histogram_name()] = snapshot.sum();
  29. }
  30. void Reset() {
  31. recorded_delta_histogram_names_.clear();
  32. recorded_delta_histogram_sum_.clear();
  33. }
  34. std::vector<std::string> GetRecordedDeltaHistogramNames() {
  35. return recorded_delta_histogram_names_;
  36. }
  37. int64_t GetRecordedDeltaHistogramSum(const std::string& name) {
  38. EXPECT_TRUE(Contains(recorded_delta_histogram_sum_, name));
  39. return recorded_delta_histogram_sum_[name];
  40. }
  41. private:
  42. std::vector<std::string> recorded_delta_histogram_names_;
  43. std::map<std::string, int64_t> recorded_delta_histogram_sum_;
  44. };
  45. class HistogramSnapshotManagerTest : public testing::Test {
  46. protected:
  47. HistogramSnapshotManagerTest()
  48. : statistics_recorder_(StatisticsRecorder::CreateTemporaryForTesting()),
  49. histogram_snapshot_manager_(&histogram_flattener_delta_recorder_) {}
  50. ~HistogramSnapshotManagerTest() override = default;
  51. std::unique_ptr<StatisticsRecorder> statistics_recorder_;
  52. HistogramFlattenerDeltaRecorder histogram_flattener_delta_recorder_;
  53. HistogramSnapshotManager histogram_snapshot_manager_;
  54. };
  55. TEST_F(HistogramSnapshotManagerTest, PrepareDeltasNoFlagsFilter) {
  56. // kNoFlags filter should record all histograms.
  57. UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 4);
  58. UMA_STABILITY_HISTOGRAM_ENUMERATION("UmaStabilityHistogram", 1, 2);
  59. StatisticsRecorder::PrepareDeltas(false, HistogramBase::kNoFlags,
  60. HistogramBase::kNoFlags,
  61. &histogram_snapshot_manager_);
  62. const std::vector<std::string>& histograms =
  63. histogram_flattener_delta_recorder_.GetRecordedDeltaHistogramNames();
  64. EXPECT_EQ(2U, histograms.size());
  65. EXPECT_EQ("UmaHistogram", histograms[0]);
  66. EXPECT_EQ("UmaStabilityHistogram", histograms[1]);
  67. }
  68. TEST_F(HistogramSnapshotManagerTest, PrepareDeltasUmaHistogramFlagFilter) {
  69. // Note that kUmaStabilityHistogramFlag includes kUmaTargetedHistogramFlag.
  70. UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 4);
  71. UMA_STABILITY_HISTOGRAM_ENUMERATION("UmaStabilityHistogram", 1, 2);
  72. StatisticsRecorder::PrepareDeltas(false, HistogramBase::kNoFlags,
  73. HistogramBase::kUmaTargetedHistogramFlag,
  74. &histogram_snapshot_manager_);
  75. const std::vector<std::string>& histograms =
  76. histogram_flattener_delta_recorder_.GetRecordedDeltaHistogramNames();
  77. EXPECT_EQ(2U, histograms.size());
  78. EXPECT_EQ("UmaHistogram", histograms[0]);
  79. EXPECT_EQ("UmaStabilityHistogram", histograms[1]);
  80. }
  81. TEST_F(HistogramSnapshotManagerTest,
  82. PrepareDeltasUmaStabilityHistogramFlagFilter) {
  83. UMA_HISTOGRAM_ENUMERATION("UmaHistogram", 1, 4);
  84. UMA_STABILITY_HISTOGRAM_ENUMERATION("UmaStabilityHistogram", 1, 2);
  85. StatisticsRecorder::PrepareDeltas(false, HistogramBase::kNoFlags,
  86. HistogramBase::kUmaStabilityHistogramFlag,
  87. &histogram_snapshot_manager_);
  88. const std::vector<std::string>& histograms =
  89. histogram_flattener_delta_recorder_.GetRecordedDeltaHistogramNames();
  90. EXPECT_EQ(1U, histograms.size());
  91. EXPECT_EQ("UmaStabilityHistogram", histograms[0]);
  92. }
  93. } // namespace base