| 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 |