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