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" |
(...skipping 14 matching lines...) Expand all Loading... |
25 : testing_clock_(new base::SimpleTestTickClock()), | 25 : testing_clock_(new base::SimpleTestTickClock()), |
26 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), | 26 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), |
27 cast_environment_(new CastEnvironment( | 27 cast_environment_(new CastEnvironment( |
28 scoped_ptr<base::TickClock>(testing_clock_).Pass(), | 28 scoped_ptr<base::TickClock>(testing_clock_).Pass(), |
29 task_runner_, | 29 task_runner_, |
30 task_runner_, | 30 task_runner_, |
31 task_runner_, | 31 task_runner_, |
32 task_runner_, | 32 task_runner_, |
33 task_runner_, | 33 task_runner_, |
34 task_runner_, | 34 task_runner_, |
35 GetLoggingConfigWithRawEventsAndStatsEnabled())) {} | 35 GetLoggingConfigWithRawEventsAndStatsEnabled())), |
| 36 first_rtp_timestamp(0) {} |
36 | 37 |
37 void Init(EventMediaType event_media_type) { | 38 void Init(EventMediaType event_media_type) { |
38 DCHECK(!event_subscriber_); | 39 DCHECK(!event_subscriber_); |
39 event_subscriber_.reset(new EncodingEventSubscriber(event_media_type, 10)); | 40 event_subscriber_.reset(new EncodingEventSubscriber(event_media_type, 10)); |
40 cast_environment_->Logging()->AddRawEventSubscriber( | 41 cast_environment_->Logging()->AddRawEventSubscriber( |
41 event_subscriber_.get()); | 42 event_subscriber_.get()); |
42 } | 43 } |
43 | 44 |
44 virtual ~EncodingEventSubscriberTest() { | 45 virtual ~EncodingEventSubscriberTest() { |
45 if (event_subscriber_) { | 46 if (event_subscriber_) { |
46 cast_environment_->Logging()->RemoveRawEventSubscriber( | 47 cast_environment_->Logging()->RemoveRawEventSubscriber( |
47 event_subscriber_.get()); | 48 event_subscriber_.get()); |
48 } | 49 } |
49 } | 50 } |
50 | 51 |
| 52 void GetEventsAndReset() { |
| 53 event_subscriber_->GetEventsAndReset( |
| 54 &frame_events, &packet_events, &first_rtp_timestamp); |
| 55 } |
| 56 |
51 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. | 57 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. |
52 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 58 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
53 scoped_refptr<CastEnvironment> cast_environment_; | 59 scoped_refptr<CastEnvironment> cast_environment_; |
54 scoped_ptr<EncodingEventSubscriber> event_subscriber_; | 60 scoped_ptr<EncodingEventSubscriber> event_subscriber_; |
| 61 FrameEventMap frame_events; |
| 62 PacketEventMap packet_events; |
| 63 RtpTimestamp first_rtp_timestamp; |
55 }; | 64 }; |
56 | 65 |
57 TEST_F(EncodingEventSubscriberTest, FrameEventTruncating) { | 66 TEST_F(EncodingEventSubscriberTest, FrameEventTruncating) { |
58 Init(VIDEO_EVENT); | 67 Init(VIDEO_EVENT); |
59 | 68 |
60 base::TimeTicks now(testing_clock_->NowTicks()); | 69 base::TimeTicks now(testing_clock_->NowTicks()); |
61 | 70 |
62 // Entry with RTP timestamp 0 should get dropped. | 71 // Entry with RTP timestamp 0 should get dropped. |
63 for (int i = 0; i < 11; i++) { | 72 for (int i = 0; i < 11; i++) { |
64 cast_environment_->Logging()->InsertFrameEvent(now, | 73 cast_environment_->Logging()->InsertFrameEvent(now, |
65 kVideoFrameCaptured, | 74 kVideoFrameCaptured, |
66 i * 100, | 75 i * 100, |
67 /*frame_id*/ 0); | 76 /*frame_id*/ 0); |
68 cast_environment_->Logging()->InsertFrameEvent(now, | 77 cast_environment_->Logging()->InsertFrameEvent(now, |
69 kVideoFrameDecoded, | 78 kVideoFrameDecoded, |
70 i * 100, | 79 i * 100, |
71 /*frame_id*/ 0); | 80 /*frame_id*/ 0); |
72 } | 81 } |
73 | 82 |
74 FrameEventMap frame_events; | 83 GetEventsAndReset(); |
75 event_subscriber_->GetFrameEventsAndReset(&frame_events); | |
76 | 84 |
77 ASSERT_EQ(10u, frame_events.size()); | 85 ASSERT_EQ(10u, frame_events.size()); |
78 EXPECT_EQ(100u, frame_events.begin()->first); | 86 EXPECT_EQ(100u, frame_events.begin()->first); |
79 EXPECT_EQ(1000u, frame_events.rbegin()->first); | 87 EXPECT_EQ(1000u, frame_events.rbegin()->first); |
80 } | 88 } |
81 | 89 |
82 TEST_F(EncodingEventSubscriberTest, PacketEventTruncating) { | 90 TEST_F(EncodingEventSubscriberTest, PacketEventTruncating) { |
83 Init(AUDIO_EVENT); | 91 Init(AUDIO_EVENT); |
84 | 92 |
85 base::TimeTicks now(testing_clock_->NowTicks()); | 93 base::TimeTicks now(testing_clock_->NowTicks()); |
86 | 94 |
87 // Entry with RTP timestamp 0 should get dropped. | 95 // Entry with RTP timestamp 0 should get dropped. |
88 for (int i = 0; i < 11; i++) { | 96 for (int i = 0; i < 11; i++) { |
89 cast_environment_->Logging()->InsertPacketEvent(now, | 97 cast_environment_->Logging()->InsertPacketEvent(now, |
90 kAudioPacketReceived, | 98 kAudioPacketReceived, |
91 /*rtp_timestamp*/ i * 100, | 99 /*rtp_timestamp*/ i * 100, |
92 /*frame_id*/ 0, | 100 /*frame_id*/ 0, |
93 /*packet_id*/ i, | 101 /*packet_id*/ i, |
94 /*max_packet_id*/ 10, | 102 /*max_packet_id*/ 10, |
95 /*size*/ 123); | 103 /*size*/ 123); |
96 } | 104 } |
97 | 105 |
98 PacketEventMap packet_events; | 106 GetEventsAndReset(); |
99 event_subscriber_->GetPacketEventsAndReset(&packet_events); | |
100 | 107 |
101 ASSERT_EQ(10u, packet_events.size()); | 108 ASSERT_EQ(10u, packet_events.size()); |
102 EXPECT_EQ(100u, packet_events.begin()->first); | 109 EXPECT_EQ(100u, packet_events.begin()->first); |
103 EXPECT_EQ(1000u, packet_events.rbegin()->first); | 110 EXPECT_EQ(1000u, packet_events.rbegin()->first); |
104 } | 111 } |
105 | 112 |
106 TEST_F(EncodingEventSubscriberTest, EventFiltering) { | 113 TEST_F(EncodingEventSubscriberTest, EventFiltering) { |
107 Init(VIDEO_EVENT); | 114 Init(VIDEO_EVENT); |
108 | 115 |
109 base::TimeTicks now(testing_clock_->NowTicks()); | 116 base::TimeTicks now(testing_clock_->NowTicks()); |
110 RtpTimestamp rtp_timestamp = 100; | 117 RtpTimestamp rtp_timestamp = 100; |
111 cast_environment_->Logging()->InsertFrameEvent(now, | 118 cast_environment_->Logging()->InsertFrameEvent(now, |
112 kVideoFrameDecoded, | 119 kVideoFrameDecoded, |
113 rtp_timestamp, | 120 rtp_timestamp, |
114 /*frame_id*/ 0); | 121 /*frame_id*/ 0); |
115 | 122 |
116 // This is an AUDIO_EVENT and shouldn't be processed by the subscriber. | 123 // This is an AUDIO_EVENT and shouldn't be processed by the subscriber. |
117 cast_environment_->Logging()->InsertFrameEvent(now, | 124 cast_environment_->Logging()->InsertFrameEvent(now, |
118 kAudioFrameDecoded, | 125 kAudioFrameDecoded, |
119 rtp_timestamp, | 126 rtp_timestamp, |
120 /*frame_id*/ 0); | 127 /*frame_id*/ 0); |
121 | 128 |
122 FrameEventMap frame_events; | 129 GetEventsAndReset(); |
123 event_subscriber_->GetFrameEventsAndReset(&frame_events); | |
124 | 130 |
125 FrameEventMap::iterator frame_it = frame_events.find(rtp_timestamp); | 131 FrameEventMap::iterator frame_it = frame_events.find(0); |
126 ASSERT_TRUE(frame_it != frame_events.end()); | 132 ASSERT_TRUE(frame_it != frame_events.end()); |
127 | 133 |
128 linked_ptr<AggregatedFrameEvent> frame_event = frame_it->second; | 134 linked_ptr<AggregatedFrameEvent> frame_event = frame_it->second; |
129 | 135 |
130 ASSERT_EQ(1, frame_event->event_type_size()); | 136 ASSERT_EQ(1, frame_event->event_type_size()); |
131 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED, | 137 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED, |
132 frame_event->event_type(0)); | 138 frame_event->event_type(0)); |
133 | 139 |
134 PacketEventMap packet_events; | 140 GetEventsAndReset(); |
135 event_subscriber_->GetPacketEventsAndReset(&packet_events); | 141 |
136 EXPECT_TRUE(packet_events.empty()); | 142 EXPECT_TRUE(packet_events.empty()); |
137 } | 143 } |
138 | 144 |
139 TEST_F(EncodingEventSubscriberTest, FrameEvent) { | 145 TEST_F(EncodingEventSubscriberTest, FrameEvent) { |
140 Init(VIDEO_EVENT); | 146 Init(VIDEO_EVENT); |
141 base::TimeTicks now(testing_clock_->NowTicks()); | 147 base::TimeTicks now(testing_clock_->NowTicks()); |
142 RtpTimestamp rtp_timestamp = 100; | 148 RtpTimestamp rtp_timestamp = 100; |
143 cast_environment_->Logging()->InsertFrameEvent(now, kVideoFrameDecoded, | 149 cast_environment_->Logging()->InsertFrameEvent(now, kVideoFrameDecoded, |
144 rtp_timestamp, | 150 rtp_timestamp, |
145 /*frame_id*/ 0); | 151 /*frame_id*/ 0); |
146 | 152 |
147 FrameEventMap frame_events; | 153 GetEventsAndReset(); |
148 event_subscriber_->GetFrameEventsAndReset(&frame_events); | |
149 | 154 |
150 ASSERT_EQ(1u, frame_events.size()); | 155 ASSERT_EQ(1u, frame_events.size()); |
151 | 156 |
152 FrameEventMap::iterator it = frame_events.find(rtp_timestamp); | 157 RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
| 158 FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
153 ASSERT_TRUE(it != frame_events.end()); | 159 ASSERT_TRUE(it != frame_events.end()); |
154 | 160 |
155 linked_ptr<AggregatedFrameEvent> event = it->second; | 161 linked_ptr<AggregatedFrameEvent> event = it->second; |
156 | 162 |
157 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); | 163 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
158 | 164 |
159 ASSERT_EQ(1, event->event_type_size()); | 165 ASSERT_EQ(1, event->event_type_size()); |
160 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED, event->event_type(0)); | 166 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED, event->event_type(0)); |
161 ASSERT_EQ(1, event->event_timestamp_micros_size()); | 167 ASSERT_EQ(1, event->event_timestamp_micros_size()); |
162 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0)); | 168 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0)); |
163 | 169 |
164 EXPECT_EQ(0, event->encoded_frame_size()); | 170 EXPECT_EQ(0, event->encoded_frame_size()); |
165 EXPECT_EQ(0, event->delay_millis()); | 171 EXPECT_EQ(0, event->delay_millis()); |
166 | 172 |
167 event_subscriber_->GetFrameEventsAndReset(&frame_events); | 173 GetEventsAndReset(); |
168 EXPECT_TRUE(frame_events.empty()); | 174 EXPECT_TRUE(frame_events.empty()); |
169 } | 175 } |
170 | 176 |
171 TEST_F(EncodingEventSubscriberTest, FrameEventDelay) { | 177 TEST_F(EncodingEventSubscriberTest, FrameEventDelay) { |
172 Init(AUDIO_EVENT); | 178 Init(AUDIO_EVENT); |
173 base::TimeTicks now(testing_clock_->NowTicks()); | 179 base::TimeTicks now(testing_clock_->NowTicks()); |
174 RtpTimestamp rtp_timestamp = 100; | 180 RtpTimestamp rtp_timestamp = 100; |
175 int delay_ms = 100; | 181 int delay_ms = 100; |
176 cast_environment_->Logging()->InsertFrameEventWithDelay( | 182 cast_environment_->Logging()->InsertFrameEventWithDelay( |
177 now, kAudioPlayoutDelay, rtp_timestamp, | 183 now, kAudioPlayoutDelay, rtp_timestamp, |
178 /*frame_id*/ 0, base::TimeDelta::FromMilliseconds(delay_ms)); | 184 /*frame_id*/ 0, base::TimeDelta::FromMilliseconds(delay_ms)); |
179 | 185 |
180 FrameEventMap frame_events; | 186 GetEventsAndReset(); |
181 event_subscriber_->GetFrameEventsAndReset(&frame_events); | |
182 | 187 |
183 ASSERT_EQ(1u, frame_events.size()); | 188 ASSERT_EQ(1u, frame_events.size()); |
184 | 189 |
185 FrameEventMap::iterator it = frame_events.find(rtp_timestamp); | 190 RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
| 191 FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
186 ASSERT_TRUE(it != frame_events.end()); | 192 ASSERT_TRUE(it != frame_events.end()); |
187 | 193 |
188 linked_ptr<AggregatedFrameEvent> event = it->second; | 194 linked_ptr<AggregatedFrameEvent> event = it->second; |
189 | 195 |
190 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); | 196 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
191 | 197 |
192 ASSERT_EQ(1, event->event_type_size()); | 198 ASSERT_EQ(1, event->event_type_size()); |
193 EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0)); | 199 EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0)); |
194 ASSERT_EQ(1, event->event_timestamp_micros_size()); | 200 ASSERT_EQ(1, event->event_timestamp_micros_size()); |
195 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0)); | 201 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0)); |
196 | 202 |
197 EXPECT_EQ(0, event->encoded_frame_size()); | 203 EXPECT_EQ(0, event->encoded_frame_size()); |
198 EXPECT_EQ(100, event->delay_millis()); | 204 EXPECT_EQ(100, event->delay_millis()); |
199 } | 205 } |
200 | 206 |
201 TEST_F(EncodingEventSubscriberTest, FrameEventSize) { | 207 TEST_F(EncodingEventSubscriberTest, FrameEventSize) { |
202 Init(VIDEO_EVENT); | 208 Init(VIDEO_EVENT); |
203 base::TimeTicks now(testing_clock_->NowTicks()); | 209 base::TimeTicks now(testing_clock_->NowTicks()); |
204 RtpTimestamp rtp_timestamp = 100; | 210 RtpTimestamp rtp_timestamp = 100; |
205 int size = 123; | 211 int size = 123; |
206 cast_environment_->Logging()->InsertFrameEventWithSize( | 212 cast_environment_->Logging()->InsertFrameEventWithSize( |
207 now, kVideoFrameEncoded, rtp_timestamp, | 213 now, kVideoFrameEncoded, rtp_timestamp, |
208 /*frame_id*/ 0, size); | 214 /*frame_id*/ 0, size); |
209 | 215 |
210 FrameEventMap frame_events; | 216 GetEventsAndReset(); |
211 event_subscriber_->GetFrameEventsAndReset(&frame_events); | |
212 | 217 |
213 ASSERT_EQ(1u, frame_events.size()); | 218 ASSERT_EQ(1u, frame_events.size()); |
214 | 219 |
215 FrameEventMap::iterator it = frame_events.find(rtp_timestamp); | 220 RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
| 221 FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
216 ASSERT_TRUE(it != frame_events.end()); | 222 ASSERT_TRUE(it != frame_events.end()); |
217 | 223 |
218 linked_ptr<AggregatedFrameEvent> event = it->second; | 224 linked_ptr<AggregatedFrameEvent> event = it->second; |
219 | 225 |
220 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); | 226 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
221 | 227 |
222 ASSERT_EQ(1, event->event_type_size()); | 228 ASSERT_EQ(1, event->event_type_size()); |
223 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_ENCODED, event->event_type(0)); | 229 EXPECT_EQ(media::cast::proto::VIDEO_FRAME_ENCODED, event->event_type(0)); |
224 ASSERT_EQ(1, event->event_timestamp_micros_size()); | 230 ASSERT_EQ(1, event->event_timestamp_micros_size()); |
225 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0)); | 231 EXPECT_EQ(now.ToInternalValue(), event->event_timestamp_micros(0)); |
226 | 232 |
227 EXPECT_EQ(size, event->encoded_frame_size()); | 233 EXPECT_EQ(size, event->encoded_frame_size()); |
228 EXPECT_EQ(0, event->delay_millis()); | 234 EXPECT_EQ(0, event->delay_millis()); |
229 } | 235 } |
230 | 236 |
(...skipping 10 matching lines...) Expand all Loading... |
241 base::TimeTicks now2(testing_clock_->NowTicks()); | 247 base::TimeTicks now2(testing_clock_->NowTicks()); |
242 cast_environment_->Logging()->InsertFrameEventWithSize( | 248 cast_environment_->Logging()->InsertFrameEventWithSize( |
243 now2, kAudioFrameEncoded, rtp_timestamp2, | 249 now2, kAudioFrameEncoded, rtp_timestamp2, |
244 /*frame_id*/ 0, /*size*/ 123); | 250 /*frame_id*/ 0, /*size*/ 123); |
245 | 251 |
246 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); | 252 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); |
247 base::TimeTicks now3(testing_clock_->NowTicks()); | 253 base::TimeTicks now3(testing_clock_->NowTicks()); |
248 cast_environment_->Logging()->InsertFrameEvent( | 254 cast_environment_->Logging()->InsertFrameEvent( |
249 now3, kAudioFrameDecoded, rtp_timestamp1, /*frame_id*/ 0); | 255 now3, kAudioFrameDecoded, rtp_timestamp1, /*frame_id*/ 0); |
250 | 256 |
251 FrameEventMap frame_events; | 257 GetEventsAndReset(); |
252 event_subscriber_->GetFrameEventsAndReset(&frame_events); | |
253 | 258 |
254 ASSERT_EQ(2u, frame_events.size()); | 259 ASSERT_EQ(2u, frame_events.size()); |
255 | 260 |
256 FrameEventMap::iterator it = frame_events.find(100); | 261 RtpTimestamp relative_rtp_timestamp = rtp_timestamp1 - first_rtp_timestamp; |
| 262 FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
257 ASSERT_TRUE(it != frame_events.end()); | 263 ASSERT_TRUE(it != frame_events.end()); |
258 | 264 |
259 linked_ptr<AggregatedFrameEvent> event = it->second; | 265 linked_ptr<AggregatedFrameEvent> event = it->second; |
260 | 266 |
261 EXPECT_EQ(rtp_timestamp1, event->rtp_timestamp()); | 267 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
262 | 268 |
263 ASSERT_EQ(2, event->event_type_size()); | 269 ASSERT_EQ(2, event->event_type_size()); |
264 EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0)); | 270 EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0)); |
265 EXPECT_EQ(media::cast::proto::AUDIO_FRAME_DECODED, event->event_type(1)); | 271 EXPECT_EQ(media::cast::proto::AUDIO_FRAME_DECODED, event->event_type(1)); |
266 | 272 |
267 ASSERT_EQ(2, event->event_timestamp_micros_size()); | 273 ASSERT_EQ(2, event->event_timestamp_micros_size()); |
268 EXPECT_EQ(now1.ToInternalValue(), event->event_timestamp_micros(0)); | 274 EXPECT_EQ(now1.ToInternalValue(), event->event_timestamp_micros(0)); |
269 EXPECT_EQ(now3.ToInternalValue(), event->event_timestamp_micros(1)); | 275 EXPECT_EQ(now3.ToInternalValue(), event->event_timestamp_micros(1)); |
270 | 276 |
271 it = frame_events.find(200); | 277 relative_rtp_timestamp = rtp_timestamp2 - first_rtp_timestamp; |
| 278 it = frame_events.find(relative_rtp_timestamp); |
272 ASSERT_TRUE(it != frame_events.end()); | 279 ASSERT_TRUE(it != frame_events.end()); |
273 | 280 |
274 event = it->second; | 281 event = it->second; |
275 | 282 |
276 EXPECT_EQ(rtp_timestamp2, event->rtp_timestamp()); | 283 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
277 | 284 |
278 ASSERT_EQ(1, event->event_type_size()); | 285 ASSERT_EQ(1, event->event_type_size()); |
279 EXPECT_EQ(media::cast::proto::AUDIO_FRAME_ENCODED, event->event_type(0)); | 286 EXPECT_EQ(media::cast::proto::AUDIO_FRAME_ENCODED, event->event_type(0)); |
280 | 287 |
281 ASSERT_EQ(1, event->event_timestamp_micros_size()); | 288 ASSERT_EQ(1, event->event_timestamp_micros_size()); |
282 EXPECT_EQ(now2.ToInternalValue(), event->event_timestamp_micros(0)); | 289 EXPECT_EQ(now2.ToInternalValue(), event->event_timestamp_micros(0)); |
283 } | 290 } |
284 | 291 |
285 TEST_F(EncodingEventSubscriberTest, PacketEvent) { | 292 TEST_F(EncodingEventSubscriberTest, PacketEvent) { |
286 Init(AUDIO_EVENT); | 293 Init(AUDIO_EVENT); |
287 base::TimeTicks now(testing_clock_->NowTicks()); | 294 base::TimeTicks now(testing_clock_->NowTicks()); |
288 RtpTimestamp rtp_timestamp = 100; | 295 RtpTimestamp rtp_timestamp = 100; |
289 int packet_id = 2; | 296 int packet_id = 2; |
290 int size = 100; | 297 int size = 100; |
291 cast_environment_->Logging()->InsertPacketEvent( | 298 cast_environment_->Logging()->InsertPacketEvent( |
292 now, kAudioPacketReceived, rtp_timestamp, /*frame_id*/ 0, packet_id, | 299 now, kAudioPacketReceived, rtp_timestamp, /*frame_id*/ 0, packet_id, |
293 /*max_packet_id*/ 10, size); | 300 /*max_packet_id*/ 10, size); |
294 | 301 |
295 PacketEventMap packet_events; | 302 GetEventsAndReset(); |
296 event_subscriber_->GetPacketEventsAndReset(&packet_events); | |
297 | 303 |
298 ASSERT_EQ(1u, packet_events.size()); | 304 ASSERT_EQ(1u, packet_events.size()); |
299 | 305 |
300 PacketEventMap::iterator it = packet_events.find(rtp_timestamp); | 306 RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
| 307 PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
301 ASSERT_TRUE(it != packet_events.end()); | 308 ASSERT_TRUE(it != packet_events.end()); |
302 | 309 |
303 linked_ptr<AggregatedPacketEvent> event = it->second; | 310 linked_ptr<AggregatedPacketEvent> event = it->second; |
304 | 311 |
305 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); | 312 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
306 | 313 |
307 ASSERT_EQ(1, event->base_packet_event_size()); | 314 ASSERT_EQ(1, event->base_packet_event_size()); |
308 const BasePacketEvent& base_event = event->base_packet_event(0); | 315 const BasePacketEvent& base_event = event->base_packet_event(0); |
309 EXPECT_EQ(packet_id, base_event.packet_id()); | 316 EXPECT_EQ(packet_id, base_event.packet_id()); |
310 ASSERT_EQ(1, base_event.event_type_size()); | 317 ASSERT_EQ(1, base_event.event_type_size()); |
311 EXPECT_EQ(media::cast::proto::AUDIO_PACKET_RECEIVED, | 318 EXPECT_EQ(media::cast::proto::AUDIO_PACKET_RECEIVED, |
312 base_event.event_type(0)); | 319 base_event.event_type(0)); |
313 ASSERT_EQ(1, base_event.event_timestamp_micros_size()); | 320 ASSERT_EQ(1, base_event.event_timestamp_micros_size()); |
314 EXPECT_EQ(now.ToInternalValue(), base_event.event_timestamp_micros(0)); | 321 EXPECT_EQ(now.ToInternalValue(), base_event.event_timestamp_micros(0)); |
315 | 322 |
316 event_subscriber_->GetPacketEventsAndReset(&packet_events); | 323 GetEventsAndReset(); |
317 EXPECT_TRUE(packet_events.empty()); | 324 EXPECT_TRUE(packet_events.empty()); |
318 } | 325 } |
319 | 326 |
320 TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForPacket) { | 327 TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForPacket) { |
321 Init(OTHER_EVENT); | 328 Init(OTHER_EVENT); |
322 base::TimeTicks now1(testing_clock_->NowTicks()); | 329 base::TimeTicks now1(testing_clock_->NowTicks()); |
323 RtpTimestamp rtp_timestamp = 100; | 330 RtpTimestamp rtp_timestamp = 100; |
324 int packet_id = 2; | 331 int packet_id = 2; |
325 int size = 100; | 332 int size = 100; |
326 cast_environment_->Logging()->InsertPacketEvent( | 333 cast_environment_->Logging()->InsertPacketEvent( |
327 now1, kPacketSentToPacer, rtp_timestamp, /*frame_id*/ 0, packet_id, | 334 now1, kPacketSentToPacer, rtp_timestamp, /*frame_id*/ 0, packet_id, |
328 /*max_packet_id*/ 10, size); | 335 /*max_packet_id*/ 10, size); |
329 | 336 |
330 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); | 337 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); |
331 base::TimeTicks now2(testing_clock_->NowTicks()); | 338 base::TimeTicks now2(testing_clock_->NowTicks()); |
332 cast_environment_->Logging()->InsertPacketEvent( | 339 cast_environment_->Logging()->InsertPacketEvent( |
333 now2, kPacketSentToNetwork, rtp_timestamp, /*frame_id*/ 0, packet_id, | 340 now2, kPacketSentToNetwork, rtp_timestamp, /*frame_id*/ 0, packet_id, |
334 /*max_packet_id*/ 10, size); | 341 /*max_packet_id*/ 10, size); |
335 | 342 |
336 PacketEventMap packet_events; | 343 GetEventsAndReset(); |
337 event_subscriber_->GetPacketEventsAndReset(&packet_events); | |
338 | 344 |
339 ASSERT_EQ(1u, packet_events.size()); | 345 ASSERT_EQ(1u, packet_events.size()); |
340 | 346 |
341 PacketEventMap::iterator it = packet_events.find(rtp_timestamp); | 347 RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
| 348 PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
342 ASSERT_TRUE(it != packet_events.end()); | 349 ASSERT_TRUE(it != packet_events.end()); |
343 | 350 |
344 linked_ptr<AggregatedPacketEvent> event = it->second; | 351 linked_ptr<AggregatedPacketEvent> event = it->second; |
345 | 352 |
346 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); | 353 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
347 | 354 |
348 ASSERT_EQ(1, event->base_packet_event_size()); | 355 ASSERT_EQ(1, event->base_packet_event_size()); |
349 const BasePacketEvent& base_event = event->base_packet_event(0); | 356 const BasePacketEvent& base_event = event->base_packet_event(0); |
350 EXPECT_EQ(packet_id, base_event.packet_id()); | 357 EXPECT_EQ(packet_id, base_event.packet_id()); |
351 ASSERT_EQ(2, base_event.event_type_size()); | 358 ASSERT_EQ(2, base_event.event_type_size()); |
352 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0)); | 359 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0)); |
353 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_NETWORK, | 360 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_NETWORK, |
354 base_event.event_type(1)); | 361 base_event.event_type(1)); |
355 ASSERT_EQ(2, base_event.event_timestamp_micros_size()); | 362 ASSERT_EQ(2, base_event.event_timestamp_micros_size()); |
356 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0)); | 363 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0)); |
(...skipping 10 matching lines...) Expand all Loading... |
367 cast_environment_->Logging()->InsertPacketEvent( | 374 cast_environment_->Logging()->InsertPacketEvent( |
368 now1, kPacketSentToPacer, rtp_timestamp, /*frame_id*/ 0, packet_id_1, | 375 now1, kPacketSentToPacer, rtp_timestamp, /*frame_id*/ 0, packet_id_1, |
369 /*max_packet_id*/ 10, size); | 376 /*max_packet_id*/ 10, size); |
370 | 377 |
371 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); | 378 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); |
372 base::TimeTicks now2(testing_clock_->NowTicks()); | 379 base::TimeTicks now2(testing_clock_->NowTicks()); |
373 cast_environment_->Logging()->InsertPacketEvent( | 380 cast_environment_->Logging()->InsertPacketEvent( |
374 now2, kPacketRetransmitted, rtp_timestamp, /*frame_id*/ 0, packet_id_2, | 381 now2, kPacketRetransmitted, rtp_timestamp, /*frame_id*/ 0, packet_id_2, |
375 /*max_packet_id*/ 10, size); | 382 /*max_packet_id*/ 10, size); |
376 | 383 |
377 PacketEventMap packet_events; | 384 GetEventsAndReset(); |
378 event_subscriber_->GetPacketEventsAndReset(&packet_events); | |
379 | 385 |
380 ASSERT_EQ(1u, packet_events.size()); | 386 ASSERT_EQ(1u, packet_events.size()); |
381 | 387 |
382 PacketEventMap::iterator it = packet_events.find(rtp_timestamp); | 388 RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
| 389 PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
383 ASSERT_TRUE(it != packet_events.end()); | 390 ASSERT_TRUE(it != packet_events.end()); |
384 | 391 |
385 linked_ptr<AggregatedPacketEvent> event = it->second; | 392 linked_ptr<AggregatedPacketEvent> event = it->second; |
386 | 393 |
387 EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); | 394 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
388 | 395 |
389 ASSERT_EQ(2, event->base_packet_event_size()); | 396 ASSERT_EQ(2, event->base_packet_event_size()); |
390 const BasePacketEvent& base_event = event->base_packet_event(0); | 397 const BasePacketEvent& base_event = event->base_packet_event(0); |
391 EXPECT_EQ(packet_id_1, base_event.packet_id()); | 398 EXPECT_EQ(packet_id_1, base_event.packet_id()); |
392 ASSERT_EQ(1, base_event.event_type_size()); | 399 ASSERT_EQ(1, base_event.event_type_size()); |
393 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0)); | 400 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0)); |
394 ASSERT_EQ(1, base_event.event_timestamp_micros_size()); | 401 ASSERT_EQ(1, base_event.event_timestamp_micros_size()); |
395 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0)); | 402 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0)); |
396 | 403 |
397 const BasePacketEvent& base_event_2 = event->base_packet_event(1); | 404 const BasePacketEvent& base_event_2 = event->base_packet_event(1); |
(...skipping 16 matching lines...) Expand all Loading... |
414 cast_environment_->Logging()->InsertPacketEvent( | 421 cast_environment_->Logging()->InsertPacketEvent( |
415 now1, kPacketSentToPacer, rtp_timestamp_1, /*frame_id*/ 0, packet_id_1, | 422 now1, kPacketSentToPacer, rtp_timestamp_1, /*frame_id*/ 0, packet_id_1, |
416 /*max_packet_id*/ 10, size); | 423 /*max_packet_id*/ 10, size); |
417 | 424 |
418 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); | 425 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(20)); |
419 base::TimeTicks now2(testing_clock_->NowTicks()); | 426 base::TimeTicks now2(testing_clock_->NowTicks()); |
420 cast_environment_->Logging()->InsertPacketEvent( | 427 cast_environment_->Logging()->InsertPacketEvent( |
421 now2, kPacketRetransmitted, rtp_timestamp_2, /*frame_id*/ 0, packet_id_2, | 428 now2, kPacketRetransmitted, rtp_timestamp_2, /*frame_id*/ 0, packet_id_2, |
422 /*max_packet_id*/ 10, size); | 429 /*max_packet_id*/ 10, size); |
423 | 430 |
424 PacketEventMap packet_events; | 431 GetEventsAndReset(); |
425 event_subscriber_->GetPacketEventsAndReset(&packet_events); | |
426 | 432 |
427 ASSERT_EQ(2u, packet_events.size()); | 433 ASSERT_EQ(2u, packet_events.size()); |
428 | 434 |
429 PacketEventMap::iterator it = packet_events.find(rtp_timestamp_1); | 435 RtpTimestamp relative_rtp_timestamp = rtp_timestamp_1 - first_rtp_timestamp; |
| 436 PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
430 ASSERT_TRUE(it != packet_events.end()); | 437 ASSERT_TRUE(it != packet_events.end()); |
431 | 438 |
432 linked_ptr<AggregatedPacketEvent> event = it->second; | 439 linked_ptr<AggregatedPacketEvent> event = it->second; |
433 | 440 |
434 EXPECT_EQ(rtp_timestamp_1, event->rtp_timestamp()); | 441 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
435 | 442 |
436 ASSERT_EQ(1, event->base_packet_event_size()); | 443 ASSERT_EQ(1, event->base_packet_event_size()); |
437 const BasePacketEvent& base_event = event->base_packet_event(0); | 444 const BasePacketEvent& base_event = event->base_packet_event(0); |
438 EXPECT_EQ(packet_id_1, base_event.packet_id()); | 445 EXPECT_EQ(packet_id_1, base_event.packet_id()); |
439 ASSERT_EQ(1, base_event.event_type_size()); | 446 ASSERT_EQ(1, base_event.event_type_size()); |
440 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0)); | 447 EXPECT_EQ(media::cast::proto::PACKET_SENT_TO_PACER, base_event.event_type(0)); |
441 ASSERT_EQ(1, base_event.event_timestamp_micros_size()); | 448 ASSERT_EQ(1, base_event.event_timestamp_micros_size()); |
442 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0)); | 449 EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0)); |
443 | 450 |
444 it = packet_events.find(rtp_timestamp_2); | 451 relative_rtp_timestamp = rtp_timestamp_2 - first_rtp_timestamp; |
| 452 it = packet_events.find(relative_rtp_timestamp); |
445 ASSERT_TRUE(it != packet_events.end()); | 453 ASSERT_TRUE(it != packet_events.end()); |
446 | 454 |
447 event = it->second; | 455 event = it->second; |
448 | 456 |
449 EXPECT_EQ(rtp_timestamp_2, event->rtp_timestamp()); | 457 EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
450 | 458 |
451 ASSERT_EQ(1, event->base_packet_event_size()); | 459 ASSERT_EQ(1, event->base_packet_event_size()); |
452 const BasePacketEvent& base_event_2 = event->base_packet_event(0); | 460 const BasePacketEvent& base_event_2 = event->base_packet_event(0); |
453 EXPECT_EQ(packet_id_2, base_event_2.packet_id()); | 461 EXPECT_EQ(packet_id_2, base_event_2.packet_id()); |
454 ASSERT_EQ(1, base_event_2.event_type_size()); | 462 ASSERT_EQ(1, base_event_2.event_type_size()); |
455 EXPECT_EQ(media::cast::proto::PACKET_RETRANSMITTED, | 463 EXPECT_EQ(media::cast::proto::PACKET_RETRANSMITTED, |
456 base_event_2.event_type(0)); | 464 base_event_2.event_type(0)); |
457 ASSERT_EQ(1, base_event_2.event_timestamp_micros_size()); | 465 ASSERT_EQ(1, base_event_2.event_timestamp_micros_size()); |
458 EXPECT_EQ(now2.ToInternalValue(), base_event_2.event_timestamp_micros(0)); | 466 EXPECT_EQ(now2.ToInternalValue(), base_event_2.event_timestamp_micros(0)); |
459 } | 467 } |
460 | 468 |
| 469 TEST_F(EncodingEventSubscriberTest, FirstRtpTimestamp) { |
| 470 Init(VIDEO_EVENT); |
| 471 RtpTimestamp rtp_timestamp = 12345; |
| 472 base::TimeTicks now(testing_clock_->NowTicks()); |
| 473 |
| 474 cast_environment_->Logging()->InsertFrameEvent(now, |
| 475 kVideoFrameCaptured, |
| 476 rtp_timestamp, |
| 477 /*frame_id*/ 0); |
| 478 |
| 479 cast_environment_->Logging()->InsertFrameEvent(now, |
| 480 kVideoFrameReceived, |
| 481 rtp_timestamp + 30, |
| 482 /*frame_id*/ 1); |
| 483 |
| 484 GetEventsAndReset(); |
| 485 |
| 486 EXPECT_EQ(rtp_timestamp, first_rtp_timestamp); |
| 487 FrameEventMap::iterator it = frame_events.find(0); |
| 488 ASSERT_NE(frame_events.end(), it); |
| 489 |
| 490 it = frame_events.find(30); |
| 491 ASSERT_NE(frame_events.end(), it); |
| 492 |
| 493 rtp_timestamp = 67890; |
| 494 |
| 495 cast_environment_->Logging()->InsertFrameEvent(now, |
| 496 kVideoFrameCaptured, |
| 497 rtp_timestamp, |
| 498 /*frame_id*/ 0); |
| 499 GetEventsAndReset(); |
| 500 |
| 501 EXPECT_EQ(rtp_timestamp, first_rtp_timestamp); |
| 502 } |
| 503 |
| 504 TEST_F(EncodingEventSubscriberTest, RelativeRtpTimestampWrapAround) { |
| 505 Init(VIDEO_EVENT); |
| 506 RtpTimestamp rtp_timestamp = 0xffffffff - 20; |
| 507 base::TimeTicks now(testing_clock_->NowTicks()); |
| 508 |
| 509 cast_environment_->Logging()->InsertFrameEvent(now, |
| 510 kVideoFrameCaptured, |
| 511 rtp_timestamp, |
| 512 /*frame_id*/ 0); |
| 513 |
| 514 // RtpTimestamp has now wrapped around. |
| 515 cast_environment_->Logging()->InsertFrameEvent(now, |
| 516 kVideoFrameReceived, |
| 517 rtp_timestamp + 30, |
| 518 /*frame_id*/ 1); |
| 519 |
| 520 GetEventsAndReset(); |
| 521 |
| 522 FrameEventMap::iterator it = frame_events.find(0); |
| 523 ASSERT_NE(frame_events.end(), it); |
| 524 |
| 525 it = frame_events.find(30); |
| 526 ASSERT_NE(frame_events.end(), it); |
| 527 } |
| 528 |
461 } // namespace cast | 529 } // namespace cast |
462 } // namespace media | 530 } // namespace media |
OLD | NEW |