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