Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2115)

Side by Side Diff: media/cast/rtp_receiver/receiver_stats_unittest.cc

Issue 250363002: [Cast] Clean-up RtpCastHeader and RtpParser, removing the last WebRTC dependency. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed hubbe's comment. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
11 #include "media/cast/rtp_receiver/receiver_stats.h" 11 #include "media/cast/rtp_receiver/receiver_stats.h"
12 #include "media/cast/rtp_receiver/rtp_receiver_defines.h" 12 #include "media/cast/rtp_receiver/rtp_receiver_defines.h"
13 13
14 namespace media { 14 namespace media {
15 namespace cast { 15 namespace cast {
16 16
17 static const int64 kStartMillisecond = INT64_C(12345678900000); 17 static const int64 kStartMillisecond = INT64_C(12345678900000);
18 static const uint32 kStdTimeIncrementMs = 33; 18 static const uint32 kStdTimeIncrementMs = 33;
19 19
20 class ReceiverStatsTest : public ::testing::Test { 20 class ReceiverStatsTest : public ::testing::Test {
21 protected: 21 protected:
22 ReceiverStatsTest() 22 ReceiverStatsTest()
23 : stats_(&testing_clock_), 23 : stats_(&testing_clock_),
24 rtp_header_(),
25 fraction_lost_(0), 24 fraction_lost_(0),
26 cumulative_lost_(0), 25 cumulative_lost_(0),
27 extended_high_sequence_number_(0), 26 extended_high_sequence_number_(0),
28 jitter_(0) { 27 jitter_(0) {
29 testing_clock_.Advance( 28 testing_clock_.Advance(
30 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 29 base::TimeDelta::FromMilliseconds(kStartMillisecond));
31 start_time_ = testing_clock_.NowTicks(); 30 start_time_ = testing_clock_.NowTicks();
32 delta_increments_ = base::TimeDelta::FromMilliseconds(kStdTimeIncrementMs); 31 delta_increments_ = base::TimeDelta::FromMilliseconds(kStdTimeIncrementMs);
33 rtp_header_.webrtc.header.sequenceNumber = 0;
34 rtp_header_.webrtc.header.timestamp = 0;
35 } 32 }
36 virtual ~ReceiverStatsTest() {} 33 virtual ~ReceiverStatsTest() {}
37 34
38 uint32 ExpectedJitter(uint32 const_interval, int num_packets) { 35 uint32 ExpectedJitter(uint32 const_interval, int num_packets) {
39 float jitter = 0; 36 float jitter = 0;
40 // Assume timestamps have a constant kStdTimeIncrementMs interval. 37 // Assume timestamps have a constant kStdTimeIncrementMs interval.
41 float float_interval = 38 float float_interval =
42 static_cast<float>(const_interval - kStdTimeIncrementMs); 39 static_cast<float>(const_interval - kStdTimeIncrementMs);
43 for (int i = 0; i < num_packets; ++i) { 40 for (int i = 0; i < num_packets; ++i) {
44 jitter += (float_interval - jitter) / 16; 41 jitter += (float_interval - jitter) / 16;
(...skipping 23 matching lines...) Expand all
68 EXPECT_EQ(0u, cumulative_lost_); 65 EXPECT_EQ(0u, cumulative_lost_);
69 EXPECT_EQ(0u, extended_high_sequence_number_); 66 EXPECT_EQ(0u, extended_high_sequence_number_);
70 EXPECT_EQ(0u, jitter_); 67 EXPECT_EQ(0u, jitter_);
71 } 68 }
72 69
73 TEST_F(ReceiverStatsTest, LossCount) { 70 TEST_F(ReceiverStatsTest, LossCount) {
74 for (int i = 0; i < 300; ++i) { 71 for (int i = 0; i < 300; ++i) {
75 if (i % 4) 72 if (i % 4)
76 stats_.UpdateStatistics(rtp_header_); 73 stats_.UpdateStatistics(rtp_header_);
77 if (i % 3) { 74 if (i % 3) {
78 rtp_header_.webrtc.header.timestamp += 33 * 90; 75 rtp_header_.rtp_timestamp += 33 * 90;
79 } 76 }
80 ++rtp_header_.webrtc.header.sequenceNumber; 77 ++rtp_header_.sequence_number;
81 testing_clock_.Advance(delta_increments_); 78 testing_clock_.Advance(delta_increments_);
82 } 79 }
83 stats_.GetStatistics(&fraction_lost_, 80 stats_.GetStatistics(&fraction_lost_,
84 &cumulative_lost_, 81 &cumulative_lost_,
85 &extended_high_sequence_number_, 82 &extended_high_sequence_number_,
86 &jitter_); 83 &jitter_);
87 EXPECT_EQ(63u, fraction_lost_); 84 EXPECT_EQ(63u, fraction_lost_);
88 EXPECT_EQ(74u, cumulative_lost_); 85 EXPECT_EQ(74u, cumulative_lost_);
89 // Build extended sequence number. 86 // Build extended sequence number.
90 uint32 extended_seq_num = rtp_header_.webrtc.header.sequenceNumber - 1; 87 const uint32 extended_seq_num = rtp_header_.sequence_number - 1;
91 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_); 88 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_);
92 } 89 }
93 90
94 TEST_F(ReceiverStatsTest, NoLossWrap) { 91 TEST_F(ReceiverStatsTest, NoLossWrap) {
95 rtp_header_.webrtc.header.sequenceNumber = 65500; 92 rtp_header_.sequence_number = 65500;
96 for (int i = 0; i < 300; ++i) { 93 for (int i = 0; i < 300; ++i) {
97 stats_.UpdateStatistics(rtp_header_); 94 stats_.UpdateStatistics(rtp_header_);
98 if (i % 3) { 95 if (i % 3) {
99 rtp_header_.webrtc.header.timestamp += 33 * 90; 96 rtp_header_.rtp_timestamp += 33 * 90;
100 } 97 }
101 ++rtp_header_.webrtc.header.sequenceNumber; 98 ++rtp_header_.sequence_number;
102 testing_clock_.Advance(delta_increments_); 99 testing_clock_.Advance(delta_increments_);
103 } 100 }
104 stats_.GetStatistics(&fraction_lost_, 101 stats_.GetStatistics(&fraction_lost_,
105 &cumulative_lost_, 102 &cumulative_lost_,
106 &extended_high_sequence_number_, 103 &extended_high_sequence_number_,
107 &jitter_); 104 &jitter_);
108 EXPECT_EQ(0u, fraction_lost_); 105 EXPECT_EQ(0u, fraction_lost_);
109 EXPECT_EQ(0u, cumulative_lost_); 106 EXPECT_EQ(0u, cumulative_lost_);
110 // Build extended sequence number (one wrap cycle). 107 // Build extended sequence number (one wrap cycle).
111 uint32 extended_seq_num = 108 const uint32 extended_seq_num = (1 << 16) + rtp_header_.sequence_number - 1;
112 (1 << 16) + rtp_header_.webrtc.header.sequenceNumber - 1;
113 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_); 109 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_);
114 } 110 }
115 111
116 TEST_F(ReceiverStatsTest, LossCountWrap) { 112 TEST_F(ReceiverStatsTest, LossCountWrap) {
117 const uint32 start_sequence_number = 65500; 113 const uint32 kStartSequenceNumber = 65500;
118 rtp_header_.webrtc.header.sequenceNumber = start_sequence_number; 114 rtp_header_.sequence_number = kStartSequenceNumber;
119 for (int i = 0; i < 300; ++i) { 115 for (int i = 0; i < 300; ++i) {
120 if (i % 4) 116 if (i % 4)
121 stats_.UpdateStatistics(rtp_header_); 117 stats_.UpdateStatistics(rtp_header_);
122 if (i % 3) 118 if (i % 3)
123 // Update timestamp. 119 // Update timestamp.
124 ++rtp_header_.webrtc.header.timestamp; 120 ++rtp_header_.rtp_timestamp;
125 ++rtp_header_.webrtc.header.sequenceNumber; 121 ++rtp_header_.sequence_number;
126 testing_clock_.Advance(delta_increments_); 122 testing_clock_.Advance(delta_increments_);
127 } 123 }
128 stats_.GetStatistics(&fraction_lost_, 124 stats_.GetStatistics(&fraction_lost_,
129 &cumulative_lost_, 125 &cumulative_lost_,
130 &extended_high_sequence_number_, 126 &extended_high_sequence_number_,
131 &jitter_); 127 &jitter_);
132 EXPECT_EQ(63u, fraction_lost_); 128 EXPECT_EQ(63u, fraction_lost_);
133 EXPECT_EQ(74u, cumulative_lost_); 129 EXPECT_EQ(74u, cumulative_lost_);
134 // Build extended sequence number (one wrap cycle). 130 // Build extended sequence number (one wrap cycle).
135 uint32 extended_seq_num = 131 const uint32 extended_seq_num = (1 << 16) + rtp_header_.sequence_number - 1;
136 (1 << 16) + rtp_header_.webrtc.header.sequenceNumber - 1;
137 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_); 132 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_);
138 } 133 }
139 134
140 TEST_F(ReceiverStatsTest, BasicJitter) { 135 TEST_F(ReceiverStatsTest, BasicJitter) {
141 for (int i = 0; i < 300; ++i) { 136 for (int i = 0; i < 300; ++i) {
142 stats_.UpdateStatistics(rtp_header_); 137 stats_.UpdateStatistics(rtp_header_);
143 ++rtp_header_.webrtc.header.sequenceNumber; 138 ++rtp_header_.sequence_number;
144 rtp_header_.webrtc.header.timestamp += 33 * 90; 139 rtp_header_.rtp_timestamp += 33 * 90;
145 testing_clock_.Advance(delta_increments_); 140 testing_clock_.Advance(delta_increments_);
146 } 141 }
147 stats_.GetStatistics(&fraction_lost_, 142 stats_.GetStatistics(&fraction_lost_,
148 &cumulative_lost_, 143 &cumulative_lost_,
149 &extended_high_sequence_number_, 144 &extended_high_sequence_number_,
150 &jitter_); 145 &jitter_);
151 EXPECT_FALSE(fraction_lost_); 146 EXPECT_FALSE(fraction_lost_);
152 EXPECT_FALSE(cumulative_lost_); 147 EXPECT_FALSE(cumulative_lost_);
153 // Build extended sequence number (one wrap cycle). 148 // Build extended sequence number (one wrap cycle).
154 uint32 extended_seq_num = rtp_header_.webrtc.header.sequenceNumber - 1; 149 const uint32 extended_seq_num = rtp_header_.sequence_number - 1;
155 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_); 150 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_);
156 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs, 300), jitter_); 151 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs, 300), jitter_);
157 } 152 }
158 153
159 TEST_F(ReceiverStatsTest, NonTrivialJitter) { 154 TEST_F(ReceiverStatsTest, NonTrivialJitter) {
160 const int kAdditionalIncrement = 5; 155 const int kAdditionalIncrement = 5;
161 for (int i = 0; i < 300; ++i) { 156 for (int i = 0; i < 300; ++i) {
162 stats_.UpdateStatistics(rtp_header_); 157 stats_.UpdateStatistics(rtp_header_);
163 ++rtp_header_.webrtc.header.sequenceNumber; 158 ++rtp_header_.sequence_number;
164 rtp_header_.webrtc.header.timestamp += 33 * 90; 159 rtp_header_.rtp_timestamp += 33 * 90;
165 base::TimeDelta additional_delta = 160 base::TimeDelta additional_delta =
166 base::TimeDelta::FromMilliseconds(kAdditionalIncrement); 161 base::TimeDelta::FromMilliseconds(kAdditionalIncrement);
167 testing_clock_.Advance(delta_increments_ + additional_delta); 162 testing_clock_.Advance(delta_increments_ + additional_delta);
168 } 163 }
169 stats_.GetStatistics(&fraction_lost_, 164 stats_.GetStatistics(&fraction_lost_,
170 &cumulative_lost_, 165 &cumulative_lost_,
171 &extended_high_sequence_number_, 166 &extended_high_sequence_number_,
172 &jitter_); 167 &jitter_);
173 EXPECT_FALSE(fraction_lost_); 168 EXPECT_FALSE(fraction_lost_);
174 EXPECT_FALSE(cumulative_lost_); 169 EXPECT_FALSE(cumulative_lost_);
175 // Build extended sequence number (one wrap cycle). 170 // Build extended sequence number (one wrap cycle).
176 uint32 extended_seq_num = rtp_header_.webrtc.header.sequenceNumber - 1; 171 const uint32 extended_seq_num = rtp_header_.sequence_number - 1;
177 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_); 172 EXPECT_EQ(extended_seq_num, extended_high_sequence_number_);
178 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs + kAdditionalIncrement, 300), 173 EXPECT_EQ(ExpectedJitter(kStdTimeIncrementMs + kAdditionalIncrement, 300),
179 jitter_); 174 jitter_);
180 } 175 }
181 176
182 } // namespace cast 177 } // namespace cast
183 } // namespace media 178 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtp_receiver/receiver_stats.cc ('k') | media/cast/rtp_receiver/rtp_parser/rtp_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698