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

Side by Side Diff: media/cast/logging/logging_impl_unittest.cc

Issue 210303003: Cast: Remove LoggingStats in favor of event subscribers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile Created 6 years, 8 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
« no previous file with comments | « media/cast/logging/logging_impl.cc ('k') | media/cast/logging/logging_stats.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « media/cast/logging/logging_impl.cc ('k') | media/cast/logging/logging_stats.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698