• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 the V8 project 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 <vector>
6 
7 #include "src/counters.h"
8 #include "src/handles-inl.h"
9 #include "src/objects-inl.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace v8 {
13 namespace internal {
14 
15 namespace {
16 
17 class MockHistogram : public Histogram {
18  public:
AddSample(int value)19   void AddSample(int value) { samples_.push_back(value); }
samples()20   std::vector<int>* samples() { return &samples_; }
21 
22  private:
23   std::vector<int> samples_;
24 };
25 
26 
27 class AggregatedMemoryHistogramTest : public ::testing::Test {
28  public:
AggregatedMemoryHistogramTest()29   AggregatedMemoryHistogramTest() {
30     aggregated_ = AggregatedMemoryHistogram<MockHistogram>(&mock_);
31   }
~AggregatedMemoryHistogramTest()32   virtual ~AggregatedMemoryHistogramTest() {}
33 
AddSample(double current_ms,double current_value)34   void AddSample(double current_ms, double current_value) {
35     aggregated_.AddSample(current_ms, current_value);
36   }
37 
samples()38   std::vector<int>* samples() { return mock_.samples(); }
39 
40  private:
41   AggregatedMemoryHistogram<MockHistogram> aggregated_;
42   MockHistogram mock_;
43 };
44 
45 }  // namespace
46 
47 
TEST_F(AggregatedMemoryHistogramTest,OneSample1)48 TEST_F(AggregatedMemoryHistogramTest, OneSample1) {
49   FLAG_histogram_interval = 10;
50   AddSample(10, 1000);
51   AddSample(20, 1000);
52   EXPECT_EQ(1U, samples()->size());
53   EXPECT_EQ(1000, (*samples())[0]);
54 }
55 
56 
TEST_F(AggregatedMemoryHistogramTest,OneSample2)57 TEST_F(AggregatedMemoryHistogramTest, OneSample2) {
58   FLAG_histogram_interval = 10;
59   AddSample(10, 500);
60   AddSample(20, 1000);
61   EXPECT_EQ(1U, samples()->size());
62   EXPECT_EQ(750, (*samples())[0]);
63 }
64 
65 
TEST_F(AggregatedMemoryHistogramTest,OneSample3)66 TEST_F(AggregatedMemoryHistogramTest, OneSample3) {
67   FLAG_histogram_interval = 10;
68   AddSample(10, 500);
69   AddSample(15, 500);
70   AddSample(15, 1000);
71   AddSample(20, 1000);
72   EXPECT_EQ(1U, samples()->size());
73   EXPECT_EQ(750, (*samples())[0]);
74 }
75 
76 
TEST_F(AggregatedMemoryHistogramTest,OneSample4)77 TEST_F(AggregatedMemoryHistogramTest, OneSample4) {
78   FLAG_histogram_interval = 10;
79   AddSample(10, 500);
80   AddSample(15, 750);
81   AddSample(20, 1000);
82   EXPECT_EQ(1U, samples()->size());
83   EXPECT_EQ(750, (*samples())[0]);
84 }
85 
86 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples1)87 TEST_F(AggregatedMemoryHistogramTest, TwoSamples1) {
88   FLAG_histogram_interval = 10;
89   AddSample(10, 1000);
90   AddSample(30, 1000);
91   EXPECT_EQ(2U, samples()->size());
92   EXPECT_EQ(1000, (*samples())[0]);
93   EXPECT_EQ(1000, (*samples())[1]);
94 }
95 
96 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples2)97 TEST_F(AggregatedMemoryHistogramTest, TwoSamples2) {
98   FLAG_histogram_interval = 10;
99   AddSample(10, 1000);
100   AddSample(20, 1000);
101   AddSample(30, 1000);
102   EXPECT_EQ(2U, samples()->size());
103   EXPECT_EQ(1000, (*samples())[0]);
104   EXPECT_EQ(1000, (*samples())[1]);
105 }
106 
107 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples3)108 TEST_F(AggregatedMemoryHistogramTest, TwoSamples3) {
109   FLAG_histogram_interval = 10;
110   AddSample(10, 1000);
111   AddSample(20, 1000);
112   AddSample(20, 500);
113   AddSample(30, 500);
114   EXPECT_EQ(2U, samples()->size());
115   EXPECT_EQ(1000, (*samples())[0]);
116   EXPECT_EQ(500, (*samples())[1]);
117 }
118 
119 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples4)120 TEST_F(AggregatedMemoryHistogramTest, TwoSamples4) {
121   FLAG_histogram_interval = 10;
122   AddSample(10, 1000);
123   AddSample(30, 0);
124   EXPECT_EQ(2U, samples()->size());
125   EXPECT_EQ(750, (*samples())[0]);
126   EXPECT_EQ(250, (*samples())[1]);
127 }
128 
129 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples5)130 TEST_F(AggregatedMemoryHistogramTest, TwoSamples5) {
131   FLAG_histogram_interval = 10;
132   AddSample(10, 0);
133   AddSample(30, 1000);
134   EXPECT_EQ(2U, samples()->size());
135   EXPECT_EQ(250, (*samples())[0]);
136   EXPECT_EQ(750, (*samples())[1]);
137 }
138 
139 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples6)140 TEST_F(AggregatedMemoryHistogramTest, TwoSamples6) {
141   FLAG_histogram_interval = 10;
142   AddSample(10, 0);
143   AddSample(15, 1000);
144   AddSample(30, 1000);
145   EXPECT_EQ(2U, samples()->size());
146   EXPECT_EQ((500 + 1000) / 2, (*samples())[0]);
147   EXPECT_EQ(1000, (*samples())[1]);
148 }
149 
150 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples7)151 TEST_F(AggregatedMemoryHistogramTest, TwoSamples7) {
152   FLAG_histogram_interval = 10;
153   AddSample(10, 0);
154   AddSample(15, 1000);
155   AddSample(25, 0);
156   AddSample(30, 1000);
157   EXPECT_EQ(2U, samples()->size());
158   EXPECT_EQ((500 + 750) / 2, (*samples())[0]);
159   EXPECT_EQ((250 + 500) / 2, (*samples())[1]);
160 }
161 
162 
TEST_F(AggregatedMemoryHistogramTest,TwoSamples8)163 TEST_F(AggregatedMemoryHistogramTest, TwoSamples8) {
164   FLAG_histogram_interval = 10;
165   AddSample(10, 1000);
166   AddSample(15, 0);
167   AddSample(25, 1000);
168   AddSample(30, 0);
169   EXPECT_EQ(2U, samples()->size());
170   EXPECT_EQ((500 + 250) / 2, (*samples())[0]);
171   EXPECT_EQ((750 + 500) / 2, (*samples())[1]);
172 }
173 
174 
TEST_F(AggregatedMemoryHistogramTest,ManySamples1)175 TEST_F(AggregatedMemoryHistogramTest, ManySamples1) {
176   FLAG_histogram_interval = 10;
177   const int kMaxSamples = 1000;
178   AddSample(0, 0);
179   AddSample(10 * kMaxSamples, 10 * kMaxSamples);
180   EXPECT_EQ(static_cast<unsigned>(kMaxSamples), samples()->size());
181   for (int i = 0; i < kMaxSamples; i++) {
182     EXPECT_EQ(i * 10 + 5, (*samples())[i]);
183   }
184 }
185 
186 
TEST_F(AggregatedMemoryHistogramTest,ManySamples2)187 TEST_F(AggregatedMemoryHistogramTest, ManySamples2) {
188   FLAG_histogram_interval = 10;
189   const int kMaxSamples = 1000;
190   AddSample(0, 0);
191   AddSample(10 * (2 * kMaxSamples), 10 * (2 * kMaxSamples));
192   EXPECT_EQ(static_cast<unsigned>(kMaxSamples), samples()->size());
193   for (int i = 0; i < kMaxSamples; i++) {
194     EXPECT_EQ(i * 10 + 5, (*samples())[i]);
195   }
196 }
197 
198 
199 }  // namespace internal
200 }  // namespace v8
201