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