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 <gtest/gtest.h> | 5 #include <gtest/gtest.h> |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
11 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 12 #include "media/cast/constants.h" |
12 #include "media/cast/net/rtp/receiver_stats.h" | 13 #include "media/cast/net/rtp/receiver_stats.h" |
13 #include "media/cast/net/rtp/rtp_defines.h" | 14 #include "media/cast/net/rtp/rtp_defines.h" |
14 | 15 |
15 namespace media { | 16 namespace media { |
16 namespace cast { | 17 namespace cast { |
17 | 18 |
18 static const int64_t kStartMillisecond = INT64_C(12345678900000); | 19 static const int64_t kStartMillisecond = INT64_C(12345678900000); |
19 static const uint32_t kStdTimeIncrementMs = 33; | 20 static const uint32_t kStdTimeIncrementMs = 33; |
20 | 21 |
21 class ReceiverStatsTest : public ::testing::Test { | 22 class ReceiverStatsTest : public ::testing::Test { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 RtpReceiverStatistics s = stats_.GetStatistics(); | 55 RtpReceiverStatistics s = stats_.GetStatistics(); |
55 EXPECT_EQ(0u, s.fraction_lost); | 56 EXPECT_EQ(0u, s.fraction_lost); |
56 EXPECT_EQ(0u, s.cumulative_lost); | 57 EXPECT_EQ(0u, s.cumulative_lost); |
57 EXPECT_EQ(0u, s.extended_high_sequence_number); | 58 EXPECT_EQ(0u, s.extended_high_sequence_number); |
58 EXPECT_EQ(0u, s.jitter); | 59 EXPECT_EQ(0u, s.jitter); |
59 } | 60 } |
60 | 61 |
61 TEST_F(ReceiverStatsTest, LossCount) { | 62 TEST_F(ReceiverStatsTest, LossCount) { |
62 for (int i = 0; i < 300; ++i) { | 63 for (int i = 0; i < 300; ++i) { |
63 if (i % 4) | 64 if (i % 4) |
64 stats_.UpdateStatistics(rtp_header_); | 65 stats_.UpdateStatistics(rtp_header_, kVideoFrequency); |
65 if (i % 3) { | 66 if (i % 3) { |
66 rtp_header_.rtp_timestamp += 33 * 90; | 67 rtp_header_.rtp_timestamp += RtpTimeDelta::FromTimeDelta( |
| 68 base::TimeDelta::FromMilliseconds(33), kVideoFrequency); |
67 } | 69 } |
68 ++rtp_header_.sequence_number; | 70 ++rtp_header_.sequence_number; |
69 testing_clock_.Advance(delta_increments_); | 71 testing_clock_.Advance(delta_increments_); |
70 } | 72 } |
71 RtpReceiverStatistics s = stats_.GetStatistics(); | 73 RtpReceiverStatistics s = stats_.GetStatistics(); |
72 EXPECT_EQ(63u, s.fraction_lost); | 74 EXPECT_EQ(63u, s.fraction_lost); |
73 EXPECT_EQ(74u, s.cumulative_lost); | 75 EXPECT_EQ(74u, s.cumulative_lost); |
74 // Build extended sequence number. | 76 // Build extended sequence number. |
75 const uint32_t extended_seq_num = rtp_header_.sequence_number - 1; | 77 const uint32_t extended_seq_num = rtp_header_.sequence_number - 1; |
76 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); | 78 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); |
77 } | 79 } |
78 | 80 |
79 TEST_F(ReceiverStatsTest, NoLossWrap) { | 81 TEST_F(ReceiverStatsTest, NoLossWrap) { |
80 rtp_header_.sequence_number = 65500; | 82 rtp_header_.sequence_number = 65500; |
81 for (int i = 0; i < 300; ++i) { | 83 for (int i = 0; i < 300; ++i) { |
82 stats_.UpdateStatistics(rtp_header_); | 84 stats_.UpdateStatistics(rtp_header_, kVideoFrequency); |
83 if (i % 3) { | 85 if (i % 3) { |
84 rtp_header_.rtp_timestamp += 33 * 90; | 86 rtp_header_.rtp_timestamp += RtpTimeDelta::FromTimeDelta( |
| 87 base::TimeDelta::FromMilliseconds(33), kVideoFrequency); |
85 } | 88 } |
86 ++rtp_header_.sequence_number; | 89 ++rtp_header_.sequence_number; |
87 testing_clock_.Advance(delta_increments_); | 90 testing_clock_.Advance(delta_increments_); |
88 } | 91 } |
89 RtpReceiverStatistics s = stats_.GetStatistics(); | 92 RtpReceiverStatistics s = stats_.GetStatistics(); |
90 EXPECT_EQ(0u, s.fraction_lost); | 93 EXPECT_EQ(0u, s.fraction_lost); |
91 EXPECT_EQ(0u, s.cumulative_lost); | 94 EXPECT_EQ(0u, s.cumulative_lost); |
92 // Build extended sequence number (one wrap cycle). | 95 // Build extended sequence number (one wrap cycle). |
93 const uint32_t extended_seq_num = (1 << 16) + rtp_header_.sequence_number - 1; | 96 const uint32_t extended_seq_num = (1 << 16) + rtp_header_.sequence_number - 1; |
94 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); | 97 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); |
95 } | 98 } |
96 | 99 |
97 TEST_F(ReceiverStatsTest, LossCountWrap) { | 100 TEST_F(ReceiverStatsTest, LossCountWrap) { |
98 const uint32_t kStartSequenceNumber = 65500; | 101 const uint32_t kStartSequenceNumber = 65500; |
99 rtp_header_.sequence_number = kStartSequenceNumber; | 102 rtp_header_.sequence_number = kStartSequenceNumber; |
100 for (int i = 0; i < 300; ++i) { | 103 for (int i = 0; i < 300; ++i) { |
101 if (i % 4) | 104 if (i % 4) |
102 stats_.UpdateStatistics(rtp_header_); | 105 stats_.UpdateStatistics(rtp_header_, kVideoFrequency); |
103 if (i % 3) | 106 if (i % 3) |
104 // Update timestamp. | 107 rtp_header_.rtp_timestamp += RtpTimeDelta::FromTicks(1); |
105 ++rtp_header_.rtp_timestamp; | |
106 ++rtp_header_.sequence_number; | 108 ++rtp_header_.sequence_number; |
107 testing_clock_.Advance(delta_increments_); | 109 testing_clock_.Advance(delta_increments_); |
108 } | 110 } |
109 RtpReceiverStatistics s = stats_.GetStatistics(); | 111 RtpReceiverStatistics s = stats_.GetStatistics(); |
110 EXPECT_EQ(63u, s.fraction_lost); | 112 EXPECT_EQ(63u, s.fraction_lost); |
111 EXPECT_EQ(74u, s.cumulative_lost); | 113 EXPECT_EQ(74u, s.cumulative_lost); |
112 // Build extended sequence number (one wrap cycle). | 114 // Build extended sequence number (one wrap cycle). |
113 const uint32_t extended_seq_num = (1 << 16) + rtp_header_.sequence_number - 1; | 115 const uint32_t extended_seq_num = (1 << 16) + rtp_header_.sequence_number - 1; |
114 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); | 116 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); |
115 } | 117 } |
116 | 118 |
117 TEST_F(ReceiverStatsTest, BasicJitter) { | 119 TEST_F(ReceiverStatsTest, BasicJitter) { |
118 for (int i = 0; i < 300; ++i) { | 120 for (int i = 0; i < 300; ++i) { |
119 stats_.UpdateStatistics(rtp_header_); | 121 stats_.UpdateStatistics(rtp_header_, kVideoFrequency); |
120 ++rtp_header_.sequence_number; | 122 ++rtp_header_.sequence_number; |
121 rtp_header_.rtp_timestamp += 33 * 90; | 123 rtp_header_.rtp_timestamp += RtpTimeDelta::FromTimeDelta( |
| 124 base::TimeDelta::FromMilliseconds(33), kVideoFrequency); |
122 testing_clock_.Advance(delta_increments_); | 125 testing_clock_.Advance(delta_increments_); |
123 } | 126 } |
124 RtpReceiverStatistics s = stats_.GetStatistics(); | 127 RtpReceiverStatistics s = stats_.GetStatistics(); |
125 EXPECT_FALSE(s.fraction_lost); | 128 EXPECT_FALSE(s.fraction_lost); |
126 EXPECT_FALSE(s.cumulative_lost); | 129 EXPECT_FALSE(s.cumulative_lost); |
127 // Build extended sequence number (one wrap cycle). | 130 // Build extended sequence number (one wrap cycle). |
128 const uint32_t extended_seq_num = rtp_header_.sequence_number - 1; | 131 const uint32_t extended_seq_num = rtp_header_.sequence_number - 1; |
129 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); | 132 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); |
130 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs, 300), s.jitter); | 133 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs, 300), s.jitter); |
131 } | 134 } |
132 | 135 |
133 TEST_F(ReceiverStatsTest, NonTrivialJitter) { | 136 TEST_F(ReceiverStatsTest, NonTrivialJitter) { |
134 const int kAdditionalIncrement = 5; | 137 const int kAdditionalIncrement = 5; |
135 for (int i = 0; i < 300; ++i) { | 138 for (int i = 0; i < 300; ++i) { |
136 stats_.UpdateStatistics(rtp_header_); | 139 stats_.UpdateStatistics(rtp_header_, kVideoFrequency); |
137 ++rtp_header_.sequence_number; | 140 ++rtp_header_.sequence_number; |
138 rtp_header_.rtp_timestamp += 33 * 90; | 141 rtp_header_.rtp_timestamp += RtpTimeDelta::FromTimeDelta( |
| 142 base::TimeDelta::FromMilliseconds(33), kVideoFrequency); |
139 base::TimeDelta additional_delta = | 143 base::TimeDelta additional_delta = |
140 base::TimeDelta::FromMilliseconds(kAdditionalIncrement); | 144 base::TimeDelta::FromMilliseconds(kAdditionalIncrement); |
141 testing_clock_.Advance(delta_increments_ + additional_delta); | 145 testing_clock_.Advance(delta_increments_ + additional_delta); |
142 } | 146 } |
143 RtpReceiverStatistics s = stats_.GetStatistics(); | 147 RtpReceiverStatistics s = stats_.GetStatistics(); |
144 EXPECT_FALSE(s.fraction_lost); | 148 EXPECT_FALSE(s.fraction_lost); |
145 EXPECT_FALSE(s.cumulative_lost); | 149 EXPECT_FALSE(s.cumulative_lost); |
146 // Build extended sequence number (one wrap cycle). | 150 // Build extended sequence number (one wrap cycle). |
147 const uint32_t extended_seq_num = rtp_header_.sequence_number - 1; | 151 const uint32_t extended_seq_num = rtp_header_.sequence_number - 1; |
148 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); | 152 EXPECT_EQ(extended_seq_num, s.extended_high_sequence_number); |
149 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs + kAdditionalIncrement, 300), | 153 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs + kAdditionalIncrement, 300), |
150 s.jitter); | 154 s.jitter); |
151 } | 155 } |
152 | 156 |
153 } // namespace cast | 157 } // namespace cast |
154 } // namespace media | 158 } // namespace media |
OLD | NEW |