OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/memory/ref_counted.h" | |
6 #include "base/memory/scoped_ptr.h" | |
7 #include "base/test/simple_test_tick_clock.h" | |
8 #include "base/time/tick_clock.h" | |
9 #include "media/cast/cast_environment.h" | |
10 #include "media/cast/logging/logging_defines.h" | |
11 #include "media/cast/rtcp/sender_rtcp_event_subscriber.h" | |
12 #include "media/cast/test/fake_single_thread_task_runner.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 | |
15 namespace media { | |
16 namespace cast { | |
17 | |
18 namespace { | |
19 | |
20 const size_t kMaxEventEntries = 10u; | |
21 | |
22 } // namespace | |
23 | |
24 class SenderRtcpEventSubscriberTest : public ::testing::Test { | |
25 protected: | |
26 SenderRtcpEventSubscriberTest() | |
27 : testing_clock_(new base::SimpleTestTickClock()), | |
28 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), | |
29 cast_environment_(new CastEnvironment( | |
30 scoped_ptr<base::TickClock>(testing_clock_).Pass(), | |
31 task_runner_, | |
32 task_runner_, | |
33 task_runner_)), | |
34 event_subscriber_(kMaxEventEntries) { | |
35 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_); | |
36 } | |
37 | |
38 virtual ~SenderRtcpEventSubscriberTest() { | |
39 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_); | |
40 } | |
41 | |
42 base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. | |
43 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | |
44 scoped_refptr<CastEnvironment> cast_environment_; | |
45 SenderRtcpEventSubscriber event_subscriber_; | |
46 }; | |
47 | |
48 TEST_F(SenderRtcpEventSubscriberTest, InsertEntry) { | |
49 cast_environment_->Logging()->InsertFrameEvent( | |
50 testing_clock_->NowTicks(), FRAME_CAPTURE_BEGIN, VIDEO_EVENT, 100u, 1u); | |
51 cast_environment_->Logging()->InsertFrameEvent( | |
52 testing_clock_->NowTicks(), FRAME_CAPTURE_BEGIN, VIDEO_EVENT, 200u, 2u); | |
53 cast_environment_->Logging()->InsertFrameEvent(testing_clock_->NowTicks(), | |
54 FRAME_ENCODED, VIDEO_EVENT, | |
55 100u, 1u); | |
56 cast_environment_->Logging()->InsertFrameEvent(testing_clock_->NowTicks(), | |
57 FRAME_ENCODED, VIDEO_EVENT, | |
58 300u, 3u); | |
59 | |
60 RtcpEventMap events; | |
61 event_subscriber_.GetRtcpEventsAndReset(&events); | |
62 | |
63 ASSERT_EQ(3u, events.size()); | |
64 | |
65 RtcpEventMap::iterator it = events.begin(); | |
66 EXPECT_EQ(100u, it->first); | |
67 EXPECT_EQ(FRAME_ENCODED, it->second.type); | |
68 | |
69 ++it; | |
70 EXPECT_EQ(200u, it->first); | |
71 EXPECT_EQ(FRAME_CAPTURE_BEGIN, it->second.type); | |
72 | |
73 ++it; | |
74 EXPECT_EQ(300u, it->first); | |
75 EXPECT_EQ(FRAME_ENCODED, it->second.type); | |
76 } | |
77 | |
78 TEST_F(SenderRtcpEventSubscriberTest, MapReset) { | |
79 cast_environment_->Logging()->InsertFrameEvent( | |
80 testing_clock_->NowTicks(), FRAME_CAPTURE_BEGIN, VIDEO_EVENT, 100u, 1u); | |
81 | |
82 RtcpEventMap events; | |
83 event_subscriber_.GetRtcpEventsAndReset(&events); | |
84 EXPECT_EQ(1u, events.size()); | |
85 | |
86 // Call again without any logging in between, should return empty map. | |
87 event_subscriber_.GetRtcpEventsAndReset(&events); | |
88 EXPECT_TRUE(events.empty()); | |
89 } | |
90 | |
91 TEST_F(SenderRtcpEventSubscriberTest, DropEventsWhenSizeExceeded) { | |
92 for (uint32 i = 1u; i <= 10u; ++i) { | |
93 cast_environment_->Logging()->InsertFrameEvent( | |
94 testing_clock_->NowTicks(), FRAME_CAPTURE_BEGIN, VIDEO_EVENT, | |
95 i * 10, i); | |
96 } | |
97 | |
98 RtcpEventMap events; | |
99 event_subscriber_.GetRtcpEventsAndReset(&events); | |
100 | |
101 ASSERT_EQ(10u, events.size()); | |
102 EXPECT_EQ(10u, events.begin()->first); | |
103 EXPECT_EQ(100u, events.rbegin()->first); | |
104 | |
105 for (uint32 i = 1u; i <= 11u; ++i) { | |
106 cast_environment_->Logging()->InsertFrameEvent( | |
107 testing_clock_->NowTicks(), FRAME_CAPTURE_BEGIN, VIDEO_EVENT, | |
108 i * 10, i); | |
109 } | |
110 | |
111 event_subscriber_.GetRtcpEventsAndReset(&events); | |
112 | |
113 // Event with RTP timestamp 10 should have been dropped when 110 is inserted. | |
114 ASSERT_EQ(10u, events.size()); | |
115 EXPECT_EQ(20u, events.begin()->first); | |
116 EXPECT_EQ(110u, events.rbegin()->first); | |
117 } | |
118 | |
119 } // namespace cast | |
120 } // namespace media | |
OLD | NEW |