OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 // This file includes unit tests for SendStatisticsProxy. | 11 // This file includes unit tests for SendStatisticsProxy. |
12 #include "webrtc/video/send_statistics_proxy.h" | 12 #include "webrtc/video/send_statistics_proxy.h" |
13 | 13 |
14 #include <map> | 14 #include <map> |
15 #include <memory> | 15 #include <memory> |
16 #include <string> | 16 #include <string> |
17 #include <vector> | 17 #include <vector> |
18 | 18 |
19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
20 #include "webrtc/system_wrappers/include/metrics.h" | 20 #include "webrtc/system_wrappers/include/metrics.h" |
21 #include "webrtc/test/histogram.h" | 21 #include "webrtc/test/histogram.h" |
22 | 22 |
23 namespace webrtc { | 23 namespace webrtc { |
| 24 namespace { |
| 25 const int64_t kMaxPacketDelayMs = 11000; |
| 26 } // namespace |
24 | 27 |
25 static const uint32_t kFirstSsrc = 17; | 28 static const uint32_t kFirstSsrc = 17; |
26 static const uint32_t kSecondSsrc = 42; | 29 static const uint32_t kSecondSsrc = 42; |
27 static const uint32_t kFirstRtxSsrc = 18; | 30 static const uint32_t kFirstRtxSsrc = 18; |
28 static const uint32_t kSecondRtxSsrc = 43; | 31 static const uint32_t kSecondRtxSsrc = 43; |
29 | 32 |
30 class SendStatisticsProxyTest : public ::testing::Test { | 33 class SendStatisticsProxyTest : public ::testing::Test { |
31 public: | 34 public: |
32 SendStatisticsProxyTest() | 35 SendStatisticsProxyTest() |
33 : fake_clock_(1234), config_(GetTestConfig()), avg_delay_ms_(0), | 36 : fake_clock_(1234), config_(GetTestConfig()), avg_delay_ms_(0), |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 VideoSendStream::Config config_; | 102 VideoSendStream::Config config_; |
100 int avg_delay_ms_; | 103 int avg_delay_ms_; |
101 int max_delay_ms_; | 104 int max_delay_ms_; |
102 VideoSendStream::Stats expected_; | 105 VideoSendStream::Stats expected_; |
103 typedef std::map<uint32_t, VideoSendStream::StreamStats>::const_iterator | 106 typedef std::map<uint32_t, VideoSendStream::StreamStats>::const_iterator |
104 StreamIterator; | 107 StreamIterator; |
105 }; | 108 }; |
106 | 109 |
107 TEST_F(SendStatisticsProxyTest, RtcpStatistics) { | 110 TEST_F(SendStatisticsProxyTest, RtcpStatistics) { |
108 RtcpStatisticsCallback* callback = statistics_proxy_.get(); | 111 RtcpStatisticsCallback* callback = statistics_proxy_.get(); |
109 for (std::vector<uint32_t>::const_iterator it = config_.rtp.ssrcs.begin(); | 112 for (const auto& ssrc : config_.rtp.ssrcs) { |
110 it != config_.rtp.ssrcs.end(); | |
111 ++it) { | |
112 const uint32_t ssrc = *it; | |
113 VideoSendStream::StreamStats& ssrc_stats = expected_.substreams[ssrc]; | 113 VideoSendStream::StreamStats& ssrc_stats = expected_.substreams[ssrc]; |
114 | 114 |
115 // Add statistics with some arbitrary, but unique, numbers. | 115 // Add statistics with some arbitrary, but unique, numbers. |
116 uint32_t offset = ssrc * sizeof(RtcpStatistics); | 116 uint32_t offset = ssrc * sizeof(RtcpStatistics); |
117 ssrc_stats.rtcp_stats.cumulative_lost = offset; | 117 ssrc_stats.rtcp_stats.cumulative_lost = offset; |
118 ssrc_stats.rtcp_stats.extended_max_sequence_number = offset + 1; | 118 ssrc_stats.rtcp_stats.extended_max_sequence_number = offset + 1; |
119 ssrc_stats.rtcp_stats.fraction_lost = offset + 2; | 119 ssrc_stats.rtcp_stats.fraction_lost = offset + 2; |
120 ssrc_stats.rtcp_stats.jitter = offset + 3; | 120 ssrc_stats.rtcp_stats.jitter = offset + 3; |
121 callback->StatisticsUpdated(ssrc_stats.rtcp_stats, ssrc); | 121 callback->StatisticsUpdated(ssrc_stats.rtcp_stats, ssrc); |
122 } | 122 } |
123 for (std::vector<uint32_t>::const_iterator it = config_.rtp.rtx.ssrcs.begin(); | 123 for (const auto& ssrc : config_.rtp.rtx.ssrcs) { |
124 it != config_.rtp.rtx.ssrcs.end(); | |
125 ++it) { | |
126 const uint32_t ssrc = *it; | |
127 VideoSendStream::StreamStats& ssrc_stats = expected_.substreams[ssrc]; | 124 VideoSendStream::StreamStats& ssrc_stats = expected_.substreams[ssrc]; |
128 | 125 |
129 // Add statistics with some arbitrary, but unique, numbers. | 126 // Add statistics with some arbitrary, but unique, numbers. |
130 uint32_t offset = ssrc * sizeof(RtcpStatistics); | 127 uint32_t offset = ssrc * sizeof(RtcpStatistics); |
131 ssrc_stats.rtcp_stats.cumulative_lost = offset; | 128 ssrc_stats.rtcp_stats.cumulative_lost = offset; |
132 ssrc_stats.rtcp_stats.extended_max_sequence_number = offset + 1; | 129 ssrc_stats.rtcp_stats.extended_max_sequence_number = offset + 1; |
133 ssrc_stats.rtcp_stats.fraction_lost = offset + 2; | 130 ssrc_stats.rtcp_stats.fraction_lost = offset + 2; |
134 ssrc_stats.rtcp_stats.jitter = offset + 3; | 131 ssrc_stats.rtcp_stats.jitter = offset + 3; |
135 callback->StatisticsUpdated(ssrc_stats.rtcp_stats, ssrc); | 132 callback->StatisticsUpdated(ssrc_stats.rtcp_stats, ssrc); |
136 } | 133 } |
(...skipping 20 matching lines...) Expand all Loading... |
157 statistics_proxy_->OnSuspendChange(true); | 154 statistics_proxy_->OnSuspendChange(true); |
158 EXPECT_TRUE(statistics_proxy_->GetStats().suspended); | 155 EXPECT_TRUE(statistics_proxy_->GetStats().suspended); |
159 | 156 |
160 // Verify that we can set it back to false again. | 157 // Verify that we can set it back to false again. |
161 statistics_proxy_->OnSuspendChange(false); | 158 statistics_proxy_->OnSuspendChange(false); |
162 EXPECT_FALSE(statistics_proxy_->GetStats().suspended); | 159 EXPECT_FALSE(statistics_proxy_->GetStats().suspended); |
163 } | 160 } |
164 | 161 |
165 TEST_F(SendStatisticsProxyTest, FrameCounts) { | 162 TEST_F(SendStatisticsProxyTest, FrameCounts) { |
166 FrameCountObserver* observer = statistics_proxy_.get(); | 163 FrameCountObserver* observer = statistics_proxy_.get(); |
167 for (std::vector<uint32_t>::const_iterator it = config_.rtp.ssrcs.begin(); | 164 for (const auto& ssrc : config_.rtp.ssrcs) { |
168 it != config_.rtp.ssrcs.end(); | |
169 ++it) { | |
170 const uint32_t ssrc = *it; | |
171 // Add statistics with some arbitrary, but unique, numbers. | 165 // Add statistics with some arbitrary, but unique, numbers. |
172 VideoSendStream::StreamStats& stats = expected_.substreams[ssrc]; | 166 VideoSendStream::StreamStats& stats = expected_.substreams[ssrc]; |
173 uint32_t offset = ssrc * sizeof(VideoSendStream::StreamStats); | 167 uint32_t offset = ssrc * sizeof(VideoSendStream::StreamStats); |
174 FrameCounts frame_counts; | 168 FrameCounts frame_counts; |
175 frame_counts.key_frames = offset; | 169 frame_counts.key_frames = offset; |
176 frame_counts.delta_frames = offset + 1; | 170 frame_counts.delta_frames = offset + 1; |
177 stats.frame_counts = frame_counts; | 171 stats.frame_counts = frame_counts; |
178 observer->FrameCountUpdated(frame_counts, ssrc); | 172 observer->FrameCountUpdated(frame_counts, ssrc); |
179 } | 173 } |
180 for (std::vector<uint32_t>::const_iterator it = config_.rtp.rtx.ssrcs.begin(); | 174 for (const auto& ssrc : config_.rtp.rtx.ssrcs) { |
181 it != config_.rtp.rtx.ssrcs.end(); | |
182 ++it) { | |
183 const uint32_t ssrc = *it; | |
184 // Add statistics with some arbitrary, but unique, numbers. | 175 // Add statistics with some arbitrary, but unique, numbers. |
185 VideoSendStream::StreamStats& stats = expected_.substreams[ssrc]; | 176 VideoSendStream::StreamStats& stats = expected_.substreams[ssrc]; |
186 uint32_t offset = ssrc * sizeof(VideoSendStream::StreamStats); | 177 uint32_t offset = ssrc * sizeof(VideoSendStream::StreamStats); |
187 FrameCounts frame_counts; | 178 FrameCounts frame_counts; |
188 frame_counts.key_frames = offset; | 179 frame_counts.key_frames = offset; |
189 frame_counts.delta_frames = offset + 1; | 180 frame_counts.delta_frames = offset + 1; |
190 stats.frame_counts = frame_counts; | 181 stats.frame_counts = frame_counts; |
191 observer->FrameCountUpdated(frame_counts, ssrc); | 182 observer->FrameCountUpdated(frame_counts, ssrc); |
192 } | 183 } |
193 | 184 |
194 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); | 185 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); |
195 ExpectEqual(expected_, stats); | 186 ExpectEqual(expected_, stats); |
196 } | 187 } |
197 | 188 |
198 TEST_F(SendStatisticsProxyTest, DataCounters) { | 189 TEST_F(SendStatisticsProxyTest, DataCounters) { |
199 StreamDataCountersCallback* callback = statistics_proxy_.get(); | 190 StreamDataCountersCallback* callback = statistics_proxy_.get(); |
200 for (std::vector<uint32_t>::const_iterator it = config_.rtp.ssrcs.begin(); | 191 for (const auto& ssrc : config_.rtp.ssrcs) { |
201 it != config_.rtp.ssrcs.end(); | |
202 ++it) { | |
203 const uint32_t ssrc = *it; | |
204 StreamDataCounters& counters = expected_.substreams[ssrc].rtp_stats; | 192 StreamDataCounters& counters = expected_.substreams[ssrc].rtp_stats; |
205 // Add statistics with some arbitrary, but unique, numbers. | 193 // Add statistics with some arbitrary, but unique, numbers. |
206 size_t offset = ssrc * sizeof(StreamDataCounters); | 194 size_t offset = ssrc * sizeof(StreamDataCounters); |
207 uint32_t offset_uint32 = static_cast<uint32_t>(offset); | 195 uint32_t offset_uint32 = static_cast<uint32_t>(offset); |
208 counters.transmitted.payload_bytes = offset; | 196 counters.transmitted.payload_bytes = offset; |
209 counters.transmitted.header_bytes = offset + 1; | 197 counters.transmitted.header_bytes = offset + 1; |
210 counters.fec.packets = offset_uint32 + 2; | 198 counters.fec.packets = offset_uint32 + 2; |
211 counters.transmitted.padding_bytes = offset + 3; | 199 counters.transmitted.padding_bytes = offset + 3; |
212 counters.retransmitted.packets = offset_uint32 + 4; | 200 counters.retransmitted.packets = offset_uint32 + 4; |
213 counters.transmitted.packets = offset_uint32 + 5; | 201 counters.transmitted.packets = offset_uint32 + 5; |
214 callback->DataCountersUpdated(counters, ssrc); | 202 callback->DataCountersUpdated(counters, ssrc); |
215 } | 203 } |
216 for (std::vector<uint32_t>::const_iterator it = config_.rtp.rtx.ssrcs.begin(); | 204 for (const auto& ssrc : config_.rtp.rtx.ssrcs) { |
217 it != config_.rtp.rtx.ssrcs.end(); | |
218 ++it) { | |
219 const uint32_t ssrc = *it; | |
220 StreamDataCounters& counters = expected_.substreams[ssrc].rtp_stats; | 205 StreamDataCounters& counters = expected_.substreams[ssrc].rtp_stats; |
221 // Add statistics with some arbitrary, but unique, numbers. | 206 // Add statistics with some arbitrary, but unique, numbers. |
222 size_t offset = ssrc * sizeof(StreamDataCounters); | 207 size_t offset = ssrc * sizeof(StreamDataCounters); |
223 uint32_t offset_uint32 = static_cast<uint32_t>(offset); | 208 uint32_t offset_uint32 = static_cast<uint32_t>(offset); |
224 counters.transmitted.payload_bytes = offset; | 209 counters.transmitted.payload_bytes = offset; |
225 counters.transmitted.header_bytes = offset + 1; | 210 counters.transmitted.header_bytes = offset + 1; |
226 counters.fec.packets = offset_uint32 + 2; | 211 counters.fec.packets = offset_uint32 + 2; |
227 counters.transmitted.padding_bytes = offset + 3; | 212 counters.transmitted.padding_bytes = offset + 3; |
228 counters.retransmitted.packets = offset_uint32 + 4; | 213 counters.retransmitted.packets = offset_uint32 + 4; |
229 counters.transmitted.packets = offset_uint32 + 5; | 214 counters.transmitted.packets = offset_uint32 + 5; |
230 callback->DataCountersUpdated(counters, ssrc); | 215 callback->DataCountersUpdated(counters, ssrc); |
231 } | 216 } |
232 | 217 |
233 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); | 218 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); |
234 ExpectEqual(expected_, stats); | 219 ExpectEqual(expected_, stats); |
235 } | 220 } |
236 | 221 |
237 TEST_F(SendStatisticsProxyTest, Bitrate) { | 222 TEST_F(SendStatisticsProxyTest, Bitrate) { |
238 BitrateStatisticsObserver* observer = statistics_proxy_.get(); | 223 BitrateStatisticsObserver* observer = statistics_proxy_.get(); |
239 for (std::vector<uint32_t>::const_iterator it = config_.rtp.ssrcs.begin(); | 224 for (const auto& ssrc : config_.rtp.ssrcs) { |
240 it != config_.rtp.ssrcs.end(); | |
241 ++it) { | |
242 const uint32_t ssrc = *it; | |
243 BitrateStatistics total; | 225 BitrateStatistics total; |
244 BitrateStatistics retransmit; | 226 BitrateStatistics retransmit; |
245 // Use ssrc as bitrate_bps to get a unique value for each stream. | 227 // Use ssrc as bitrate_bps to get a unique value for each stream. |
246 total.bitrate_bps = ssrc; | 228 total.bitrate_bps = ssrc; |
247 retransmit.bitrate_bps = ssrc + 1; | 229 retransmit.bitrate_bps = ssrc + 1; |
248 observer->Notify(total, retransmit, ssrc); | 230 observer->Notify(total, retransmit, ssrc); |
249 expected_.substreams[ssrc].total_bitrate_bps = total.bitrate_bps; | 231 expected_.substreams[ssrc].total_bitrate_bps = total.bitrate_bps; |
250 expected_.substreams[ssrc].retransmit_bitrate_bps = retransmit.bitrate_bps; | 232 expected_.substreams[ssrc].retransmit_bitrate_bps = retransmit.bitrate_bps; |
251 } | 233 } |
252 for (std::vector<uint32_t>::const_iterator it = config_.rtp.rtx.ssrcs.begin(); | 234 for (const auto& ssrc : config_.rtp.rtx.ssrcs) { |
253 it != config_.rtp.rtx.ssrcs.end(); | |
254 ++it) { | |
255 const uint32_t ssrc = *it; | |
256 BitrateStatistics total; | 235 BitrateStatistics total; |
257 BitrateStatistics retransmit; | 236 BitrateStatistics retransmit; |
258 // Use ssrc as bitrate_bps to get a unique value for each stream. | 237 // Use ssrc as bitrate_bps to get a unique value for each stream. |
259 total.bitrate_bps = ssrc; | 238 total.bitrate_bps = ssrc; |
260 retransmit.bitrate_bps = ssrc + 1; | 239 retransmit.bitrate_bps = ssrc + 1; |
261 observer->Notify(total, retransmit, ssrc); | 240 observer->Notify(total, retransmit, ssrc); |
262 expected_.substreams[ssrc].total_bitrate_bps = total.bitrate_bps; | 241 expected_.substreams[ssrc].total_bitrate_bps = total.bitrate_bps; |
263 expected_.substreams[ssrc].retransmit_bitrate_bps = retransmit.bitrate_bps; | 242 expected_.substreams[ssrc].retransmit_bitrate_bps = retransmit.bitrate_bps; |
264 } | 243 } |
265 | 244 |
266 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); | 245 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); |
267 ExpectEqual(expected_, stats); | 246 ExpectEqual(expected_, stats); |
268 } | 247 } |
269 | 248 |
270 TEST_F(SendStatisticsProxyTest, SendSideDelay) { | 249 TEST_F(SendStatisticsProxyTest, SendSideDelay) { |
271 SendSideDelayObserver* observer = statistics_proxy_.get(); | 250 SendSideDelayObserver* observer = statistics_proxy_.get(); |
272 for (std::vector<uint32_t>::const_iterator it = config_.rtp.ssrcs.begin(); | 251 for (const auto& ssrc : config_.rtp.ssrcs) { |
273 it != config_.rtp.ssrcs.end(); | |
274 ++it) { | |
275 const uint32_t ssrc = *it; | |
276 // Use ssrc as avg_delay_ms and max_delay_ms to get a unique value for each | 252 // Use ssrc as avg_delay_ms and max_delay_ms to get a unique value for each |
277 // stream. | 253 // stream. |
278 int avg_delay_ms = ssrc; | 254 int avg_delay_ms = ssrc; |
279 int max_delay_ms = ssrc + 1; | 255 int max_delay_ms = ssrc + 1; |
280 observer->SendSideDelayUpdated(avg_delay_ms, max_delay_ms, ssrc); | 256 observer->SendSideDelayUpdated(avg_delay_ms, max_delay_ms, ssrc); |
281 expected_.substreams[ssrc].avg_delay_ms = avg_delay_ms; | 257 expected_.substreams[ssrc].avg_delay_ms = avg_delay_ms; |
282 expected_.substreams[ssrc].max_delay_ms = max_delay_ms; | 258 expected_.substreams[ssrc].max_delay_ms = max_delay_ms; |
283 } | 259 } |
284 for (std::vector<uint32_t>::const_iterator it = config_.rtp.rtx.ssrcs.begin(); | 260 for (const auto& ssrc : config_.rtp.rtx.ssrcs) { |
285 it != config_.rtp.rtx.ssrcs.end(); | |
286 ++it) { | |
287 const uint32_t ssrc = *it; | |
288 // Use ssrc as avg_delay_ms and max_delay_ms to get a unique value for each | 261 // Use ssrc as avg_delay_ms and max_delay_ms to get a unique value for each |
289 // stream. | 262 // stream. |
290 int avg_delay_ms = ssrc; | 263 int avg_delay_ms = ssrc; |
291 int max_delay_ms = ssrc + 1; | 264 int max_delay_ms = ssrc + 1; |
292 observer->SendSideDelayUpdated(avg_delay_ms, max_delay_ms, ssrc); | 265 observer->SendSideDelayUpdated(avg_delay_ms, max_delay_ms, ssrc); |
293 expected_.substreams[ssrc].avg_delay_ms = avg_delay_ms; | 266 expected_.substreams[ssrc].avg_delay_ms = avg_delay_ms; |
294 expected_.substreams[ssrc].max_delay_ms = max_delay_ms; | 267 expected_.substreams[ssrc].max_delay_ms = max_delay_ms; |
295 } | 268 } |
296 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); | 269 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); |
297 ExpectEqual(expected_, stats); | 270 ExpectEqual(expected_, stats); |
298 } | 271 } |
299 | 272 |
| 273 TEST_F(SendStatisticsProxyTest, VerifySendDelayHistogramStats) { |
| 274 test::ClearHistograms(); |
| 275 const int kMinRequiredSamples = 200; |
| 276 const int64_t kSendDelayInMs = 5; |
| 277 SendPacketObserver* observer = statistics_proxy_.get(); |
| 278 const uint32_t ssrc = *config_.rtp.ssrcs.begin(); |
| 279 |
| 280 uint16_t packet_id = 0; |
| 281 for (int i = 0; i < kMinRequiredSamples; ++i) { |
| 282 observer->OnSendPacket(++packet_id, fake_clock_.TimeInMilliseconds(), ssrc); |
| 283 // Packet sent to transport. |
| 284 fake_clock_.AdvanceTimeMilliseconds(kSendDelayInMs); |
| 285 EXPECT_TRUE(statistics_proxy_->OnSentPacket(packet_id)); |
| 286 } |
| 287 statistics_proxy_.reset(); |
| 288 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.SendDelayInMs")); |
| 289 EXPECT_EQ(kSendDelayInMs, |
| 290 test::LastHistogramSample("WebRTC.Video.SendDelayInMs")); |
| 291 } |
| 292 |
| 293 TEST_F(SendStatisticsProxyTest, OnSentPacket) { |
| 294 const uint16_t kPacketId = 2345; |
| 295 SendPacketObserver* observer = statistics_proxy_.get(); |
| 296 const uint32_t ssrc = *config_.rtp.ssrcs.begin(); |
| 297 |
| 298 observer->OnSendPacket(kPacketId, fake_clock_.TimeInMilliseconds(), ssrc); |
| 299 fake_clock_.AdvanceTimeMilliseconds(kMaxPacketDelayMs - 1); |
| 300 observer->OnSendPacket(kPacketId + 1, fake_clock_.TimeInMilliseconds(), ssrc); |
| 301 |
| 302 // Verify that packets are found. |
| 303 EXPECT_TRUE(statistics_proxy_->OnSentPacket(kPacketId)); |
| 304 EXPECT_TRUE(statistics_proxy_->OnSentPacket(kPacketId + 1)); |
| 305 // Packets found, should have been removed. |
| 306 EXPECT_FALSE(statistics_proxy_->OnSentPacket(kPacketId)); |
| 307 EXPECT_FALSE(statistics_proxy_->OnSentPacket(kPacketId + 1)); |
| 308 } |
| 309 |
| 310 TEST_F(SendStatisticsProxyTest, OnSendPacketRemovesOldPackets) { |
| 311 SendPacketObserver* observer = statistics_proxy_.get(); |
| 312 const uint32_t ssrc = *config_.rtp.ssrcs.begin(); |
| 313 const int64_t kCaptureTimeMs = fake_clock_.TimeInMilliseconds(); |
| 314 |
| 315 observer->OnSendPacket(0xffffu, kCaptureTimeMs, ssrc); |
| 316 observer->OnSendPacket(0u, kCaptureTimeMs, ssrc); |
| 317 observer->OnSendPacket(1u, kCaptureTimeMs + 1, ssrc); |
| 318 fake_clock_.AdvanceTimeMilliseconds(kMaxPacketDelayMs); // 0xffff, 0 -> old. |
| 319 observer->OnSendPacket(2u, kCaptureTimeMs + 2, ssrc); |
| 320 |
| 321 EXPECT_FALSE(statistics_proxy_->OnSentPacket(0xffffu)); // Old removed. |
| 322 EXPECT_FALSE(statistics_proxy_->OnSentPacket(0u)); // Old removed. |
| 323 EXPECT_TRUE(statistics_proxy_->OnSentPacket(1u)); |
| 324 EXPECT_TRUE(statistics_proxy_->OnSentPacket(2u)); |
| 325 } |
| 326 |
300 TEST_F(SendStatisticsProxyTest, OnEncodedFrameTimeMeasured) { | 327 TEST_F(SendStatisticsProxyTest, OnEncodedFrameTimeMeasured) { |
301 const int kEncodeTimeMs = 11; | 328 const int kEncodeTimeMs = 11; |
302 CpuOveruseMetrics metrics; | 329 CpuOveruseMetrics metrics; |
303 metrics.encode_usage_percent = 80; | 330 metrics.encode_usage_percent = 80; |
304 statistics_proxy_->OnEncodedFrameTimeMeasured(kEncodeTimeMs, metrics); | 331 statistics_proxy_->OnEncodedFrameTimeMeasured(kEncodeTimeMs, metrics); |
305 | 332 |
306 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); | 333 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); |
307 EXPECT_EQ(kEncodeTimeMs, stats.avg_encode_time_ms); | 334 EXPECT_EQ(kEncodeTimeMs, stats.avg_encode_time_ms); |
308 EXPECT_EQ(metrics.encode_usage_percent, stats.encode_usage_percent); | 335 EXPECT_EQ(metrics.encode_usage_percent, stats.encode_usage_percent); |
309 } | 336 } |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 | 731 |
705 EXPECT_EQ(1, test::NumHistogramSamples( | 732 EXPECT_EQ(1, test::NumHistogramSamples( |
706 "WebRTC.Video.Screenshare.FecBitrateSentInKbps")); | 733 "WebRTC.Video.Screenshare.FecBitrateSentInKbps")); |
707 EXPECT_EQ(static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) / | 734 EXPECT_EQ(static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) / |
708 metrics::kMinRunTimeInSeconds / 1000), | 735 metrics::kMinRunTimeInSeconds / 1000), |
709 test::LastHistogramSample( | 736 test::LastHistogramSample( |
710 "WebRTC.Video.Screenshare.FecBitrateSentInKbps")); | 737 "WebRTC.Video.Screenshare.FecBitrateSentInKbps")); |
711 } | 738 } |
712 | 739 |
713 } // namespace webrtc | 740 } // namespace webrtc |
OLD | NEW |