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

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

Issue 138913014: Cast: Added a new RawEventSubscriber implementation for use in cast extension. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/memory/ref_counted.h"
6 #include "base/memory/scoped_ptr.h"
7 #include "base/test/simple_test_tick_clock.h"
8 #include "base/time/tick_clock.h"
9 #include "media/cast/cast_environment.h"
10 #include "media/cast/logging/encoding_event_subscriber.h"
11 #include "media/cast/logging/logging_defines.h"
12 #include "media/cast/test/fake_single_thread_task_runner.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using media::cast::proto::AggregatedFrameEvent;
16 using media::cast::proto::AggregatedGenericEvent;
17 using media::cast::proto::AggregatedPacketEvent;
18 using media::cast::proto::BasePacketEvent;
19
20 namespace media {
21 namespace cast {
22
23 class EncodingEventSubscriberTest : public ::testing::Test {
24 protected:
25 EncodingEventSubscriberTest()
26 : testing_clock_(new base::SimpleTestTickClock()),
27 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
28 cast_environment_(new CastEnvironment(
29 scoped_ptr<base::TickClock>(testing_clock_).Pass(), task_runner_,
30 task_runner_, task_runner_, task_runner_, task_runner_,
31 task_runner_, GetLoggingConfigWithRawEventsAndStatsEnabled())),
32 event_subscriber_(task_runner_) {
33 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_);
34 }
35
36 virtual ~EncodingEventSubscriberTest() {
37 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_);
38 }
39
40 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
41 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
42 scoped_refptr<CastEnvironment> cast_environment_;
43 EncodingEventSubscriber event_subscriber_;
44 };
45
46 TEST_F(EncodingEventSubscriberTest, FrameEvent) {
47 base::TimeTicks now(testing_clock_->NowTicks());
48 RtpTimestamp rtp_timestamp = 100;
49 cast_environment_->Logging()->InsertFrameEvent(now, kVideoFrameDecoded,
50 rtp_timestamp,
51 /*frame_id*/ 0);
52
53 FrameEventMap frame_events;
54 event_subscriber_.GetFrameEventsAndReset(&frame_events);
55
56 ASSERT_EQ(1u, frame_events.size());
57
58 FrameEventMap::iterator it = frame_events.find(rtp_timestamp);
59 ASSERT_TRUE(it != frame_events.end());
60
61 linked_ptr<AggregatedFrameEvent> event = it->second;
62
63 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp());
64
65 ASSERT_EQ(1, event->event_type_size());
66 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED, event->event_type(0));
67 ASSERT_EQ(1, event->event_timestamp_micros_size());
68 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0));
69
70 EXPECT_EQ(0, event->encoded_frame_size());
71 EXPECT_EQ(0, event->delay_millis());
72
73 event_subscriber_.GetFrameEventsAndReset(&frame_events);
74 EXPECT_TRUE(frame_events.empty());
75 }
76
77 TEST_F(EncodingEventSubscriberTest, FrameEventDelay) {
78 base::TimeTicks now(testing_clock_->NowTicks());
79 RtpTimestamp rtp_timestamp = 100;
80 int delay_ms = 100;
81 cast_environment_->Logging()->InsertFrameEventWithDelay(
82 now, kAudioPlayoutDelay, rtp_timestamp,
83 /*frame_id*/ 0, base::TimeDelta::FromMilliseconds(delay_ms));
84
85 FrameEventMap frame_events;
86 event_subscriber_.GetFrameEventsAndReset(&frame_events);
87
88 ASSERT_EQ(1u, frame_events.size());
89
90 FrameEventMap::iterator it = frame_events.find(rtp_timestamp);
91 ASSERT_TRUE(it != frame_events.end());
92
93 linked_ptr<AggregatedFrameEvent> event = it->second;
94
95 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp());
96
97 ASSERT_EQ(1, event->event_type_size());
98 EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0));
99 ASSERT_EQ(1, event->event_timestamp_micros_size());
100 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0));
101
102 EXPECT_EQ(0, event->encoded_frame_size());
103 EXPECT_EQ(100, event->delay_millis());
104 }
105
106 TEST_F(EncodingEventSubscriberTest, FrameEventSize) {
107 base::TimeTicks now(testing_clock_->NowTicks());
108 RtpTimestamp rtp_timestamp = 100;
109 int size = 123;
110 cast_environment_->Logging()->InsertFrameEventWithSize(
111 now, kVideoFrameEncoded, rtp_timestamp,
112 /*frame_id*/ 0, size);
113
114 FrameEventMap frame_events;
115 event_subscriber_.GetFrameEventsAndReset(&frame_events);
116
117 ASSERT_EQ(1u, frame_events.size());
118
119 FrameEventMap::iterator it = frame_events.find(rtp_timestamp);
120 ASSERT_TRUE(it != frame_events.end());
121
122 linked_ptr<AggregatedFrameEvent> event = it->second;
123
124 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp());
125
126 ASSERT_EQ(1, event->event_type_size());
127 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_ENCODED, event->event_type(0));
128 ASSERT_EQ(1, event->event_timestamp_micros_size());
129 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0));
130
131 EXPECT_EQ(size, event->encoded_frame_size());
132 EXPECT_EQ(0, event->delay_millis());
133 }
134
135 TEST_F(EncodingEventSubscriberTest, MultipleFrameEvents) {
136 RtpTimestamp rtp_timestamp1 = 100;
137 RtpTimestamp rtp_timestamp2 = 200;
138 base::TimeTicks now1(testing_clock_->NowTicks());
139 cast_environment_->Logging()->InsertFrameEventWithDelay(
140 now1, kAudioPlayoutDelay, rtp_timestamp1,
141 /*frame_id*/ 0, /*delay*/ base::TimeDelta::FromMilliseconds(100));
142
143 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
144 base::TimeTicks now2(testing_clock_->NowTicks());
145 cast_environment_->Logging()->InsertFrameEventWithSize(
146 now2, kAudioFrameEncoded, rtp_timestamp2,
147 /*frame_id*/ 0, /*size*/ 123);
148
149 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
150 base::TimeTicks now3(testing_clock_->NowTicks());
151 cast_environment_->Logging()->InsertFrameEvent(
152 now3, kAudioFrameDecoded, rtp_timestamp1, /*frame_id*/ 0);
153
154 FrameEventMap frame_events;
155 event_subscriber_.GetFrameEventsAndReset(&frame_events);
156
157 ASSERT_EQ(2u, frame_events.size());
158
159 FrameEventMap::iterator it = frame_events.find(100);
160 ASSERT_TRUE(it != frame_events.end());
161
162 linked_ptr<AggregatedFrameEvent> event = it->second;
163
164 EXPECT_EQ(rtp_timestamp1, event->rtp_timestamp());
165
166 ASSERT_EQ(2, event->event_type_size());
167 EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0));
168 EXPECT_EQ(media::cast::proto::AUDIO_FRAME_DECODED, event->event_type(1));
169
170 ASSERT_EQ(2, event->event_timestamp_micros_size());
171 EXPECT_EQ(now1.ToInternalValue(), event->event_timestamp_micros(0));
172 EXPECT_EQ(now3.ToInternalValue(), event->event_timestamp_micros(1));
173
174 it = frame_events.find(200);
175 ASSERT_TRUE(it != frame_events.end());
176
177 event = it->second;
178
179 EXPECT_EQ(rtp_timestamp2, event->rtp_timestamp());
180
181 ASSERT_EQ(1, event->event_type_size());
182 EXPECT_EQ(media::cast::proto::AUDIO_FRAME_ENCODED, event->event_type(0));
183
184 ASSERT_EQ(1, event->event_timestamp_micros_size());
185 EXPECT_EQ(now2.ToInternalValue(), event->event_timestamp_micros(0));
186 }
187
188 TEST_F(EncodingEventSubscriberTest, PacketEvent) {
189 base::TimeTicks now(testing_clock_->NowTicks());
190 RtpTimestamp rtp_timestamp = 100;
191 int packet_id = 2;
192 int size = 100;
193 cast_environment_->Logging()->InsertPacketEvent(
194 now, kAudioPacketReceived, rtp_timestamp, /*frame_id*/ 0, packet_id,
195 /*max_packet_id*/ 10, size);
196
197 PacketEventMap packet_events;
198 event_subscriber_.GetPacketEventsAndReset(&packet_events);
199
200 ASSERT_EQ(1u, packet_events.size());
201
202 PacketEventMap::iterator it = packet_events.find(rtp_timestamp);
203 ASSERT_TRUE(it != packet_events.end());
204
205 linked_ptr<AggregatedPacketEvent> event = it->second;
206
207 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp());
208
209 ASSERT_EQ(1, event->base_packet_event_size());
210 const BasePacketEvent& base_event = event->base_packet_event(0);
211 EXPECT_EQ(packet_id, base_event.packet_id());
212 ASSERT_EQ(1, base_event.event_type_size());
213 EXPECT_EQ(media::cast::proto::AUDIO_PACKET_RECEIVED,
214 base_event.event_type(0));
215 ASSERT_EQ(1, base_event.event_timestamp_micros_size());
216 EXPECT_EQ(now.ToInternalValue(), base_event.event_timestamp_micros(0));
217
218 event_subscriber_.GetPacketEventsAndReset(&packet_events);
219 EXPECT_TRUE(packet_events.empty());
220 }
221
222 TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForPacket) {
223 base::TimeTicks now1(testing_clock_->NowTicks());
224 RtpTimestamp rtp_timestamp = 100;
225 int packet_id = 2;
226 int size = 100;
227 cast_environment_->Logging()->InsertPacketEvent(
228 now1, kPacketSentToPacer, rtp_timestamp, /*frame_id*/ 0, packet_id,
229 /*max_packet_id*/ 10, size);
230
231 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
232 base::TimeTicks now2(testing_clock_->NowTicks());
233 cast_environment_->Logging()->InsertPacketEvent(
234 now2, kPacketSentToNetwork, rtp_timestamp, /*frame_id*/ 0, packet_id,
235 /*max_packet_id*/ 10, size);
236
237 PacketEventMap packet_events;
238 event_subscriber_.GetPacketEventsAndReset(&packet_events);
239
240 ASSERT_EQ(1u, packet_events.size());
241
242 PacketEventMap::iterator it = packet_events.find(rtp_timestamp);
243 ASSERT_TRUE(it != packet_events.end());
244
245 linked_ptr<AggregatedPacketEvent> event = it->second;
246
247 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp());
248
249 ASSERT_EQ(1, event->base_packet_event_size());
250 const BasePacketEvent& base_event = event->base_packet_event(0);
251 EXPECT_EQ(packet_id, base_event.packet_id());
252 ASSERT_EQ(2, base_event.event_type_size());
253 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0));
254 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_NETWORK,
255 base_event.event_type(1));
256 ASSERT_EQ(2, base_event.event_timestamp_micros_size());
257 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0));
258 EXPECT_EQ(now2.ToInternalValue(), base_event.event_timestamp_micros(1));
259 }
260
261 TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForFrame) {
262 base::TimeTicks now1(testing_clock_->NowTicks());
263 RtpTimestamp rtp_timestamp = 100;
264 int packet_id_1 = 2;
265 int packet_id_2 = 3;
266 int size = 100;
267 cast_environment_->Logging()->InsertPacketEvent(
268 now1, kPacketSentToPacer, rtp_timestamp, /*frame_id*/ 0, packet_id_1,
269 /*max_packet_id*/ 10, size);
270
271 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
272 base::TimeTicks now2(testing_clock_->NowTicks());
273 cast_environment_->Logging()->InsertPacketEvent(
274 now2, kPacketRetransmitted, rtp_timestamp, /*frame_id*/ 0, packet_id_2,
275 /*max_packet_id*/ 10, size);
276
277 PacketEventMap packet_events;
278 event_subscriber_.GetPacketEventsAndReset(&packet_events);
279
280 ASSERT_EQ(1u, packet_events.size());
281
282 PacketEventMap::iterator it = packet_events.find(rtp_timestamp);
283 ASSERT_TRUE(it != packet_events.end());
284
285 linked_ptr<AggregatedPacketEvent> event = it->second;
286
287 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp());
288
289 ASSERT_EQ(2, event->base_packet_event_size());
290 const BasePacketEvent& base_event = event->base_packet_event(0);
291 EXPECT_EQ(packet_id_1, base_event.packet_id());
292 ASSERT_EQ(1, base_event.event_type_size());
293 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0));
294 ASSERT_EQ(1, base_event.event_timestamp_micros_size());
295 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0));
296
297 const BasePacketEvent& base_event_2 = event->base_packet_event(1);
298 EXPECT_EQ(packet_id_2, base_event_2.packet_id());
299 ASSERT_EQ(1, base_event_2.event_type_size());
300 EXPECT_EQ(media::cast::proto::PACKET_RETRANSMITTED,
301 base_event_2.event_type(0));
302 ASSERT_EQ(1, base_event_2.event_timestamp_micros_size());
303 EXPECT_EQ(now2.ToInternalValue(), base_event_2.event_timestamp_micros(0));
304 }
305
306 TEST_F(EncodingEventSubscriberTest, MultiplePacketEvents) {
307 base::TimeTicks now1(testing_clock_->NowTicks());
308 RtpTimestamp rtp_timestamp_1 = 100;
309 RtpTimestamp rtp_timestamp_2 = 200;
310 int packet_id_1 = 2;
311 int packet_id_2 = 3;
312 int size = 100;
313 cast_environment_->Logging()->InsertPacketEvent(
314 now1, kPacketSentToPacer, rtp_timestamp_1, /*frame_id*/ 0, packet_id_1,
315 /*max_packet_id*/ 10, size);
316
317 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
318 base::TimeTicks now2(testing_clock_->NowTicks());
319 cast_environment_->Logging()->InsertPacketEvent(
320 now2, kPacketRetransmitted, rtp_timestamp_2, /*frame_id*/ 0, packet_id_2,
321 /*max_packet_id*/ 10, size);
322
323 PacketEventMap packet_events;
324 event_subscriber_.GetPacketEventsAndReset(&packet_events);
325
326 ASSERT_EQ(2u, packet_events.size());
327
328 PacketEventMap::iterator it = packet_events.find(rtp_timestamp_1);
329 ASSERT_TRUE(it != packet_events.end());
330
331 linked_ptr<AggregatedPacketEvent> event = it->second;
332
333 EXPECT_EQ(rtp_timestamp_1, event->rtp_timestamp());
334
335 ASSERT_EQ(1, event->base_packet_event_size());
336 const BasePacketEvent& base_event = event->base_packet_event(0);
337 EXPECT_EQ(packet_id_1, base_event.packet_id());
338 ASSERT_EQ(1, base_event.event_type_size());
339 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0));
340 ASSERT_EQ(1, base_event.event_timestamp_micros_size());
341 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0));
342
343 it = packet_events.find(rtp_timestamp_2);
344 ASSERT_TRUE(it != packet_events.end());
345
346 event = it->second;
347
348 EXPECT_EQ(rtp_timestamp_2, event->rtp_timestamp());
349
350 ASSERT_EQ(1, event->base_packet_event_size());
351 const BasePacketEvent& base_event_2 = event->base_packet_event(0);
352 EXPECT_EQ(packet_id_2, base_event_2.packet_id());
353 ASSERT_EQ(1, base_event_2.event_type_size());
354 EXPECT_EQ(media::cast::proto::PACKET_RETRANSMITTED,
355 base_event_2.event_type(0));
356 ASSERT_EQ(1, base_event_2.event_timestamp_micros_size());
357 EXPECT_EQ(now2.ToInternalValue(), base_event_2.event_timestamp_micros(0));
358 }
359
360 TEST_F(EncodingEventSubscriberTest, GenericEvent) {
361 base::TimeTicks now(testing_clock_->NowTicks());
362 int value = 123;
363 cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs, value);
364
365 GenericEventMap generic_events;
366 event_subscriber_.GetGenericEventsAndReset(&generic_events);
367
368 ASSERT_EQ(1u, generic_events.size());
369
370 GenericEventMap::iterator it = generic_events.find(kJitterMs);
371 ASSERT_TRUE(it != generic_events.end());
372
373 linked_ptr<AggregatedGenericEvent> event = it->second;
374
375 ASSERT_EQ(media::cast::proto::JITTER_MS, event->event_type());
376 ASSERT_EQ(1, event->event_timestamp_micros_size());
377 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0));
378 ASSERT_EQ(1, event->value_size());
379 EXPECT_EQ(value, event->value(0));
380
381 event_subscriber_.GetGenericEventsAndReset(&generic_events);
382 EXPECT_TRUE(generic_events.empty());
383 }
384
385 TEST_F(EncodingEventSubscriberTest, MultipleGenericEventsForType) {
386 base::TimeTicks now1(testing_clock_->NowTicks());
387 int value1 = 123;
388 cast_environment_->Logging()->InsertGenericEvent(now1, kJitterMs, value1);
389
390 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20));
391 base::TimeTicks now2(testing_clock_->NowTicks());
392 int value2 = 456;
393 cast_environment_->Logging()->InsertGenericEvent(now2, kJitterMs, value2);
394
395 GenericEventMap generic_events;
396 event_subscriber_.GetGenericEventsAndReset(&generic_events);
397
398 ASSERT_EQ(1u, generic_events.size());
399
400 GenericEventMap::iterator it = generic_events.find(kJitterMs);
401 ASSERT_TRUE(it != generic_events.end());
402
403 linked_ptr<AggregatedGenericEvent> event = it->second;
404
405 ASSERT_EQ(media::cast::proto::JITTER_MS, event->event_type());
406 ASSERT_EQ(2, event->event_timestamp_micros_size());
407 EXPECT_EQ(now1.ToInternalValue(), event->event_timestamp_micros(0));
408 EXPECT_EQ(now2.ToInternalValue(), event->event_timestamp_micros(1));
409 ASSERT_EQ(2, event->value_size());
410 EXPECT_EQ(value1, event->value(0));
411 EXPECT_EQ(value2, event->value(1));
412 }
413
414 } // namespace cast
415 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698