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