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