Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: base/metrics/persistent_histogram_allocator_unittest.cc

Issue 1738063002: Refactor histogram_persistence to be a class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed review comments by Alexei Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
Alexei Svitkine (slow) 2016/03/15 22:00:10 No (c)
bcwhite 2016/03/16 00:32:38 Done.
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 "base/metrics/persistent_histogram_allocator.h"
6
7 #include "base/logging.h"
8 #include "base/metrics/bucket_ranges.h"
9 #include "base/metrics/histogram_macros.h"
10 #include "base/metrics/persistent_memory_allocator.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace base {
14
15 class PersistentHistogramAllocatorTest : public testing::Test {
16 protected:
17 const int32_t kAllocatorMemorySize = 64 << 10; // 64 KiB
18
19 PersistentHistogramAllocatorTest() {}
20
21 void SetUp() override { CreatePersistentHistogramAllocator(); }
22
23 void TearDown() override { DestroyPersistentHistogramAllocator(); }
Alexei Svitkine (slow) 2016/03/15 22:00:10 Instead of needing to override SetUp() or TearDown
bcwhite 2016/03/16 00:32:39 Done. Though what's the point of setup/teardown,
Alexei Svitkine (slow) 2016/03/16 15:14:08 Don't know - I agree they seem superfulous.
24
25 void CreatePersistentHistogramAllocator() {
26 if (!allocator_memory_)
27 allocator_memory_.reset(new char[kAllocatorMemorySize]);
Alexei Svitkine (slow) 2016/03/15 22:00:10 This is only run once at the start of the test - s
bcwhite 2016/03/16 00:32:38 Done.
28
29 PersistentHistogramAllocator::ReleaseGlobalAllocatorForTesting();
30 memset(allocator_memory_.get(), 0, kAllocatorMemorySize);
31 PersistentHistogramAllocator::GetCreateHistogramResultHistogram();
32 PersistentHistogramAllocator::CreateGlobalAllocatorOnPersistentMemory(
33 allocator_memory_.get(), kAllocatorMemorySize, 0, 0,
34 "PersistentHistogramAllocatorTest");
35 allocator_ =
36 PersistentHistogramAllocator::GetGlobalAllocator()->memory_allocator();
37 }
38
39 void DestroyPersistentHistogramAllocator() {
40 allocator_ = nullptr;
41 PersistentHistogramAllocator::ReleaseGlobalAllocatorForTesting();
42 }
43
44 scoped_ptr<char[]> allocator_memory_;
45 PersistentMemoryAllocator* allocator_ = nullptr;
46
47 private:
48 DISALLOW_COPY_AND_ASSIGN(PersistentHistogramAllocatorTest);
49 };
50
51 TEST_F(PersistentHistogramAllocatorTest, CreateAndIterateTest) {
52 PersistentMemoryAllocator::MemoryInfo meminfo0;
53 allocator_->GetMemoryInfo(&meminfo0);
54
55 // Try basic construction
56 HistogramBase* histogram = Histogram::FactoryGet(
57 "TestHistogram", 1, 1000, 10, HistogramBase::kIsPersistent);
58 EXPECT_TRUE(histogram);
59 histogram->CheckName("TestHistogram");
60 PersistentMemoryAllocator::MemoryInfo meminfo1;
61 allocator_->GetMemoryInfo(&meminfo1);
62 EXPECT_GT(meminfo0.free, meminfo1.free);
63
64 HistogramBase* linear_histogram = LinearHistogram::FactoryGet(
65 "TestLinearHistogram", 1, 1000, 10, HistogramBase::kIsPersistent);
66 EXPECT_TRUE(linear_histogram);
67 linear_histogram->CheckName("TestLinearHistogram");
68 PersistentMemoryAllocator::MemoryInfo meminfo2;
69 allocator_->GetMemoryInfo(&meminfo2);
70 EXPECT_GT(meminfo1.free, meminfo2.free);
71
72 HistogramBase* boolean_histogram = BooleanHistogram::FactoryGet(
73 "TestBooleanHistogram", HistogramBase::kIsPersistent);
74 EXPECT_TRUE(boolean_histogram);
75 boolean_histogram->CheckName("TestBooleanHistogram");
76 PersistentMemoryAllocator::MemoryInfo meminfo3;
77 allocator_->GetMemoryInfo(&meminfo3);
78 EXPECT_GT(meminfo2.free, meminfo3.free);
79
80 std::vector<int> custom_ranges;
81 custom_ranges.push_back(1);
82 custom_ranges.push_back(5);
83 HistogramBase* custom_histogram = CustomHistogram::FactoryGet(
84 "TestCustomHistogram", custom_ranges, HistogramBase::kIsPersistent);
85 EXPECT_TRUE(custom_histogram);
86 custom_histogram->CheckName("TestCustomHistogram");
87 PersistentMemoryAllocator::MemoryInfo meminfo4;
88 allocator_->GetMemoryInfo(&meminfo4);
89 EXPECT_GT(meminfo3.free, meminfo4.free);
90
91 PersistentMemoryAllocator::Iterator iter;
92 uint32_t type;
93 allocator_->CreateIterator(&iter);
94 EXPECT_NE(0U, allocator_->GetNextIterable(&iter, &type)); // Histogram
95 EXPECT_NE(0U, allocator_->GetNextIterable(&iter, &type)); // LinearHistogram
96 EXPECT_NE(0U, allocator_->GetNextIterable(&iter, &type)); // BooleanHistogram
97 EXPECT_NE(0U, allocator_->GetNextIterable(&iter, &type)); // CustomHistogram
98 EXPECT_EQ(0U, allocator_->GetNextIterable(&iter, &type));
99
100 // Create a second allocator and have it access the memory of the first.
101 scoped_ptr<HistogramBase> recovered;
102 PersistentHistogramAllocator recovery(
103 make_scoped_ptr(new PersistentMemoryAllocator(
104 allocator_memory_.get(), kAllocatorMemorySize, 0, 0, "", false)));
105 PersistentHistogramAllocator::Iterator histogram_iter;
106 recovery.CreateIterator(&histogram_iter);
107
108 recovered = recovery.GetNextHistogram(&histogram_iter);
109 ASSERT_TRUE(recovered);
110 recovered->CheckName("TestHistogram");
111
112 recovered = recovery.GetNextHistogram(&histogram_iter);
113 ASSERT_TRUE(recovered);
114 recovered->CheckName("TestLinearHistogram");
115
116 recovered = recovery.GetNextHistogram(&histogram_iter);
117 ASSERT_TRUE(recovered);
118 recovered->CheckName("TestBooleanHistogram");
119
120 recovered = recovery.GetNextHistogram(&histogram_iter);
121 ASSERT_TRUE(recovered);
122 recovered->CheckName("TestCustomHistogram");
123
124 recovered = recovery.GetNextHistogram(&histogram_iter);
125 EXPECT_FALSE(recovered);
126 }
127
128 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698