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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/rand_util.h" | 9 #include "base/rand_util.h" |
10 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 | 46 |
47 TEST_F(LoggingImplTest, BasicFrameLogging) { | 47 TEST_F(LoggingImplTest, BasicFrameLogging) { |
48 base::TimeTicks start_time = testing_clock_.NowTicks(); | 48 base::TimeTicks start_time = testing_clock_.NowTicks(); |
49 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 49 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
50 uint32 rtp_timestamp = 0; | 50 uint32 rtp_timestamp = 0; |
51 uint32 frame_id = 0; | 51 uint32 frame_id = 0; |
52 base::TimeTicks now; | 52 base::TimeTicks now; |
53 do { | 53 do { |
54 now = testing_clock_.NowTicks(); | 54 now = testing_clock_.NowTicks(); |
55 logging_.InsertFrameEvent( | 55 logging_.InsertFrameEvent( |
56 now, kAudioFrameCaptureBegin, rtp_timestamp, frame_id); | 56 now, FRAME_CAPTURE_BEGIN, VIDEO_EVENT, rtp_timestamp, frame_id); |
57 testing_clock_.Advance( | 57 testing_clock_.Advance( |
58 base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 58 base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
59 rtp_timestamp += kFrameIntervalMs * 90; | 59 rtp_timestamp += kFrameIntervalMs * 90; |
60 ++frame_id; | 60 ++frame_id; |
61 time_interval = now - start_time; | 61 time_interval = now - start_time; |
62 } while (time_interval.InSeconds() < kIntervalTime1S); | 62 } while (time_interval.InSeconds() < kIntervalTime1S); |
63 | 63 |
64 // Get logging data. | 64 // Get logging data. |
65 std::vector<FrameEvent> frame_events; | 65 std::vector<FrameEvent> frame_events; |
66 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 66 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
(...skipping 10 matching lines...) Expand all Loading... |
77 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 77 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
78 uint32 rtp_timestamp = 0; | 78 uint32 rtp_timestamp = 0; |
79 uint32 frame_id = 0; | 79 uint32 frame_id = 0; |
80 size_t sum_size = 0; | 80 size_t sum_size = 0; |
81 int target_bitrate = 1234; | 81 int target_bitrate = 1234; |
82 do { | 82 do { |
83 int size = kBaseFrameSizeBytes + | 83 int size = kBaseFrameSizeBytes + |
84 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); | 84 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); |
85 sum_size += static_cast<size_t>(size); | 85 sum_size += static_cast<size_t>(size); |
86 logging_.InsertEncodedFrameEvent(testing_clock_.NowTicks(), | 86 logging_.InsertEncodedFrameEvent(testing_clock_.NowTicks(), |
87 kVideoFrameEncoded, rtp_timestamp, | 87 FRAME_ENCODED, VIDEO_EVENT, rtp_timestamp, |
88 frame_id, size, true, target_bitrate); | 88 frame_id, size, true, target_bitrate); |
89 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 89 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
90 rtp_timestamp += kFrameIntervalMs * 90; | 90 rtp_timestamp += kFrameIntervalMs * 90; |
91 ++frame_id; | 91 ++frame_id; |
92 time_interval = testing_clock_.NowTicks() - start_time; | 92 time_interval = testing_clock_.NowTicks() - start_time; |
93 } while (time_interval.InSeconds() < kIntervalTime1S); | 93 } while (time_interval.InSeconds() < kIntervalTime1S); |
94 // Get logging data. | 94 // Get logging data. |
95 std::vector<FrameEvent> frame_events; | 95 std::vector<FrameEvent> frame_events; |
96 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 96 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
97 // Size of vector should be equal to the number of events logged, which | 97 // Size of vector should be equal to the number of events logged, which |
98 // equals to number of frames in this case. | 98 // equals to number of frames in this case. |
99 EXPECT_EQ(frame_id, frame_events.size()); | 99 EXPECT_EQ(frame_id, frame_events.size()); |
100 } | 100 } |
101 | 101 |
102 TEST_F(LoggingImplTest, FrameLoggingWithDelay) { | 102 TEST_F(LoggingImplTest, FrameLoggingWithDelay) { |
103 // Average packet size. | 103 // Average packet size. |
104 const int kPlayoutDelayMs = 50; | 104 const int kPlayoutDelayMs = 50; |
105 const int kRandomSizeInterval = 20; | 105 const int kRandomSizeInterval = 20; |
106 base::TimeTicks start_time = testing_clock_.NowTicks(); | 106 base::TimeTicks start_time = testing_clock_.NowTicks(); |
107 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 107 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
108 uint32 rtp_timestamp = 0; | 108 uint32 rtp_timestamp = 0; |
109 uint32 frame_id = 0; | 109 uint32 frame_id = 0; |
110 do { | 110 do { |
111 int delay = kPlayoutDelayMs + | 111 int delay = kPlayoutDelayMs + |
112 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); | 112 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); |
113 logging_.InsertFrameEventWithDelay( | 113 logging_.InsertFrameEventWithDelay( |
114 testing_clock_.NowTicks(), | 114 testing_clock_.NowTicks(), |
115 kAudioFrameCaptureBegin, | 115 FRAME_CAPTURE_BEGIN, |
| 116 VIDEO_EVENT, |
116 rtp_timestamp, | 117 rtp_timestamp, |
117 frame_id, | 118 frame_id, |
118 base::TimeDelta::FromMilliseconds(delay)); | 119 base::TimeDelta::FromMilliseconds(delay)); |
119 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 120 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
120 rtp_timestamp += kFrameIntervalMs * 90; | 121 rtp_timestamp += kFrameIntervalMs * 90; |
121 ++frame_id; | 122 ++frame_id; |
122 time_interval = testing_clock_.NowTicks() - start_time; | 123 time_interval = testing_clock_.NowTicks() - start_time; |
123 } while (time_interval.InSeconds() < kIntervalTime1S); | 124 } while (time_interval.InSeconds() < kIntervalTime1S); |
124 // Get logging data. | 125 // Get logging data. |
125 std::vector<FrameEvent> frame_events; | 126 std::vector<FrameEvent> frame_events; |
126 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 127 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
127 // Size of vector should be equal to the number of frames logged. | 128 // Size of vector should be equal to the number of frames logged. |
128 EXPECT_EQ(frame_id, frame_events.size()); | 129 EXPECT_EQ(frame_id, frame_events.size()); |
129 } | 130 } |
130 | 131 |
131 TEST_F(LoggingImplTest, MultipleEventFrameLogging) { | 132 TEST_F(LoggingImplTest, MultipleEventFrameLogging) { |
132 base::TimeTicks start_time = testing_clock_.NowTicks(); | 133 base::TimeTicks start_time = testing_clock_.NowTicks(); |
133 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 134 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
134 uint32 rtp_timestamp = 0u; | 135 uint32 rtp_timestamp = 0u; |
135 uint32 frame_id = 0u; | 136 uint32 frame_id = 0u; |
136 uint32 num_events = 0u; | 137 uint32 num_events = 0u; |
137 do { | 138 do { |
138 logging_.InsertFrameEvent(testing_clock_.NowTicks(), | 139 logging_.InsertFrameEvent(testing_clock_.NowTicks(), |
139 kAudioFrameCaptureBegin, | 140 FRAME_CAPTURE_END, |
| 141 VIDEO_EVENT, |
140 rtp_timestamp, | 142 rtp_timestamp, |
141 frame_id); | 143 frame_id); |
142 ++num_events; | 144 ++num_events; |
143 if (frame_id % 2) { | 145 if (frame_id % 2) { |
144 logging_.InsertEncodedFrameEvent(testing_clock_.NowTicks(), | 146 logging_.InsertEncodedFrameEvent(testing_clock_.NowTicks(), |
145 kAudioFrameEncoded, rtp_timestamp, | 147 FRAME_ENCODED, AUDIO_EVENT, |
| 148 rtp_timestamp, |
146 frame_id, 1500, true, 0); | 149 frame_id, 1500, true, 0); |
147 } else if (frame_id % 3) { | 150 } else if (frame_id % 3) { |
148 logging_.InsertFrameEvent(testing_clock_.NowTicks(), kVideoFrameDecoded, | 151 logging_.InsertFrameEvent(testing_clock_.NowTicks(), FRAME_DECODED, |
149 rtp_timestamp, frame_id); | 152 VIDEO_EVENT, rtp_timestamp, frame_id); |
150 } else { | 153 } else { |
151 logging_.InsertFrameEventWithDelay( | 154 logging_.InsertFrameEventWithDelay( |
152 testing_clock_.NowTicks(), kVideoRenderDelay, rtp_timestamp, frame_id, | 155 testing_clock_.NowTicks(), FRAME_PLAYOUT, VIDEO_EVENT, |
153 base::TimeDelta::FromMilliseconds(20)); | 156 rtp_timestamp, frame_id, base::TimeDelta::FromMilliseconds(20)); |
154 } | 157 } |
155 ++num_events; | 158 ++num_events; |
156 | 159 |
157 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 160 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
158 rtp_timestamp += kFrameIntervalMs * 90; | 161 rtp_timestamp += kFrameIntervalMs * 90; |
159 ++frame_id; | 162 ++frame_id; |
160 time_interval = testing_clock_.NowTicks() - start_time; | 163 time_interval = testing_clock_.NowTicks() - start_time; |
161 } while (time_interval.InSeconds() < kIntervalTime1S); | 164 } while (time_interval.InSeconds() < kIntervalTime1S); |
162 // Get logging data. | 165 // Get logging data. |
163 std::vector<FrameEvent> frame_events; | 166 std::vector<FrameEvent> frame_events; |
(...skipping 14 matching lines...) Expand all Loading... |
178 int frame_id = 0; | 181 int frame_id = 0; |
179 int num_packets = 0; | 182 int num_packets = 0; |
180 int sum_size = 0u; | 183 int sum_size = 0u; |
181 do { | 184 do { |
182 for (int i = 0; i < kNumPacketsPerFrame; ++i) { | 185 for (int i = 0; i < kNumPacketsPerFrame; ++i) { |
183 int size = kBaseSize + base::RandInt(-kSizeInterval, kSizeInterval); | 186 int size = kBaseSize + base::RandInt(-kSizeInterval, kSizeInterval); |
184 sum_size += size; | 187 sum_size += size; |
185 latest_time = testing_clock_.NowTicks(); | 188 latest_time = testing_clock_.NowTicks(); |
186 ++num_packets; | 189 ++num_packets; |
187 logging_.InsertPacketEvent(latest_time, | 190 logging_.InsertPacketEvent(latest_time, |
188 kDuplicateVideoPacketReceived, | 191 PACKET_RECEIVED, |
189 rtp_timestamp, | 192 VIDEO_EVENT, |
190 frame_id, | 193 rtp_timestamp, |
191 i, | 194 frame_id, |
192 kNumPacketsPerFrame, | 195 i, |
193 size); | 196 kNumPacketsPerFrame, |
| 197 size); |
194 } | 198 } |
195 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 199 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
196 rtp_timestamp += kFrameIntervalMs * 90; | 200 rtp_timestamp += kFrameIntervalMs * 90; |
197 ++frame_id; | 201 ++frame_id; |
198 time_interval = testing_clock_.NowTicks() - start_time; | 202 time_interval = testing_clock_.NowTicks() - start_time; |
199 } while (time_interval.InSeconds() < kIntervalTime1S); | 203 } while (time_interval.InSeconds() < kIntervalTime1S); |
200 // Get logging data. | 204 // Get logging data. |
201 std::vector<PacketEvent> packet_events; | 205 std::vector<PacketEvent> packet_events; |
202 event_subscriber_.GetPacketEventsAndReset(&packet_events); | 206 event_subscriber_.GetPacketEventsAndReset(&packet_events); |
203 // Size of vector should be equal to the number of packets logged. | 207 // Size of vector should be equal to the number of packets logged. |
204 EXPECT_EQ(num_packets, static_cast<int>(packet_events.size())); | 208 EXPECT_EQ(num_packets, static_cast<int>(packet_events.size())); |
205 } | 209 } |
206 | 210 |
207 TEST_F(LoggingImplTest, MultipleRawEventSubscribers) { | 211 TEST_F(LoggingImplTest, MultipleRawEventSubscribers) { |
208 SimpleEventSubscriber event_subscriber_2; | 212 SimpleEventSubscriber event_subscriber_2; |
209 | 213 |
210 // Now logging_ has two subscribers. | 214 // Now logging_ has two subscribers. |
211 logging_.AddRawEventSubscriber(&event_subscriber_2); | 215 logging_.AddRawEventSubscriber(&event_subscriber_2); |
212 | 216 |
213 logging_.InsertFrameEvent(testing_clock_.NowTicks(), | 217 logging_.InsertFrameEvent(testing_clock_.NowTicks(), |
214 kAudioFrameCaptureBegin, | 218 FRAME_CAPTURE_BEGIN, |
| 219 VIDEO_EVENT, |
215 /*rtp_timestamp*/ 0u, | 220 /*rtp_timestamp*/ 0u, |
216 /*frame_id*/ 0u); | 221 /*frame_id*/ 0u); |
217 | 222 |
218 std::vector<FrameEvent> frame_events; | 223 std::vector<FrameEvent> frame_events; |
219 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 224 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
220 EXPECT_EQ(1u, frame_events.size()); | 225 EXPECT_EQ(1u, frame_events.size()); |
221 frame_events.clear(); | 226 frame_events.clear(); |
222 event_subscriber_2.GetFrameEventsAndReset(&frame_events); | 227 event_subscriber_2.GetFrameEventsAndReset(&frame_events); |
223 EXPECT_EQ(1u, frame_events.size()); | 228 EXPECT_EQ(1u, frame_events.size()); |
224 | 229 |
225 logging_.RemoveRawEventSubscriber(&event_subscriber_2); | 230 logging_.RemoveRawEventSubscriber(&event_subscriber_2); |
226 } | 231 } |
227 | 232 |
228 } // namespace cast | 233 } // namespace cast |
229 } // namespace media | 234 } // namespace media |
OLD | NEW |