| 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 |