OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "apps/benchmark/measurements.h" | 5 #include "apps/benchmark/measurements.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
11 namespace benchmark { | 11 namespace benchmark { |
12 namespace { | 12 namespace { |
13 | 13 |
14 base::TimeTicks Ticks(int64 value) { | 14 base::TimeTicks Ticks(int64 value) { |
15 return base::TimeTicks::FromInternalValue(value); | 15 return base::TimeTicks::FromInternalValue(value); |
16 } | 16 } |
17 | 17 |
18 base::TimeDelta Delta(int64 value) { | 18 base::TimeDelta Delta(int64 value) { |
19 return base::TimeDelta::FromInternalValue(value); | 19 return base::TimeDelta::FromInternalValue(value); |
20 } | 20 } |
21 | 21 |
22 class MeasurementsTest : public ::testing::Test { | 22 class MeasurementsTest : public ::testing::Test { |
23 protected: | 23 protected: |
24 void SetUp() override { | 24 void SetUp() override { |
25 events_.resize(8); | 25 events_.resize(11); |
26 events_[0] = Event(EventType::COMPLETE, "a", "some", Ticks(10), Delta(2)); | 26 events_[0] = Event(EventType::COMPLETE, "a", "some", Ticks(10), Delta(2)); |
27 events_[1] = Event(EventType::COMPLETE, "a", "some", Ticks(11), Delta(4)); | 27 events_[1] = Event(EventType::COMPLETE, "a", "some", Ticks(11), Delta(4)); |
28 events_[2] = Event(EventType::COMPLETE, "a", "other", Ticks(12), Delta(8)); | 28 events_[2] = Event(EventType::COMPLETE, "a", "other", Ticks(12), Delta(8)); |
29 events_[3] = Event(EventType::COMPLETE, "b", "some", Ticks(3), Delta(16)); | 29 events_[3] = Event(EventType::COMPLETE, "b", "some", Ticks(3), Delta(16)); |
30 events_[4] = Event(EventType::COMPLETE, "b", "some", Ticks(13), Delta(32)); | 30 events_[4] = Event(EventType::COMPLETE, "b", "some", Ticks(13), Delta(32)); |
31 events_[5] = | 31 |
| 32 events_[5] = Event(EventType::COMPLETE, "c", "some", Ticks(14), Delta(10)); |
| 33 events_[6] = Event(EventType::COMPLETE, "c", "some", Ticks(16), Delta(11)); |
| 34 events_[7] = Event(EventType::COMPLETE, "c", "some", Ticks(18), Delta(12)); |
| 35 |
| 36 events_[8] = |
32 Event(EventType::INSTANT, "instant", "another", Ticks(20), Delta(0)); | 37 Event(EventType::INSTANT, "instant", "another", Ticks(20), Delta(0)); |
33 events_[6] = Event(EventType::INSTANT, "multi_occurence", "another", | 38 events_[9] = Event(EventType::INSTANT, "multi_occurence", "another", |
34 Ticks(30), Delta(0)); | 39 Ticks(30), Delta(0)); |
35 events_[7] = Event(EventType::INSTANT, "multi_occurence", "another", | 40 events_[10] = Event(EventType::INSTANT, "multi_occurence", "another", |
36 Ticks(40), Delta(0)); | 41 Ticks(40), Delta(0)); |
37 | 42 |
38 reversed_ = events_; | 43 reversed_ = events_; |
39 reverse(reversed_.begin(), reversed_.end()); | 44 reverse(reversed_.begin(), reversed_.end()); |
40 } | 45 } |
41 | 46 |
42 std::vector<Event> events_; | 47 std::vector<Event> events_; |
43 std::vector<Event> reversed_; | 48 std::vector<Event> reversed_; |
44 }; | 49 }; |
45 | 50 |
| 51 static double MeasureSingle(const Measurements& measurements, |
| 52 const Measurement& measurement) { |
| 53 std::vector<double> result; |
| 54 measurements.Measure(measurement, &result); |
| 55 EXPECT_EQ(1U, result.size()); |
| 56 return result[0]; |
| 57 } |
| 58 |
46 TEST_F(MeasurementsTest, MeasureTimeUntil) { | 59 TEST_F(MeasurementsTest, MeasureTimeUntil) { |
47 // The results should be the same regardless of the order of events. | 60 // The results should be the same regardless of the order of events. |
48 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); | 61 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); |
49 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); | 62 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); |
50 | 63 |
51 EXPECT_DOUBLE_EQ(0.008, | 64 EXPECT_DOUBLE_EQ( |
52 regular.Measure(Measurement(MeasurementType::TIME_UNTIL, | 65 0.008, MeasureSingle(regular, Measurement(MeasurementType::TIME_UNTIL, |
53 EventSpec("a", "some")))); | |
54 EXPECT_DOUBLE_EQ(0.008, | |
55 reversed.Measure(Measurement(MeasurementType::TIME_UNTIL, | |
56 EventSpec("a", "some")))); | 66 EventSpec("a", "some")))); |
| 67 EXPECT_DOUBLE_EQ( |
| 68 0.008, MeasureSingle(reversed, Measurement(MeasurementType::TIME_UNTIL, |
| 69 EventSpec("a", "some")))); |
57 | 70 |
58 EXPECT_DOUBLE_EQ(0.01, | 71 EXPECT_DOUBLE_EQ( |
59 regular.Measure(Measurement(MeasurementType::TIME_UNTIL, | 72 0.01, MeasureSingle(regular, Measurement(MeasurementType::TIME_UNTIL, |
60 EventSpec("a", "other")))); | 73 EventSpec("a", "other")))); |
61 EXPECT_DOUBLE_EQ(0.01, | 74 EXPECT_DOUBLE_EQ( |
62 reversed.Measure(Measurement(MeasurementType::TIME_UNTIL, | 75 0.01, MeasureSingle(reversed, Measurement(MeasurementType::TIME_UNTIL, |
63 EventSpec("a", "other")))); | 76 EventSpec("a", "other")))); |
64 | 77 |
65 EXPECT_DOUBLE_EQ(0.001, | 78 EXPECT_DOUBLE_EQ( |
66 regular.Measure(Measurement(MeasurementType::TIME_UNTIL, | 79 0.001, MeasureSingle(regular, Measurement(MeasurementType::TIME_UNTIL, |
67 EventSpec("b", "some")))); | |
68 EXPECT_DOUBLE_EQ(0.001, | |
69 reversed.Measure(Measurement(MeasurementType::TIME_UNTIL, | |
70 EventSpec("b", "some")))); | 80 EventSpec("b", "some")))); |
| 81 EXPECT_DOUBLE_EQ( |
| 82 0.001, MeasureSingle(reversed, Measurement(MeasurementType::TIME_UNTIL, |
| 83 EventSpec("b", "some")))); |
71 } | 84 } |
72 | 85 |
73 TEST_F(MeasurementsTest, MeasureTimeBetween) { | 86 TEST_F(MeasurementsTest, MeasureTimeBetween) { |
74 // The results should be the same regardless of the order of events. | 87 // The results should be the same regardless of the order of events. |
75 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); | 88 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); |
76 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); | 89 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); |
77 | 90 |
78 EXPECT_DOUBLE_EQ(0.0, regular.Measure(Measurement( | 91 EXPECT_DOUBLE_EQ( |
79 MeasurementType::TIME_BETWEEN, | 92 0.0, MeasureSingle(regular, Measurement(MeasurementType::TIME_BETWEEN, |
80 EventSpec("a", "some"), EventSpec("a", "some")))); | 93 EventSpec("a", "some"), |
81 EXPECT_DOUBLE_EQ(0.0, reversed.Measure(Measurement( | 94 EventSpec("a", "some")))); |
82 MeasurementType::TIME_BETWEEN, | 95 EXPECT_DOUBLE_EQ( |
83 EventSpec("a", "some"), EventSpec("a", "some")))); | 96 0.0, MeasureSingle(reversed, Measurement(MeasurementType::TIME_BETWEEN, |
| 97 EventSpec("a", "some"), |
| 98 EventSpec("a", "some")))); |
84 | 99 |
85 EXPECT_DOUBLE_EQ( | 100 EXPECT_DOUBLE_EQ( |
86 0.01, regular.Measure(Measurement( | 101 0.01, MeasureSingle( |
87 MeasurementType::TIME_BETWEEN, EventSpec("instant", "another"), | 102 regular, Measurement(MeasurementType::TIME_BETWEEN, |
88 EventSpec("multi_occurence", "another")))); | 103 EventSpec("instant", "another"), |
| 104 EventSpec("multi_occurence", "another")))); |
89 EXPECT_DOUBLE_EQ( | 105 EXPECT_DOUBLE_EQ( |
90 0.01, reversed.Measure(Measurement( | 106 0.01, MeasureSingle(reversed, Measurement(MeasurementType::TIME_BETWEEN, |
91 MeasurementType::TIME_BETWEEN, EventSpec("instant", "another"), | 107 EventSpec("instant", "another"), |
92 EventSpec("multi_occurence", "another")))); | 108 EventSpec("multi_occurence", |
| 109 "another")))); |
93 | 110 |
94 EXPECT_DOUBLE_EQ( | 111 EXPECT_DOUBLE_EQ( |
95 -1.0, regular.Measure(Measurement(MeasurementType::TIME_BETWEEN, | 112 -1.0, MeasureSingle(regular, |
96 EventSpec("multi_occurence", "another"), | 113 Measurement(MeasurementType::TIME_BETWEEN, |
97 EventSpec("instant", "another")))); | 114 EventSpec("multi_occurence", "another"), |
98 EXPECT_DOUBLE_EQ(-1.0, reversed.Measure(Measurement( | 115 EventSpec("instant", "another")))); |
99 MeasurementType::TIME_BETWEEN, | 116 EXPECT_DOUBLE_EQ( |
100 EventSpec("multi_occurence", "another"), | 117 -1.0, MeasureSingle(reversed, |
101 EventSpec("instant", "another")))); | 118 Measurement(MeasurementType::TIME_BETWEEN, |
| 119 EventSpec("multi_occurence", "another"), |
| 120 EventSpec("instant", "another")))); |
102 | 121 |
103 EXPECT_DOUBLE_EQ( | 122 EXPECT_DOUBLE_EQ( |
104 0.01, regular.Measure(Measurement(MeasurementType::TIME_BETWEEN, | 123 0.01, |
105 EventSpec("a", "some"), | 124 MeasureSingle(regular, Measurement(MeasurementType::TIME_BETWEEN, |
106 EventSpec("instant", "another")))); | |
107 EXPECT_DOUBLE_EQ( | |
108 0.01, reversed.Measure(Measurement(MeasurementType::TIME_BETWEEN, | |
109 EventSpec("a", "some"), | 125 EventSpec("a", "some"), |
110 EventSpec("instant", "another")))); | 126 EventSpec("instant", "another")))); |
| 127 EXPECT_DOUBLE_EQ( |
| 128 0.01, |
| 129 MeasureSingle(reversed, Measurement(MeasurementType::TIME_BETWEEN, |
| 130 EventSpec("a", "some"), |
| 131 EventSpec("instant", "another")))); |
111 } | 132 } |
112 | 133 |
113 TEST_F(MeasurementsTest, MeasureAvgDuration) { | 134 TEST_F(MeasurementsTest, MeasureAvgDuration) { |
114 // The results should be the same regardless of the order of events. | 135 // The results should be the same regardless of the order of events. |
115 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); | 136 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); |
116 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); | 137 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); |
117 | 138 |
118 EXPECT_DOUBLE_EQ(0.003, | 139 EXPECT_DOUBLE_EQ( |
119 regular.Measure(Measurement(MeasurementType::AVG_DURATION, | 140 0.003, MeasureSingle(regular, Measurement(MeasurementType::AVG_DURATION, |
120 EventSpec("a", "some")))); | |
121 EXPECT_DOUBLE_EQ(0.003, | |
122 reversed.Measure(Measurement(MeasurementType::AVG_DURATION, | |
123 EventSpec("a", "some")))); | 141 EventSpec("a", "some")))); |
| 142 EXPECT_DOUBLE_EQ( |
| 143 0.003, MeasureSingle(reversed, Measurement(MeasurementType::AVG_DURATION, |
| 144 EventSpec("a", "some")))); |
124 | 145 |
125 EXPECT_DOUBLE_EQ(0.008, | 146 EXPECT_DOUBLE_EQ( |
126 regular.Measure(Measurement(MeasurementType::AVG_DURATION, | 147 0.008, MeasureSingle(regular, Measurement(MeasurementType::AVG_DURATION, |
127 EventSpec("a", "other")))); | |
128 EXPECT_DOUBLE_EQ(0.008, | |
129 reversed.Measure(Measurement(MeasurementType::AVG_DURATION, | |
130 EventSpec("a", "other")))); | 148 EventSpec("a", "other")))); |
| 149 EXPECT_DOUBLE_EQ( |
| 150 0.008, MeasureSingle(reversed, Measurement(MeasurementType::AVG_DURATION, |
| 151 EventSpec("a", "other")))); |
131 | 152 |
132 EXPECT_DOUBLE_EQ(0.024, | 153 EXPECT_DOUBLE_EQ( |
133 regular.Measure(Measurement(MeasurementType::AVG_DURATION, | 154 0.024, MeasureSingle(regular, Measurement(MeasurementType::AVG_DURATION, |
134 EventSpec("b", "some")))); | |
135 EXPECT_DOUBLE_EQ(0.024, | |
136 reversed.Measure(Measurement(MeasurementType::AVG_DURATION, | |
137 EventSpec("b", "some")))); | 155 EventSpec("b", "some")))); |
| 156 EXPECT_DOUBLE_EQ( |
| 157 0.024, MeasureSingle(reversed, Measurement(MeasurementType::AVG_DURATION, |
| 158 EventSpec("b", "some")))); |
| 159 } |
| 160 |
| 161 TEST_F(MeasurementsTest, MeasureMedianDuration) { |
| 162 // The results should be the same regardless of the order of events. |
| 163 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); |
| 164 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); |
| 165 |
| 166 EXPECT_DOUBLE_EQ( |
| 167 0.011, |
| 168 MeasureSingle(regular, Measurement(MeasurementType::MEDIAN_DURATION, |
| 169 EventSpec("c", "some")))); |
| 170 EXPECT_DOUBLE_EQ( |
| 171 0.011, |
| 172 MeasureSingle(reversed, Measurement(MeasurementType::MEDIAN_DURATION, |
| 173 EventSpec("c", "some")))); |
| 174 } |
| 175 |
| 176 TEST_F(MeasurementsTest, MeasureDistDuration) { |
| 177 // The results should be the same regardless of the order of events. |
| 178 Measurements regular(events_, base::TimeTicks::FromInternalValue(2)); |
| 179 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(2)); |
| 180 |
| 181 std::vector<double> results; |
| 182 regular.Measure( |
| 183 Measurement(MeasurementType::DIST_DURATION, EventSpec("c", "some")), |
| 184 &results); |
| 185 EXPECT_EQ(3U, results.size()); |
| 186 EXPECT_DOUBLE_EQ(0.010, results[0]); |
| 187 EXPECT_DOUBLE_EQ(0.011, results[1]); |
| 188 EXPECT_DOUBLE_EQ(0.012, results[2]); |
138 } | 189 } |
139 | 190 |
140 TEST_F(MeasurementsTest, NoMatchingEvent) { | 191 TEST_F(MeasurementsTest, NoMatchingEvent) { |
141 // The results should be the same regardless of the order of events. | 192 // The results should be the same regardless of the order of events. |
142 Measurements empty(std::vector<Event>(), | 193 Measurements empty(std::vector<Event>(), |
143 base::TimeTicks::FromInternalValue(0)); | 194 base::TimeTicks::FromInternalValue(0)); |
144 Measurements regular(events_, base::TimeTicks::FromInternalValue(0)); | 195 Measurements regular(events_, base::TimeTicks::FromInternalValue(0)); |
145 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(0)); | 196 Measurements reversed(reversed_, base::TimeTicks::FromInternalValue(0)); |
146 | 197 |
147 EXPECT_DOUBLE_EQ(-1.0, | 198 EXPECT_DOUBLE_EQ( |
148 empty.Measure(Measurement(MeasurementType::AVG_DURATION, | 199 -1.0, MeasureSingle(empty, Measurement(MeasurementType::AVG_DURATION, |
149 EventSpec("miss", "cat")))); | 200 EventSpec("miss", "cat")))); |
150 EXPECT_DOUBLE_EQ(-1.0, | 201 EXPECT_DOUBLE_EQ( |
151 regular.Measure(Measurement(MeasurementType::AVG_DURATION, | 202 -1.0, MeasureSingle(regular, Measurement(MeasurementType::AVG_DURATION, |
152 EventSpec("miss", "cat")))); | 203 EventSpec("miss", "cat")))); |
153 EXPECT_DOUBLE_EQ(-1.0, | 204 EXPECT_DOUBLE_EQ( |
154 reversed.Measure(Measurement(MeasurementType::AVG_DURATION, | 205 -1.0, MeasureSingle(reversed, Measurement(MeasurementType::AVG_DURATION, |
155 EventSpec("miss", "cat")))); | 206 EventSpec("miss", "cat")))); |
156 | 207 |
157 EXPECT_DOUBLE_EQ(-1.0, empty.Measure(Measurement(MeasurementType::TIME_UNTIL, | |
158 EventSpec("miss", "cat")))); | |
159 EXPECT_DOUBLE_EQ(-1.0, | 208 EXPECT_DOUBLE_EQ(-1.0, |
160 regular.Measure(Measurement(MeasurementType::TIME_UNTIL, | 209 MeasureSingle(empty, Measurement(MeasurementType::TIME_UNTIL, |
| 210 EventSpec("miss", "cat")))); |
| 211 EXPECT_DOUBLE_EQ( |
| 212 -1.0, MeasureSingle(regular, Measurement(MeasurementType::TIME_UNTIL, |
161 EventSpec("miss", "cat")))); | 213 EventSpec("miss", "cat")))); |
162 EXPECT_DOUBLE_EQ(-1.0, | 214 EXPECT_DOUBLE_EQ( |
163 reversed.Measure(Measurement(MeasurementType::TIME_UNTIL, | 215 -1.0, MeasureSingle(reversed, Measurement(MeasurementType::TIME_UNTIL, |
164 EventSpec("miss", "cat")))); | 216 EventSpec("miss", "cat")))); |
165 } | 217 } |
166 | 218 |
167 } // namespace | 219 } // namespace |
168 | 220 |
169 } // namespace benchmark | 221 } // namespace benchmark |
OLD | NEW |