| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/rand_util.h" | 7 #include "base/rand_util.h" |
| 8 #include "base/test/simple_test_tick_clock.h" | 8 #include "base/test/simple_test_tick_clock.h" |
| 9 #include "base/time/tick_clock.h" | 9 #include "base/time/tick_clock.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| 11 #include "media/cast/logging/logging_defines.h" | 11 #include "media/cast/logging/logging_defines.h" |
| 12 #include "media/cast/logging/logging_impl.h" | 12 #include "media/cast/logging/logging_impl.h" |
| 13 #include "media/cast/logging/simple_event_subscriber.h" | 13 #include "media/cast/logging/simple_event_subscriber.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 namespace media { | 16 namespace media { |
| 17 namespace cast { | 17 namespace cast { |
| 18 | 18 |
| 19 // Insert frame duration- one second. | 19 // Insert frame duration- one second. |
| 20 const int64 kIntervalTime1S = 1; | 20 const int64 kIntervalTime1S = 1; |
| 21 // Test frame rate goal - 30fps. | 21 // Test frame rate goal - 30fps. |
| 22 const int kFrameIntervalMs = 33; | 22 const int kFrameIntervalMs = 33; |
| 23 | 23 |
| 24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); | 24 static const int64 kStartMillisecond = GG_INT64_C(12345678900000); |
| 25 | 25 |
| 26 class LoggingImplTest : public ::testing::Test { | 26 class LoggingImplTest : public ::testing::Test { |
| 27 protected: | 27 protected: |
| 28 LoggingImplTest() { | 28 LoggingImplTest() { |
| 29 // Enable all logging types. | |
| 30 config_.enable_raw_data_collection = true; | |
| 31 config_.enable_stats_data_collection = true; | |
| 32 | |
| 33 testing_clock_.Advance( | 29 testing_clock_.Advance( |
| 34 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 30 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
| 35 logging_.reset(new LoggingImpl(config_)); | 31 logging_.AddRawEventSubscriber(&event_subscriber_); |
| 36 logging_->AddRawEventSubscriber(&event_subscriber_); | |
| 37 } | 32 } |
| 38 | 33 |
| 39 virtual ~LoggingImplTest() { | 34 virtual ~LoggingImplTest() { |
| 40 logging_->RemoveRawEventSubscriber(&event_subscriber_); | 35 logging_.RemoveRawEventSubscriber(&event_subscriber_); |
| 41 } | 36 } |
| 42 | 37 |
| 43 CastLoggingConfig config_; | 38 LoggingImpl logging_; |
| 44 scoped_ptr<LoggingImpl> logging_; | |
| 45 base::SimpleTestTickClock testing_clock_; | 39 base::SimpleTestTickClock testing_clock_; |
| 46 SimpleEventSubscriber event_subscriber_; | 40 SimpleEventSubscriber event_subscriber_; |
| 47 | 41 |
| 48 DISALLOW_COPY_AND_ASSIGN(LoggingImplTest); | 42 DISALLOW_COPY_AND_ASSIGN(LoggingImplTest); |
| 49 }; | 43 }; |
| 50 | 44 |
| 51 TEST_F(LoggingImplTest, BasicFrameLogging) { | 45 TEST_F(LoggingImplTest, BasicFrameLogging) { |
| 52 base::TimeTicks start_time = testing_clock_.NowTicks(); | 46 base::TimeTicks start_time = testing_clock_.NowTicks(); |
| 53 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 47 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
| 54 uint32 rtp_timestamp = 0; | 48 uint32 rtp_timestamp = 0; |
| 55 uint32 frame_id = 0; | 49 uint32 frame_id = 0; |
| 56 base::TimeTicks now; | 50 base::TimeTicks now; |
| 57 do { | 51 do { |
| 58 now = testing_clock_.NowTicks(); | 52 now = testing_clock_.NowTicks(); |
| 59 logging_->InsertFrameEvent(now, kAudioFrameCaptured, rtp_timestamp, | 53 logging_.InsertFrameEvent(now, kAudioFrameCaptured, rtp_timestamp, |
| 60 frame_id); | 54 frame_id); |
| 61 testing_clock_.Advance( | 55 testing_clock_.Advance( |
| 62 base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 56 base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
| 63 rtp_timestamp += kFrameIntervalMs * 90; | 57 rtp_timestamp += kFrameIntervalMs * 90; |
| 64 ++frame_id; | 58 ++frame_id; |
| 65 time_interval = now - start_time; | 59 time_interval = now - start_time; |
| 66 } while (time_interval.InSeconds() < kIntervalTime1S); | 60 } while (time_interval.InSeconds() < kIntervalTime1S); |
| 67 base::TimeTicks end_time = now; | |
| 68 | 61 |
| 69 // Get logging data. | 62 // Get logging data. |
| 70 std::vector<FrameEvent> frame_events; | 63 std::vector<FrameEvent> frame_events; |
| 71 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 64 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
| 72 // Size of vector should be equal to the number of events logged, | 65 // Size of vector should be equal to the number of events logged, |
| 73 // which equals to number of frames in this case. | 66 // which equals to number of frames in this case. |
| 74 EXPECT_EQ(frame_id, frame_events.size()); | 67 EXPECT_EQ(frame_id, frame_events.size()); |
| 75 // Verify stats. | |
| 76 FrameStatsMap frame_stats = logging_->GetFrameStatsData(AUDIO_EVENT); | |
| 77 // Size of stats equals the number of events. | |
| 78 EXPECT_EQ(1u, frame_stats.size()); | |
| 79 FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); | |
| 80 EXPECT_TRUE(it != frame_stats.end()); | |
| 81 EXPECT_EQ(0, it->second.max_delay.InMilliseconds()); | |
| 82 EXPECT_EQ(0, it->second.min_delay.InMilliseconds()); | |
| 83 EXPECT_EQ(start_time, it->second.first_event_time); | |
| 84 EXPECT_EQ(end_time, it->second.last_event_time); | |
| 85 EXPECT_EQ(0u, it->second.sum_size); | |
| 86 // Number of events is equal to the number of frames. | |
| 87 EXPECT_EQ(static_cast<int>(frame_id), it->second.event_counter); | |
| 88 } | 68 } |
| 89 | 69 |
| 90 TEST_F(LoggingImplTest, FrameLoggingWithSize) { | 70 TEST_F(LoggingImplTest, FrameLoggingWithSize) { |
| 91 // Average packet size. | 71 // Average packet size. |
| 92 const int kBaseFrameSizeBytes = 25000; | 72 const int kBaseFrameSizeBytes = 25000; |
| 93 const int kRandomSizeInterval = 100; | 73 const int kRandomSizeInterval = 100; |
| 94 base::TimeTicks start_time = testing_clock_.NowTicks(); | 74 base::TimeTicks start_time = testing_clock_.NowTicks(); |
| 95 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 75 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
| 96 uint32 rtp_timestamp = 0; | 76 uint32 rtp_timestamp = 0; |
| 97 uint32 frame_id = 0; | 77 uint32 frame_id = 0; |
| 98 size_t sum_size = 0; | 78 size_t sum_size = 0; |
| 99 do { | 79 do { |
| 100 int size = kBaseFrameSizeBytes + | 80 int size = kBaseFrameSizeBytes + |
| 101 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); | 81 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); |
| 102 sum_size += static_cast<size_t>(size); | 82 sum_size += static_cast<size_t>(size); |
| 103 logging_->InsertFrameEventWithSize(testing_clock_.NowTicks(), | 83 logging_.InsertFrameEventWithSize(testing_clock_.NowTicks(), |
| 104 kAudioFrameCaptured, rtp_timestamp, | 84 kAudioFrameCaptured, rtp_timestamp, |
| 105 frame_id, size); | 85 frame_id, size); |
| 106 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 86 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
| 107 rtp_timestamp += kFrameIntervalMs * 90; | 87 rtp_timestamp += kFrameIntervalMs * 90; |
| 108 ++frame_id; | 88 ++frame_id; |
| 109 time_interval = testing_clock_.NowTicks() - start_time; | 89 time_interval = testing_clock_.NowTicks() - start_time; |
| 110 } while (time_interval.InSeconds() < kIntervalTime1S); | 90 } while (time_interval.InSeconds() < kIntervalTime1S); |
| 111 // Get logging data. | 91 // Get logging data. |
| 112 std::vector<FrameEvent> frame_events; | 92 std::vector<FrameEvent> frame_events; |
| 113 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 93 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
| 114 // Size of vector should be equal to the number of events logged, which | 94 // Size of vector should be equal to the number of events logged, which |
| 115 // equals to number of frames in this case. | 95 // equals to number of frames in this case. |
| 116 EXPECT_EQ(frame_id, frame_events.size()); | 96 EXPECT_EQ(frame_id, frame_events.size()); |
| 117 // Verify stats. | |
| 118 FrameStatsMap frame_stats = logging_->GetFrameStatsData(AUDIO_EVENT); | |
| 119 // Size of stats equals the number of events. | |
| 120 EXPECT_EQ(1u, frame_stats.size()); | |
| 121 FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); | |
| 122 EXPECT_TRUE(it != frame_stats.end()); | |
| 123 EXPECT_EQ(0, it->second.max_delay.InMilliseconds()); | |
| 124 EXPECT_EQ(0, it->second.min_delay.InMilliseconds()); | |
| 125 EXPECT_EQ(0, it->second.sum_delay.InMilliseconds()); | |
| 126 EXPECT_EQ(sum_size, it->second.sum_size); | |
| 127 } | 97 } |
| 128 | 98 |
| 129 TEST_F(LoggingImplTest, FrameLoggingWithDelay) { | 99 TEST_F(LoggingImplTest, FrameLoggingWithDelay) { |
| 130 // Average packet size. | 100 // Average packet size. |
| 131 const int kPlayoutDelayMs = 50; | 101 const int kPlayoutDelayMs = 50; |
| 132 const int kRandomSizeInterval = 20; | 102 const int kRandomSizeInterval = 20; |
| 133 base::TimeTicks start_time = testing_clock_.NowTicks(); | 103 base::TimeTicks start_time = testing_clock_.NowTicks(); |
| 134 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 104 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
| 135 uint32 rtp_timestamp = 0; | 105 uint32 rtp_timestamp = 0; |
| 136 uint32 frame_id = 0; | 106 uint32 frame_id = 0; |
| 137 do { | 107 do { |
| 138 int delay = kPlayoutDelayMs + | 108 int delay = kPlayoutDelayMs + |
| 139 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); | 109 base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); |
| 140 logging_->InsertFrameEventWithDelay( | 110 logging_.InsertFrameEventWithDelay( |
| 141 testing_clock_.NowTicks(), kAudioFrameCaptured, rtp_timestamp, frame_id, | 111 testing_clock_.NowTicks(), kAudioFrameCaptured, rtp_timestamp, frame_id, |
| 142 base::TimeDelta::FromMilliseconds(delay)); | 112 base::TimeDelta::FromMilliseconds(delay)); |
| 143 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 113 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
| 144 rtp_timestamp += kFrameIntervalMs * 90; | 114 rtp_timestamp += kFrameIntervalMs * 90; |
| 145 ++frame_id; | 115 ++frame_id; |
| 146 time_interval = testing_clock_.NowTicks() - start_time; | 116 time_interval = testing_clock_.NowTicks() - start_time; |
| 147 } while (time_interval.InSeconds() < kIntervalTime1S); | 117 } while (time_interval.InSeconds() < kIntervalTime1S); |
| 148 // Get logging data. | 118 // Get logging data. |
| 149 std::vector<FrameEvent> frame_events; | 119 std::vector<FrameEvent> frame_events; |
| 150 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 120 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
| 151 // Size of vector should be equal to the number of frames logged. | 121 // Size of vector should be equal to the number of frames logged. |
| 152 EXPECT_EQ(frame_id, frame_events.size()); | 122 EXPECT_EQ(frame_id, frame_events.size()); |
| 153 // Verify stats. | |
| 154 FrameStatsMap frame_stats = logging_->GetFrameStatsData(AUDIO_EVENT); | |
| 155 // Size of stats equals the number of events. | |
| 156 EXPECT_EQ(1u, frame_stats.size()); | |
| 157 FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); | |
| 158 EXPECT_TRUE(it != frame_stats.end()); | |
| 159 EXPECT_GE(kPlayoutDelayMs + kRandomSizeInterval, | |
| 160 it->second.max_delay.InMilliseconds()); | |
| 161 EXPECT_LE(kPlayoutDelayMs - kRandomSizeInterval, | |
| 162 it->second.min_delay.InMilliseconds()); | |
| 163 } | 123 } |
| 164 | 124 |
| 165 TEST_F(LoggingImplTest, MultipleEventFrameLogging) { | 125 TEST_F(LoggingImplTest, MultipleEventFrameLogging) { |
| 166 base::TimeTicks start_time = testing_clock_.NowTicks(); | 126 base::TimeTicks start_time = testing_clock_.NowTicks(); |
| 167 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; | 127 base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
| 168 uint32 rtp_timestamp = 0u; | 128 uint32 rtp_timestamp = 0u; |
| 169 uint32 frame_id = 0u; | 129 uint32 frame_id = 0u; |
| 170 uint32 num_events = 0u; | 130 uint32 num_events = 0u; |
| 171 do { | 131 do { |
| 172 logging_->InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, | 132 logging_.InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, |
| 173 rtp_timestamp, frame_id); | 133 rtp_timestamp, frame_id); |
| 174 ++num_events; | 134 ++num_events; |
| 175 if (frame_id % 2) { | 135 if (frame_id % 2) { |
| 176 logging_->InsertFrameEventWithSize(testing_clock_.NowTicks(), | 136 logging_.InsertFrameEventWithSize(testing_clock_.NowTicks(), |
| 177 kAudioFrameEncoded, rtp_timestamp, | 137 kAudioFrameEncoded, rtp_timestamp, |
| 178 frame_id, 1500); | 138 frame_id, 1500); |
| 179 } else if (frame_id % 3) { | 139 } else if (frame_id % 3) { |
| 180 logging_->InsertFrameEvent(testing_clock_.NowTicks(), kVideoFrameDecoded, | 140 logging_.InsertFrameEvent(testing_clock_.NowTicks(), kVideoFrameDecoded, |
| 181 rtp_timestamp, frame_id); | 141 rtp_timestamp, frame_id); |
| 182 } else { | 142 } else { |
| 183 logging_->InsertFrameEventWithDelay( | 143 logging_.InsertFrameEventWithDelay( |
| 184 testing_clock_.NowTicks(), kVideoRenderDelay, rtp_timestamp, frame_id, | 144 testing_clock_.NowTicks(), kVideoRenderDelay, rtp_timestamp, frame_id, |
| 185 base::TimeDelta::FromMilliseconds(20)); | 145 base::TimeDelta::FromMilliseconds(20)); |
| 186 } | 146 } |
| 187 ++num_events; | 147 ++num_events; |
| 188 | 148 |
| 189 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 149 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
| 190 rtp_timestamp += kFrameIntervalMs * 90; | 150 rtp_timestamp += kFrameIntervalMs * 90; |
| 191 ++frame_id; | 151 ++frame_id; |
| 192 time_interval = testing_clock_.NowTicks() - start_time; | 152 time_interval = testing_clock_.NowTicks() - start_time; |
| 193 } while (time_interval.InSeconds() < kIntervalTime1S); | 153 } while (time_interval.InSeconds() < kIntervalTime1S); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 209 RtpTimestamp rtp_timestamp = 0; | 169 RtpTimestamp rtp_timestamp = 0; |
| 210 int frame_id = 0; | 170 int frame_id = 0; |
| 211 int num_packets = 0; | 171 int num_packets = 0; |
| 212 int sum_size = 0u; | 172 int sum_size = 0u; |
| 213 do { | 173 do { |
| 214 for (int i = 0; i < kNumPacketsPerFrame; ++i) { | 174 for (int i = 0; i < kNumPacketsPerFrame; ++i) { |
| 215 int size = kBaseSize + base::RandInt(-kSizeInterval, kSizeInterval); | 175 int size = kBaseSize + base::RandInt(-kSizeInterval, kSizeInterval); |
| 216 sum_size += size; | 176 sum_size += size; |
| 217 latest_time = testing_clock_.NowTicks(); | 177 latest_time = testing_clock_.NowTicks(); |
| 218 ++num_packets; | 178 ++num_packets; |
| 219 logging_->InsertPacketEvent(latest_time, | 179 logging_.InsertPacketEvent(latest_time, |
| 220 kDuplicateVideoPacketReceived, | 180 kDuplicateVideoPacketReceived, |
| 221 rtp_timestamp, | 181 rtp_timestamp, |
| 222 frame_id, | 182 frame_id, |
| 223 i, | 183 i, |
| 224 kNumPacketsPerFrame, | 184 kNumPacketsPerFrame, |
| 225 size); | 185 size); |
| 226 } | 186 } |
| 227 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); | 187 testing_clock_.Advance(base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
| 228 rtp_timestamp += kFrameIntervalMs * 90; | 188 rtp_timestamp += kFrameIntervalMs * 90; |
| 229 ++frame_id; | 189 ++frame_id; |
| 230 time_interval = testing_clock_.NowTicks() - start_time; | 190 time_interval = testing_clock_.NowTicks() - start_time; |
| 231 } while (time_interval.InSeconds() < kIntervalTime1S); | 191 } while (time_interval.InSeconds() < kIntervalTime1S); |
| 232 // Get logging data. | 192 // Get logging data. |
| 233 std::vector<PacketEvent> packet_events; | 193 std::vector<PacketEvent> packet_events; |
| 234 event_subscriber_.GetPacketEventsAndReset(&packet_events); | 194 event_subscriber_.GetPacketEventsAndReset(&packet_events); |
| 235 // Size of vector should be equal to the number of packets logged. | 195 // Size of vector should be equal to the number of packets logged. |
| 236 EXPECT_EQ(num_packets, static_cast<int>(packet_events.size())); | 196 EXPECT_EQ(num_packets, static_cast<int>(packet_events.size())); |
| 237 // Verify stats. | |
| 238 PacketStatsMap stats_map = logging_->GetPacketStatsData(VIDEO_EVENT); | |
| 239 // Size of stats equals the number of event types. | |
| 240 EXPECT_EQ(1u, stats_map.size()); | |
| 241 PacketStatsMap::const_iterator it = | |
| 242 stats_map.find(kDuplicateVideoPacketReceived); | |
| 243 ASSERT_NE(stats_map.end(), it); | |
| 244 EXPECT_EQ(start_time, it->second.first_event_time); | |
| 245 EXPECT_EQ(latest_time, it->second.last_event_time); | |
| 246 EXPECT_EQ(num_packets, it->second.event_counter); | |
| 247 EXPECT_EQ(sum_size, static_cast<int>(it->second.sum_size)); | |
| 248 } | 197 } |
| 249 | 198 |
| 250 TEST_F(LoggingImplTest, GenericLogging) { | 199 TEST_F(LoggingImplTest, GenericLogging) { |
| 251 // Insert multiple generic types. | 200 // Insert multiple generic types. |
| 252 const size_t kNumRuns = 20;//1000; | 201 const size_t kNumRuns = 20;//1000; |
| 253 const int kBaseValue = 20; | 202 const int kBaseValue = 20; |
| 254 int sum_value_rtt = 0; | 203 int sum_value_rtt = 0; |
| 255 int sum_value_pl = 0; | 204 int sum_value_pl = 0; |
| 256 int sum_value_jitter = 0; | 205 int sum_value_jitter = 0; |
| 257 uint64 sumsq_value_rtt = 0; | 206 uint64 sumsq_value_rtt = 0; |
| 258 uint64 sumsq_value_pl = 0; | 207 uint64 sumsq_value_pl = 0; |
| 259 uint64 sumsq_value_jitter = 0; | 208 uint64 sumsq_value_jitter = 0; |
| 260 int min_value, max_value; | 209 int min_value, max_value; |
| 261 | 210 |
| 262 uint32 num_events = 0u; | 211 uint32 num_events = 0u; |
| 263 uint32 expected_rtt_count = 0u; | 212 uint32 expected_rtt_count = 0u; |
| 264 uint32 expected_packet_loss_count = 0u; | 213 uint32 expected_packet_loss_count = 0u; |
| 265 uint32 expected_jitter_count = 0u; | 214 uint32 expected_jitter_count = 0u; |
| 266 for (size_t i = 0; i < kNumRuns; ++i) { | 215 for (size_t i = 0; i < kNumRuns; ++i) { |
| 267 int value = kBaseValue + base::RandInt(-5, 5); | 216 int value = kBaseValue + base::RandInt(-5, 5); |
| 268 sum_value_rtt += value; | 217 sum_value_rtt += value; |
| 269 sumsq_value_rtt += value * value; | 218 sumsq_value_rtt += value * value; |
| 270 logging_->InsertGenericEvent(testing_clock_.NowTicks(), kRttMs, value); | 219 logging_.InsertGenericEvent(testing_clock_.NowTicks(), kRttMs, value); |
| 271 ++num_events; | 220 ++num_events; |
| 272 ++expected_rtt_count; | 221 ++expected_rtt_count; |
| 273 if (i % 2) { | 222 if (i % 2) { |
| 274 logging_->InsertGenericEvent(testing_clock_.NowTicks(), kPacketLoss, | 223 logging_.InsertGenericEvent(testing_clock_.NowTicks(), kPacketLoss, |
| 275 value); | 224 value); |
| 276 ++num_events; | 225 ++num_events; |
| 277 ++expected_packet_loss_count; | 226 ++expected_packet_loss_count; |
| 278 sum_value_pl += value; | 227 sum_value_pl += value; |
| 279 sumsq_value_pl += value * value; | 228 sumsq_value_pl += value * value; |
| 280 } | 229 } |
| 281 if (!(i % 4)) { | 230 if (!(i % 4)) { |
| 282 logging_->InsertGenericEvent(testing_clock_.NowTicks(), kJitterMs, value); | 231 logging_.InsertGenericEvent(testing_clock_.NowTicks(), kJitterMs, value); |
| 283 ++num_events; | 232 ++num_events; |
| 284 ++expected_jitter_count; | 233 ++expected_jitter_count; |
| 285 sum_value_jitter += value; | 234 sum_value_jitter += value; |
| 286 sumsq_value_jitter += value * value; | 235 sumsq_value_jitter += value * value; |
| 287 } | 236 } |
| 288 if (i == 0) { | 237 if (i == 0) { |
| 289 min_value = value; | 238 min_value = value; |
| 290 max_value = value; | 239 max_value = value; |
| 291 } else if (min_value > value) { | 240 } else if (min_value > value) { |
| 292 min_value = value; | 241 min_value = value; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 307 for (std::vector<GenericEvent>::iterator it = generic_events.begin(); | 256 for (std::vector<GenericEvent>::iterator it = generic_events.begin(); |
| 308 it != generic_events.end(); ++it) { | 257 it != generic_events.end(); ++it) { |
| 309 if (it->type == kRttMs) { | 258 if (it->type == kRttMs) { |
| 310 ++rtt_event_count; | 259 ++rtt_event_count; |
| 311 } else if (it->type == kPacketLoss) { | 260 } else if (it->type == kPacketLoss) { |
| 312 ++packet_loss_event_count; | 261 ++packet_loss_event_count; |
| 313 } else if (it->type == kJitterMs) { | 262 } else if (it->type == kJitterMs) { |
| 314 ++jitter_event_count; | 263 ++jitter_event_count; |
| 315 } | 264 } |
| 316 } | 265 } |
| 317 | |
| 318 // Size of generic stats map = number of different events. | |
| 319 // Stats - one value per all events. | |
| 320 GenericStatsMap stats_map = logging_->GetGenericStatsData(); | |
| 321 EXPECT_EQ(3u, stats_map.size()); | |
| 322 GenericStatsMap::const_iterator sit = stats_map.find(kRttMs); | |
| 323 EXPECT_EQ(sum_value_rtt, sit->second.sum); | |
| 324 EXPECT_EQ(sumsq_value_rtt, sit->second.sum_squared); | |
| 325 EXPECT_LE(min_value, sit->second.min); | |
| 326 EXPECT_GE(max_value, sit->second.max); | |
| 327 sit = stats_map.find(kPacketLoss); | |
| 328 EXPECT_EQ(sum_value_pl, sit->second.sum); | |
| 329 EXPECT_EQ(sumsq_value_pl, sit->second.sum_squared); | |
| 330 EXPECT_LE(min_value, sit->second.min); | |
| 331 EXPECT_GE(max_value, sit->second.max); | |
| 332 sit = stats_map.find(kJitterMs); | |
| 333 EXPECT_EQ(sumsq_value_jitter, sit->second.sum_squared); | |
| 334 EXPECT_LE(min_value, sit->second.min); | |
| 335 EXPECT_GE(max_value, sit->second.max); | |
| 336 } | 266 } |
| 337 | 267 |
| 338 TEST_F(LoggingImplTest, MultipleRawEventSubscribers) { | 268 TEST_F(LoggingImplTest, MultipleRawEventSubscribers) { |
| 339 SimpleEventSubscriber event_subscriber_2; | 269 SimpleEventSubscriber event_subscriber_2; |
| 340 | 270 |
| 341 // Now logging_ has two subscribers. | 271 // Now logging_ has two subscribers. |
| 342 logging_->AddRawEventSubscriber(&event_subscriber_2); | 272 logging_.AddRawEventSubscriber(&event_subscriber_2); |
| 343 | 273 |
| 344 logging_->InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, | 274 logging_.InsertFrameEvent(testing_clock_.NowTicks(), kAudioFrameCaptured, |
| 345 /*rtp_timestamp*/ 0u, | 275 /*rtp_timestamp*/ 0u, |
| 346 /*frame_id*/ 0u); | 276 /*frame_id*/ 0u); |
| 347 | 277 |
| 348 std::vector<FrameEvent> frame_events; | 278 std::vector<FrameEvent> frame_events; |
| 349 event_subscriber_.GetFrameEventsAndReset(&frame_events); | 279 event_subscriber_.GetFrameEventsAndReset(&frame_events); |
| 350 EXPECT_EQ(1u, frame_events.size()); | 280 EXPECT_EQ(1u, frame_events.size()); |
| 351 frame_events.clear(); | 281 frame_events.clear(); |
| 352 event_subscriber_2.GetFrameEventsAndReset(&frame_events); | 282 event_subscriber_2.GetFrameEventsAndReset(&frame_events); |
| 353 EXPECT_EQ(1u, frame_events.size()); | 283 EXPECT_EQ(1u, frame_events.size()); |
| 354 | 284 |
| 355 logging_->RemoveRawEventSubscriber(&event_subscriber_2); | 285 logging_.RemoveRawEventSubscriber(&event_subscriber_2); |
| 356 } | 286 } |
| 357 | 287 |
| 358 } // namespace cast | 288 } // namespace cast |
| 359 } // namespace media | 289 } // namespace media |
| OLD | NEW |