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

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

Issue 168933002: Cast: Implemented relative RTP timestamp in EncodingEventSubscriber. (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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698