Chromium Code Reviews| Index: media/cast/logging/logging_unittest.cc |
| diff --git a/media/cast/logging/logging_unittest.cc b/media/cast/logging/logging_unittest.cc |
| index 75915de293c0d4823292cdeb0ddee1fcc086f5fa..51ebfa9707980f2be02dd4e33a5fd1398d52986e 100644 |
| --- a/media/cast/logging/logging_unittest.cc |
| +++ b/media/cast/logging/logging_unittest.cc |
| @@ -3,6 +3,7 @@ |
| // found in the LICENSE file. |
| #include <gtest/gtest.h> |
| +#include <math.h> |
| #include "base/rand_util.h" |
| #include "base/test/simple_test_tick_clock.h" |
| @@ -42,6 +43,8 @@ class TestLogging : public ::testing::Test { |
| scoped_refptr<test::FakeTaskRunner> task_runner_; |
| scoped_ptr<LoggingImpl> logging_; |
| base::SimpleTestTickClock testing_clock_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestLogging); |
| }; |
| TEST_F(TestLogging, BasicFrameLogging) { |
| @@ -49,31 +52,35 @@ TEST_F(TestLogging, BasicFrameLogging) { |
| base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
| uint32 rtp_timestamp = 0; |
| uint32 frame_id = 0; |
| + base::TimeTicks now; |
| do { |
| - logging_->InsertFrameEvent(testing_clock_.NowTicks(), |
| - kAudioFrameCaptured, rtp_timestamp, frame_id); |
| + now = testing_clock_.NowTicks(); |
| + logging_->InsertFrameEvent(now, kAudioFrameCaptured, rtp_timestamp, |
| + frame_id); |
| testing_clock_.Advance( |
| base::TimeDelta::FromMilliseconds(kFrameIntervalMs)); |
| rtp_timestamp += kFrameIntervalMs * 90; |
| ++frame_id; |
| - time_interval = testing_clock_.NowTicks() - start_time; |
| + time_interval = now - start_time; |
| } while (time_interval.InSeconds() < kIntervalTime1S); |
| + base::TimeTicks end_time = now; |
| // Get logging data. |
| FrameRawMap frame_map = logging_->GetFrameRawData(); |
| // Size of map should be equal to the number of frames logged. |
| EXPECT_EQ(frame_id, frame_map.size()); |
| // Verify stats. |
| - const FrameStatsMap* frame_stats = |
| - logging_->GetFrameStatsData(testing_clock_.NowTicks()); |
| + FrameStatsMap frame_stats = logging_->GetFrameStatsData(); |
| // Size of stats equals the number of events. |
| - EXPECT_EQ(1u, frame_stats->size()); |
| - FrameStatsMap::const_iterator it = frame_stats->find(kAudioFrameCaptured); |
| - EXPECT_TRUE(it != frame_stats->end()); |
| - EXPECT_NEAR(30.3, it->second->framerate_fps, 0.1); |
| - EXPECT_EQ(0, it->second->bitrate_kbps); |
| - EXPECT_EQ(0, it->second->max_delay_ms); |
| - EXPECT_EQ(0, it->second->min_delay_ms); |
| - EXPECT_EQ(0, it->second->avg_delay_ms); |
| + EXPECT_EQ(1u, frame_stats.size()); |
| + FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); |
| + EXPECT_TRUE(it != frame_stats.end()); |
| + EXPECT_EQ(0, it->second.max_delay.InMilliseconds()); |
| + EXPECT_EQ(0, it->second.min_delay.InMilliseconds()); |
| + EXPECT_EQ(start_time, it->second.first_event_time); |
| + EXPECT_EQ(end_time, it->second.last_event_time); |
| + EXPECT_EQ(0u, it->second.sum_size); |
| + // Number of events is equal to the number of frames. |
| + EXPECT_EQ(static_cast<int>(frame_id), it->second.event_counter); |
| } |
| TEST_F(TestLogging, FrameLoggingWithSize) { |
| @@ -84,9 +91,11 @@ TEST_F(TestLogging, FrameLoggingWithSize) { |
| base::TimeDelta time_interval = testing_clock_.NowTicks() - start_time; |
| uint32 rtp_timestamp = 0; |
| uint32 frame_id = 0; |
| + size_t sum_size = 0; |
| do { |
| int size = kBaseFrameSizeBytes + |
| base::RandInt(-kRandomSizeInterval, kRandomSizeInterval); |
| + sum_size += static_cast<size_t>(size); |
| logging_->InsertFrameEventWithSize(testing_clock_.NowTicks(), |
| kAudioFrameCaptured, rtp_timestamp, frame_id, size); |
| testing_clock_.Advance( |
| @@ -100,18 +109,15 @@ TEST_F(TestLogging, FrameLoggingWithSize) { |
| // Size of map should be equal to the number of frames logged. |
| EXPECT_EQ(frame_id, frame_map.size()); |
| // Verify stats. |
| - const FrameStatsMap* frame_stats = |
| - logging_->GetFrameStatsData(testing_clock_.NowTicks()); |
| + FrameStatsMap frame_stats = logging_->GetFrameStatsData(); |
| // Size of stats equals the number of events. |
| - EXPECT_EQ(1u, frame_stats->size()); |
| - FrameStatsMap::const_iterator it = frame_stats->find(kAudioFrameCaptured); |
| - EXPECT_TRUE(it != frame_stats->end()); |
| - EXPECT_NEAR(30.3, it->second->framerate_fps, 0.1); |
| - EXPECT_NEAR(8 * kBaseFrameSizeBytes / (kFrameIntervalMs * 1000), |
| - it->second->bitrate_kbps, kRandomSizeInterval); |
| - EXPECT_EQ(0, it->second->max_delay_ms); |
| - EXPECT_EQ(0, it->second->min_delay_ms); |
| - EXPECT_EQ(0, it->second->avg_delay_ms); |
| + EXPECT_EQ(1u, frame_stats.size()); |
| + FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); |
| + EXPECT_TRUE(it != frame_stats.end()); |
| + EXPECT_EQ(0, it->second.max_delay.InMilliseconds()); |
| + EXPECT_EQ(0, it->second.min_delay.InMilliseconds()); |
| + EXPECT_EQ(0, it->second.sum_delay.InMilliseconds()); |
| + EXPECT_EQ(sum_size, it->second.sum_size); |
| } |
| TEST_F(TestLogging, FrameLoggingWithDelay) { |
| @@ -139,18 +145,15 @@ TEST_F(TestLogging, FrameLoggingWithDelay) { |
| // Size of map should be equal to the number of frames logged. |
| EXPECT_EQ(frame_id, frame_map.size()); |
| // Verify stats. |
| - const FrameStatsMap* frame_stats = |
| - logging_->GetFrameStatsData(testing_clock_.NowTicks()); |
| + FrameStatsMap frame_stats = logging_->GetFrameStatsData(); |
| // Size of stats equals the number of events. |
| - EXPECT_EQ(1u, frame_stats->size()); |
| - FrameStatsMap::const_iterator it = frame_stats->find(kAudioFrameCaptured); |
| - EXPECT_TRUE(it != frame_stats->end()); |
| - EXPECT_NEAR(30.3, it->second->framerate_fps, 0.1); |
| - EXPECT_EQ(0, it->second->bitrate_kbps); |
| - EXPECT_GE(kPlayoutDelayMs + kRandomSizeInterval, it->second->max_delay_ms); |
| - EXPECT_LE(kPlayoutDelayMs - kRandomSizeInterval, it->second->min_delay_ms); |
| - EXPECT_NEAR(kPlayoutDelayMs, it->second->avg_delay_ms, |
| - 0.2 * kRandomSizeInterval); |
| + EXPECT_EQ(1u, frame_stats.size()); |
| + FrameStatsMap::const_iterator it = frame_stats.find(kAudioFrameCaptured); |
| + EXPECT_TRUE(it != frame_stats.end()); |
| + EXPECT_GE(kPlayoutDelayMs + kRandomSizeInterval, |
| + it->second.max_delay.InMilliseconds()); |
| + EXPECT_LE(kPlayoutDelayMs - kRandomSizeInterval, |
| + it->second.min_delay.InMilliseconds()); |
| } |
| TEST_F(TestLogging, MultipleEventFrameLogging) { |
| @@ -210,37 +213,54 @@ TEST_F(TestLogging, PacketLogging) { |
| // Size of map should be equal to the number of frames logged. |
| EXPECT_EQ(frame_id, raw_map.size()); |
| // Verify stats. |
| - const PacketStatsMap* stats_map = |
| - logging_->GetPacketStatsData(testing_clock_.NowTicks()); |
| + PacketStatsMap stats_map = logging_->GetPacketStatsData(); |
| // Size of stats equals the number of events. |
| - EXPECT_EQ(1u, stats_map->size()); |
| - PacketStatsMap::const_iterator it = stats_map->find(kPacketSentToPacer); |
| - EXPECT_TRUE(it != stats_map->end()); |
| - // We only store the bitrate as a packet statistic. |
| - EXPECT_NEAR(8 * kNumPacketsPerFrame * kBaseSize / (kFrameIntervalMs * 1000), |
| - it->second, kSizeInterval); |
| + EXPECT_EQ(1u, stats_map.size()); |
| + PacketStatsMap::const_iterator it = stats_map.find(kPacketSentToPacer); |
| + EXPECT_TRUE(it != stats_map.end()); |
| } |
| TEST_F(TestLogging, GenericLogging) { |
| // Insert multiple generic types. |
| - const size_t kNumRuns = 1000; |
| - const int kBaseValue = 20; |
| + const size_t kNumRuns = 20;//1000; |
| + //const int kBaseValue = 20; |
| + int sum_value_rtt = 0; |
| + int sum_value_pl = 0; |
| + int sum_value_jitter = 0; |
| + int64 sumsq_value_rtt = 0; |
| + int64 sumsq_value_pl = 0; |
| + int64 sumsq_value_jitter = 0; |
| + int min_value, max_value; |
| for (size_t i = 0; i < kNumRuns; ++i) { |
| - int value = kBaseValue + base::RandInt(-5, 5); |
| + int value = 1;//kBaseValue + base::RandInt(-5, 5); |
|
imcheng
2014/01/23 21:17:18
nit: rm comment
mikhal1
2014/01/23 23:02:17
Done.
|
| + sum_value_rtt += value; |
| + sumsq_value_rtt += pow(value, 2); |
| logging_->InsertGenericEvent(testing_clock_.NowTicks(), kRttMs, value); |
| if (i % 2) { |
| logging_->InsertGenericEvent(testing_clock_.NowTicks(), kPacketLoss, |
| value); |
| + sum_value_pl += value; |
| + sumsq_value_pl += pow(value, 2); |
| } |
| if (!(i % 4)) { |
| logging_->InsertGenericEvent(testing_clock_.NowTicks(), kJitterMs, value); |
| + sum_value_jitter += value; |
| + sumsq_value_jitter += pow(value, 2); |
| + } |
| + if (i == 0) { |
| + min_value = value; |
| + max_value = value; |
| + } else if (min_value > value) { |
| + min_value = value; |
| + } else if (max_value < value) { |
| + max_value = value; |
| } |
| } |
| GenericRawMap raw_map = logging_->GetGenericRawData(); |
| - const GenericStatsMap* stats_map = logging_->GetGenericStatsData(); |
| + GenericStatsMap stats_map = logging_->GetGenericStatsData(); |
| // Size of generic map = number of different events. |
| EXPECT_EQ(3u, raw_map.size()); |
| - EXPECT_EQ(3u, stats_map->size()); |
| + EXPECT_EQ(3u, stats_map.size()); |
| // Raw events - size of internal map = number of calls. |
| GenericRawMap::iterator rit = raw_map.find(kRttMs); |
| EXPECT_EQ(kNumRuns, rit->second.value.size()); |
| @@ -251,13 +271,21 @@ TEST_F(TestLogging, GenericLogging) { |
| rit = raw_map.find(kJitterMs); |
| EXPECT_EQ(kNumRuns / 4, rit->second.value.size()); |
| EXPECT_EQ(kNumRuns / 4, rit->second.timestamp.size()); |
| - // Stats - one value per event. |
| - GenericStatsMap::const_iterator sit = stats_map->find(kRttMs); |
| - EXPECT_NEAR(kBaseValue, sit->second, 2.5); |
| - sit = stats_map->find(kPacketLoss); |
| - EXPECT_NEAR(kBaseValue, sit->second, 2.5); |
| - sit = stats_map->find(kJitterMs); |
| - EXPECT_NEAR(kBaseValue, sit->second, 2.5); |
| + // Stats - one value per all events. |
| + GenericStatsMap::const_iterator sit = stats_map.find(kRttMs); |
| + EXPECT_EQ(sum_value_rtt, sit->second.sum); |
| + EXPECT_EQ(sumsq_value_rtt, sit->second.sum_squared); |
| + EXPECT_GE(min_value, sit->second.min); |
| + EXPECT_LE(max_value, sit->second.max); |
| + sit = stats_map.find(kPacketLoss); |
| + EXPECT_EQ(sum_value_pl, sit->second.sum); |
| + EXPECT_EQ(sumsq_value_pl, sit->second.sum_squared); |
| + EXPECT_GE(min_value, sit->second.min); |
| + EXPECT_LE(max_value, sit->second.max); |
| + sit = stats_map.find(kJitterMs); |
| + EXPECT_EQ(sumsq_value_jitter, sit->second.sum_squared); |
| + EXPECT_GE(min_value, sit->second.min); |
| + EXPECT_LE(max_value, sit->second.max); |
| } |
| TEST_F(TestLogging, RtcpMultipleEventFrameLogging) { |
| @@ -291,10 +319,10 @@ TEST_F(TestLogging, RtcpMultipleEventFrameLogging) { |
| EXPECT_EQ(frame_id, frame_map.size()); |
| // Multiple events captured per frame. |
| - AudioRtcpRawMap audio_rtcp = logging_->GetAudioRtcpRawData(); |
| + AudioRtcpRawMap audio_rtcp = logging_->GetAndResetAudioRtcpRawData(); |
| EXPECT_EQ(0u, audio_rtcp.size()); |
| - VideoRtcpRawMap video_rtcp = logging_->GetVideoRtcpRawData(); |
| + VideoRtcpRawMap video_rtcp = logging_->GetAndResetVideoRtcpRawData(); |
| EXPECT_EQ((frame_id + 1) / 2, video_rtcp.size()); |
| } |