OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/rand_util.h" | 7 #include "base/rand_util.h" |
8 #include "base/test/simple_test_tick_clock.h" | 8 #include "base/test/simple_test_tick_clock.h" |
9 #include "base/time/tick_clock.h" | 9 #include "base/time/tick_clock.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
11 #include "media/cast/logging/logging_defines.h" | 11 #include "media/cast/logging/logging_defines.h" |
12 #include "media/cast/logging/logging_impl.h" | 12 #include "media/cast/logging/logging_impl.h" |
13 #include "media/cast/logging/simple_event_subscriber.h" | 13 #include "media/cast/logging/simple_event_subscriber.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 | 15 |
16 namespace media { | 16 namespace media { |
17 namespace cast { | 17 namespace cast { |
18 | 18 |
19 // Insert frame duration- one second. | 19 // Insert frame duration- one second. |
20 const int64 kIntervalTime1S = 1; | 20 const int64 kIntervalTime1S = 1; |
21 // Test frame rate goal - 30fps. | 21 // Test frame rate goal - 30fps. |
22 const int kFrameIntervalMs = 33; | 22 const int kFrameIntervalMs = 33; |
23 | 23 |
24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); | 24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); |
25 | 25 |
26 class LoggingImplTest : public ::testing::Test { | 26 class LoggingImplTest : public ::testing::Test { |
27 protected: | 27 protected: |
28 LoggingImplTest() { | 28 LoggingImplTest() { |
29 // Enable all logging types. | |
30 config_.enable_raw_data_collection = true; | |
31 config_.enable_stats_data_collection = true; | |
32 | |
33 testing_clock_.Advance( | 29 testing_clock_.Advance( |
34 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 30 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
35 logging_.reset(new LoggingImpl(config_)); | 31 logging_.AddRawEventSubscriber(&event_subscriber_); |
36 logging_->AddRawEventSubscriber(&event_subscriber_); | |
37 } | 32 } |
38 | 33 |
39 virtual ~LoggingImplTest() { | 34 virtual ~LoggingImplTest() { |
40 logging_->RemoveRawEventSubscriber(&event_subscriber_); | 35 logging_.RemoveRawEventSubscriber(&event_subscriber_); |
41 } | 36 } |
42 | 37 |
43 CastLoggingConfig config_; | 38 LoggingImpl logging_; |
44 scoped_ptr<LoggingImpl> logging_; | |
45 base::SimpleTestTickClock testing_clock_; | 39 base::SimpleTestTickClock testing_clock_; |
46 SimpleEventSubscriber event_subscriber_; | 40 SimpleEventSubscriber event_subscriber_; |
47 | 41 |
48 DISALLOW_COPY_AND_ASSIGN(LoggingImplTest); | 42 DISALLOW_COPY_AND_ASSIGN(LoggingImplTest); |
49 }; | 43 }; |
50 | 44 |
51 TEST_F(LoggingImplTest, BasicFrameLogging) { | 45 TEST_F(LoggingImplTest, BasicFrameLogging) { |
52 base::TimeTicks start_time = testing_clock_.NowTicks(); | 46 base::TimeTicks start_time = testing_clock_.NowTicks(); |
53 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 47 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
54 uint32 rtp_timestamp = 0; | 48 uint32 rtp_timestamp = 0; |
55 uint32 frame_id = 0; | 49 uint32 frame_id = 0; |
56 base::TimeTicks now; | 50 base::TimeTicks now; |
57 do { | 51 do { |
58 now = testing_clock_.NowTicks(); | 52 now = testing_clock_.NowTicks(); |
59 logging_->InsertFrameEvent(now, kAudioFrameCaptured, rtp_timestamp, | 53 logging_.InsertFrameEvent(now, kAudioFrameCaptured, rtp_timestamp, |
60 frame_id); | 54 frame_id); |
61 testing_clock_.Advance( | 55 testing_clock_.Advance( |
62 base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 56 base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
63 rtp_timestamp += kFrameIntervalMs * 90; | 57 rtp_timestamp += kFrameIntervalMs * 90; |
64 ++frame_id; | 58 ++frame_id; |
65 time_interval = now - start_time; | 59 time_interval = now - start_time; |
66 } while (time_interval.InSeconds() < kIntervalTime1S); | 60 } while (time_interval.InSeconds() < kIntervalTime1S); |
67 base::TimeTicks end_time = now; | |
68 | 61 |
69 // Get logging data. | 62 // Get logging data. |
70 std::vector<FrameEvent> frame_events; | 63 std::vector<FrameEvent> frame_events; |
71 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 64 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
72 // Size of vector should be equal to the number of events logged, | 65 // Size of vector should be equal to the number of events logged, |
73 // which equals to number of frames in this case. | 66 // which equals to number of frames in this case. |
74 EXPECT_EQ(frame_id, frame_events.size()); | 67 EXPECT_EQ(frame_id, frame_events.size()); |
75 // Verify stats. | |
76 FrameStatsMap frame_stats = logging_->GetFrameStatsData(AUDIO_EVENT); | |
77 // Size of stats equals the number of events. | |
78 EXPECT_EQ(1u, frame_stats.size()); | |
79 FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); | |
80 EXPECT_TRUE(it != frame_stats.end()); | |
81 EXPECT_EQ(0, it->second.max_delay.InMilliseconds()); | |
82 EXPECT_EQ(0, it->second.min_delay.InMilliseconds()); | |
83 EXPECT_EQ(start_time, it->second.first_event_time); | |
84 EXPECT_EQ(end_time, it->second.last_event_time); | |
85 EXPECT_EQ(0u, it->second.sum_size); | |
86 // Number of events is equal to the number of frames. | |
87 EXPECT_EQ(static_cast<int>(frame_id), it->second.event_counter); | |
88 } | 68 } |
89 | 69 |
90 TEST_F(LoggingImplTest, FrameLoggingWithSize) { | 70 TEST_F(LoggingImplTest, FrameLoggingWithSize) { |
91 // Average packet size. | 71 // Average packet size. |
92 const int kBaseFrameSizeBytes = 25000; | 72 const int kBaseFrameSizeBytes = 25000; |
93 const int kRandomSizeInterval = 100; | 73 const int kRandomSizeInterval = 100; |
94 base::TimeTicks start_time = testing_clock_.NowTicks(); | 74 base::TimeTicks start_time = testing_clock_.NowTicks(); |
95 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 75 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
96 uint32 rtp_timestamp = 0; | 76 uint32 rtp_timestamp = 0; |
97 uint32 frame_id = 0; | 77 uint32 frame_id = 0; |
98 size_t sum_size = 0; | 78 size_t sum_size = 0; |
99 do { | 79 do { |
100 int size = kBaseFrameSizeBytes + | 80 int size = kBaseFrameSizeBytes + |
101 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); | 81 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); |
102 sum_size += static_cast<size_t>(size); | 82 sum_size += static_cast<size_t>(size); |
103 logging_->InsertFrameEventWithSize(testing_clock_.NowTicks(), | 83 logging_.InsertFrameEventWithSize(testing_clock_.NowTicks(), |
104 kAudioFrameCaptured, rtp_timestamp, | 84 kAudioFrameCaptured, rtp_timestamp, |
105 frame_id, size); | 85 frame_id, size); |
106 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 86 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
107 rtp_timestamp += kFrameIntervalMs * 90; | 87 rtp_timestamp += kFrameIntervalMs * 90; |
108 ++frame_id; | 88 ++frame_id; |
109 time_interval = testing_clock_.NowTicks() - start_time; | 89 time_interval = testing_clock_.NowTicks() - start_time; |
110 } while (time_interval.InSeconds() < kIntervalTime1S); | 90 } while (time_interval.InSeconds() < kIntervalTime1S); |
111 // Get logging data. | 91 // Get logging data. |
112 std::vector<FrameEvent> frame_events; | 92 std::vector<FrameEvent> frame_events; |
113 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 93 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
114 // Size of vector should be equal to the number of events logged, which | 94 // Size of vector should be equal to the number of events logged, which |
115 // equals to number of frames in this case. | 95 // equals to number of frames in this case. |
116 EXPECT_EQ(frame_id, frame_events.size()); | 96 EXPECT_EQ(frame_id, frame_events.size()); |
117 // Verify stats. | |
118 FrameStatsMap frame_stats = logging_->GetFrameStatsData(AUDIO_EVENT); | |
119 // Size of stats equals the number of events. | |
120 EXPECT_EQ(1u, frame_stats.size()); | |
121 FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); | |
122 EXPECT_TRUE(it != frame_stats.end()); | |
123 EXPECT_EQ(0, it->second.max_delay.InMilliseconds()); | |
124 EXPECT_EQ(0, it->second.min_delay.InMilliseconds()); | |
125 EXPECT_EQ(0, it->second.sum_delay.InMilliseconds()); | |
126 EXPECT_EQ(sum_size, it->second.sum_size); | |
127 } | 97 } |
128 | 98 |
129 TEST_F(LoggingImplTest, FrameLoggingWithDelay) { | 99 TEST_F(LoggingImplTest, FrameLoggingWithDelay) { |
130 // Average packet size. | 100 // Average packet size. |
131 const int kPlayoutDelayMs = 50; | 101 const int kPlayoutDelayMs = 50; |
132 const int kRandomSizeInterval = 20; | 102 const int kRandomSizeInterval = 20; |
133 base::TimeTicks start_time = testing_clock_.NowTicks(); | 103 base::TimeTicks start_time = testing_clock_.NowTicks(); |
134 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 104 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
135 uint32 rtp_timestamp = 0; | 105 uint32 rtp_timestamp = 0; |
136 uint32 frame_id = 0; | 106 uint32 frame_id = 0; |
137 do { | 107 do { |
138 int delay = kPlayoutDelayMs + | 108 int delay = kPlayoutDelayMs + |
139 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); | 109 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); |
140 logging_->InsertFrameEventWithDelay( | 110 logging_.InsertFrameEventWithDelay( |
141 testing_clock_.NowTicks(), kAudioFrameCaptured, rtp_timestamp, frame_id, | 111 testing_clock_.NowTicks(), kAudioFrameCaptured, rtp_timestamp, frame_id, |
142 base::TimeDelta::FromMilliseconds(delay)); | 112 base::TimeDelta::FromMilliseconds(delay)); |
143 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 113 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
144 rtp_timestamp += kFrameIntervalMs * 90; | 114 rtp_timestamp += kFrameIntervalMs * 90; |
145 ++frame_id; | 115 ++frame_id; |
146 time_interval = testing_clock_.NowTicks() - start_time; | 116 time_interval = testing_clock_.NowTicks() - start_time; |
147 } while (time_interval.InSeconds() < kIntervalTime1S); | 117 } while (time_interval.InSeconds() < kIntervalTime1S); |
148 // Get logging data. | 118 // Get logging data. |
149 std::vector<FrameEvent> frame_events; | 119 std::vector<FrameEvent> frame_events; |
150 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 120 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
151 // Size of vector should be equal to the number of frames logged. | 121 // Size of vector should be equal to the number of frames logged. |
152 EXPECT_EQ(frame_id, frame_events.size()); | 122 EXPECT_EQ(frame_id, frame_events.size()); |
153 // Verify stats. | |
154 FrameStatsMap frame_stats = logging_->GetFrameStatsData(AUDIO_EVENT); | |
155 // Size of stats equals the number of events. | |
156 EXPECT_EQ(1u, frame_stats.size()); | |
157 FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); | |
158 EXPECT_TRUE(it != frame_stats.end()); | |
159 EXPECT_GE(kPlayoutDelayMs + kRandomSizeInterval, | |
160 it->second.max_delay.InMilliseconds()); | |
161 EXPECT_LE(kPlayoutDelayMs - kRandomSizeInterval, | |
162 it->second.min_delay.InMilliseconds()); | |
163 } | 123 } |
164 | 124 |
165 TEST_F(LoggingImplTest, MultipleEventFrameLogging) { | 125 TEST_F(LoggingImplTest, MultipleEventFrameLogging) { |
166 base::TimeTicks start_time = testing_clock_.NowTicks(); | 126 base::TimeTicks start_time = testing_clock_.NowTicks(); |
167 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 127 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
168 uint32 rtp_timestamp = 0u; | 128 uint32 rtp_timestamp = 0u; |
169 uint32 frame_id = 0u; | 129 uint32 frame_id = 0u; |
170 uint32 num_events = 0u; | 130 uint32 num_events = 0u; |
171 do { | 131 do { |
172 logging_->InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, | 132 logging_.InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, |
173 rtp_timestamp, frame_id); | 133 rtp_timestamp, frame_id); |
174 ++num_events; | 134 ++num_events; |
175 if (frame_id % 2) { | 135 if (frame_id % 2) { |
176 logging_->InsertFrameEventWithSize(testing_clock_.NowTicks(), | 136 logging_.InsertFrameEventWithSize(testing_clock_.NowTicks(), |
177 kAudioFrameEncoded, rtp_timestamp, | 137 kAudioFrameEncoded, rtp_timestamp, |
178 frame_id, 1500); | 138 frame_id, 1500); |
179 } else if (frame_id % 3) { | 139 } else if (frame_id % 3) { |
180 logging_->InsertFrameEvent(testing_clock_.NowTicks(), kVideoFrameDecoded, | 140 logging_.InsertFrameEvent(testing_clock_.NowTicks(), kVideoFrameDecoded, |
181 rtp_timestamp, frame_id); | 141 rtp_timestamp, frame_id); |
182 } else { | 142 } else { |
183 logging_->InsertFrameEventWithDelay( | 143 logging_.InsertFrameEventWithDelay( |
184 testing_clock_.NowTicks(), kVideoRenderDelay, rtp_timestamp, frame_id, | 144 testing_clock_.NowTicks(), kVideoRenderDelay, rtp_timestamp, frame_id, |
185 base::TimeDelta::FromMilliseconds(20)); | 145 base::TimeDelta::FromMilliseconds(20)); |
186 } | 146 } |
187 ++num_events; | 147 ++num_events; |
188 | 148 |
189 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 149 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
190 rtp_timestamp += kFrameIntervalMs * 90; | 150 rtp_timestamp += kFrameIntervalMs * 90; |
191 ++frame_id; | 151 ++frame_id; |
192 time_interval = testing_clock_.NowTicks() - start_time; | 152 time_interval = testing_clock_.NowTicks() - start_time; |
193 } while (time_interval.InSeconds() < kIntervalTime1S); | 153 } while (time_interval.InSeconds() < kIntervalTime1S); |
(...skipping 15 matching lines...) Expand all Loading... |
209 RtpTimestamp rtp_timestamp = 0; | 169 RtpTimestamp rtp_timestamp = 0; |
210 int frame_id = 0; | 170 int frame_id = 0; |
211 int num_packets = 0; | 171 int num_packets = 0; |
212 int sum_size = 0u; | 172 int sum_size = 0u; |
213 do { | 173 do { |
214 for (int i = 0; i < kNumPacketsPerFrame; ++i) { | 174 for (int i = 0; i < kNumPacketsPerFrame; ++i) { |
215 int size = kBaseSize + base::RandInt(-kSizeInterval, kSizeInterval); | 175 int size = kBaseSize + base::RandInt(-kSizeInterval, kSizeInterval); |
216 sum_size += size; | 176 sum_size += size; |
217 latest_time = testing_clock_.NowTicks(); | 177 latest_time = testing_clock_.NowTicks(); |
218 ++num_packets; | 178 ++num_packets; |
219 logging_->InsertPacketEvent(latest_time, | 179 logging_.InsertPacketEvent(latest_time, |
220 kDuplicateVideoPacketReceived, | 180 kDuplicateVideoPacketReceived, |
221 rtp_timestamp, | 181 rtp_timestamp, |
222 frame_id, | 182 frame_id, |
223 i, | 183 i, |
224 kNumPacketsPerFrame, | 184 kNumPacketsPerFrame, |
225 size); | 185 size); |
226 } | 186 } |
227 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 187 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
228 rtp_timestamp += kFrameIntervalMs * 90; | 188 rtp_timestamp += kFrameIntervalMs * 90; |
229 ++frame_id; | 189 ++frame_id; |
230 time_interval = testing_clock_.NowTicks() - start_time; | 190 time_interval = testing_clock_.NowTicks() - start_time; |
231 } while (time_interval.InSeconds() < kIntervalTime1S); | 191 } while (time_interval.InSeconds() < kIntervalTime1S); |
232 // Get logging data. | 192 // Get logging data. |
233 std::vector<PacketEvent> packet_events; | 193 std::vector<PacketEvent> packet_events; |
234 event_subscriber_.GetPacketEventsAndReset(&packet_events); | 194 event_subscriber_.GetPacketEventsAndReset(&packet_events); |
235 // Size of vector should be equal to the number of packets logged. | 195 // Size of vector should be equal to the number of packets logged. |
236 EXPECT_EQ(num_packets, static_cast<int>(packet_events.size())); | 196 EXPECT_EQ(num_packets, static_cast<int>(packet_events.size())); |
237 // Verify stats. | |
238 PacketStatsMap stats_map = logging_->GetPacketStatsData(VIDEO_EVENT); | |
239 // Size of stats equals the number of event types. | |
240 EXPECT_EQ(1u, stats_map.size()); | |
241 PacketStatsMap::const_iterator it = | |
242 stats_map.find(kDuplicateVideoPacketReceived); | |
243 ASSERT_NE(stats_map.end(), it); | |
244 EXPECT_EQ(start_time, it->second.first_event_time); | |
245 EXPECT_EQ(latest_time, it->second.last_event_time); | |
246 EXPECT_EQ(num_packets, it->second.event_counter); | |
247 EXPECT_EQ(sum_size, static_cast<int>(it->second.sum_size)); | |
248 } | 197 } |
249 | 198 |
250 TEST_F(LoggingImplTest, GenericLogging) { | 199 TEST_F(LoggingImplTest, GenericLogging) { |
251 // Insert multiple generic types. | 200 // Insert multiple generic types. |
252 const size_t kNumRuns = 20;//1000; | 201 const size_t kNumRuns = 20;//1000; |
253 const int kBaseValue = 20; | 202 const int kBaseValue = 20; |
254 int sum_value_rtt = 0; | 203 int sum_value_rtt = 0; |
255 int sum_value_pl = 0; | 204 int sum_value_pl = 0; |
256 int sum_value_jitter = 0; | 205 int sum_value_jitter = 0; |
257 uint64 sumsq_value_rtt = 0; | 206 uint64 sumsq_value_rtt = 0; |
258 uint64 sumsq_value_pl = 0; | 207 uint64 sumsq_value_pl = 0; |
259 uint64 sumsq_value_jitter = 0; | 208 uint64 sumsq_value_jitter = 0; |
260 int min_value, max_value; | 209 int min_value, max_value; |
261 | 210 |
262 uint32 num_events = 0u; | 211 uint32 num_events = 0u; |
263 uint32 expected_rtt_count = 0u; | 212 uint32 expected_rtt_count = 0u; |
264 uint32 expected_packet_loss_count = 0u; | 213 uint32 expected_packet_loss_count = 0u; |
265 uint32 expected_jitter_count = 0u; | 214 uint32 expected_jitter_count = 0u; |
266 for (size_t i = 0; i < kNumRuns; ++i) { | 215 for (size_t i = 0; i < kNumRuns; ++i) { |
267 int value = kBaseValue + base::RandInt(-5, 5); | 216 int value = kBaseValue + base::RandInt(-5, 5); |
268 sum_value_rtt += value; | 217 sum_value_rtt += value; |
269 sumsq_value_rtt += value * value; | 218 sumsq_value_rtt += value * value; |
270 logging_->InsertGenericEvent(testing_clock_.NowTicks(), kRttMs, value); | 219 logging_.InsertGenericEvent(testing_clock_.NowTicks(), kRttMs, value); |
271 ++num_events; | 220 ++num_events; |
272 ++expected_rtt_count; | 221 ++expected_rtt_count; |
273 if (i % 2) { | 222 if (i % 2) { |
274 logging_->InsertGenericEvent(testing_clock_.NowTicks(), kPacketLoss, | 223 logging_.InsertGenericEvent(testing_clock_.NowTicks(), kPacketLoss, |
275 value); | 224 value); |
276 ++num_events; | 225 ++num_events; |
277 ++expected_packet_loss_count; | 226 ++expected_packet_loss_count; |
278 sum_value_pl += value; | 227 sum_value_pl += value; |
279 sumsq_value_pl += value * value; | 228 sumsq_value_pl += value * value; |
280 } | 229 } |
281 if (!(i % 4)) { | 230 if (!(i % 4)) { |
282 logging_->InsertGenericEvent(testing_clock_.NowTicks(), kJitterMs, value); | 231 logging_.InsertGenericEvent(testing_clock_.NowTicks(), kJitterMs, value); |
283 ++num_events; | 232 ++num_events; |
284 ++expected_jitter_count; | 233 ++expected_jitter_count; |
285 sum_value_jitter += value; | 234 sum_value_jitter += value; |
286 sumsq_value_jitter += value * value; | 235 sumsq_value_jitter += value * value; |
287 } | 236 } |
288 if (i == 0) { | 237 if (i == 0) { |
289 min_value = value; | 238 min_value = value; |
290 max_value = value; | 239 max_value = value; |
291 } else if (min_value > value) { | 240 } else if (min_value > value) { |
292 min_value = value; | 241 min_value = value; |
(...skipping 14 matching lines...) Expand all Loading... |
307 for (std::vector<GenericEvent>::iterator it = generic_events.begin(); | 256 for (std::vector<GenericEvent>::iterator it = generic_events.begin(); |
308 it != generic_events.end(); ++it) { | 257 it != generic_events.end(); ++it) { |
309 if (it->type == kRttMs) { | 258 if (it->type == kRttMs) { |
310 ++rtt_event_count; | 259 ++rtt_event_count; |
311 } else if (it->type == kPacketLoss) { | 260 } else if (it->type == kPacketLoss) { |
312 ++packet_loss_event_count; | 261 ++packet_loss_event_count; |
313 } else if (it->type == kJitterMs) { | 262 } else if (it->type == kJitterMs) { |
314 ++jitter_event_count; | 263 ++jitter_event_count; |
315 } | 264 } |
316 } | 265 } |
317 | |
318 // Size of generic stats map = number of different events. | |
319 // Stats - one value per all events. | |
320 GenericStatsMap stats_map = logging_->GetGenericStatsData(); | |
321 EXPECT_EQ(3u, stats_map.size()); | |
322 GenericStatsMap::const_iterator sit = stats_map.find(kRttMs); | |
323 EXPECT_EQ(sum_value_rtt, sit->second.sum); | |
324 EXPECT_EQ(sumsq_value_rtt, sit->second.sum_squared); | |
325 EXPECT_LE(min_value, sit->second.min); | |
326 EXPECT_GE(max_value, sit->second.max); | |
327 sit = stats_map.find(kPacketLoss); | |
328 EXPECT_EQ(sum_value_pl, sit->second.sum); | |
329 EXPECT_EQ(sumsq_value_pl, sit->second.sum_squared); | |
330 EXPECT_LE(min_value, sit->second.min); | |
331 EXPECT_GE(max_value, sit->second.max); | |
332 sit = stats_map.find(kJitterMs); | |
333 EXPECT_EQ(sumsq_value_jitter, sit->second.sum_squared); | |
334 EXPECT_LE(min_value, sit->second.min); | |
335 EXPECT_GE(max_value, sit->second.max); | |
336 } | 266 } |
337 | 267 |
338 TEST_F(LoggingImplTest, MultipleRawEventSubscribers) { | 268 TEST_F(LoggingImplTest, MultipleRawEventSubscribers) { |
339 SimpleEventSubscriber event_subscriber_2; | 269 SimpleEventSubscriber event_subscriber_2; |
340 | 270 |
341 // Now logging_ has two subscribers. | 271 // Now logging_ has two subscribers. |
342 logging_->AddRawEventSubscriber(&event_subscriber_2); | 272 logging_.AddRawEventSubscriber(&event_subscriber_2); |
343 | 273 |
344 logging_->InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, | 274 logging_.InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, |
345 /*rtp_timestamp*/ 0u, | 275 /*rtp_timestamp*/ 0u, |
346 /*frame_id*/ 0u); | 276 /*frame_id*/ 0u); |
347 | 277 |
348 std::vector<FrameEvent> frame_events; | 278 std::vector<FrameEvent> frame_events; |
349 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 279 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
350 EXPECT_EQ(1u, frame_events.size()); | 280 EXPECT_EQ(1u, frame_events.size()); |
351 frame_events.clear(); | 281 frame_events.clear(); |
352 event_subscriber_2.GetFrameEventsAndReset(&frame_events); | 282 event_subscriber_2.GetFrameEventsAndReset(&frame_events); |
353 EXPECT_EQ(1u, frame_events.size()); | 283 EXPECT_EQ(1u, frame_events.size()); |
354 | 284 |
355 logging_->RemoveRawEventSubscriber(&event_subscriber_2); | 285 logging_.RemoveRawEventSubscriber(&event_subscriber_2); |
356 } | 286 } |
357 | 287 |
358 } // namespace cast | 288 } // namespace cast |
359 } // namespace media | 289 } // namespace media |
OLD | NEW |