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

Side by Side Diff: webrtc/video/send_statistics_proxy_unittest.cc

Issue 1915523002: Add a default implementation in metrics_default.cc of histograms methods in system_wrappers/interfac (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 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
« no previous file with comments | « webrtc/video/send_delay_stats_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "webrtc/video/send_statistics_proxy.h" 11 #include "webrtc/video/send_statistics_proxy.h"
12 12
13 #include <map> 13 #include <map>
14 #include <memory> 14 #include <memory>
15 #include <string> 15 #include <string>
16 #include <vector> 16 #include <vector>
17 17
18 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
19 #include "webrtc/system_wrappers/include/metrics.h" 19 #include "webrtc/system_wrappers/include/metrics.h"
20 #include "webrtc/test/histogram.h" 20 #include "webrtc/system_wrappers/include/metrics_default.h"
21 21
22 namespace webrtc { 22 namespace webrtc {
23 namespace { 23 namespace {
24 const uint32_t kFirstSsrc = 17; 24 const uint32_t kFirstSsrc = 17;
25 const uint32_t kSecondSsrc = 42; 25 const uint32_t kSecondSsrc = 42;
26 const uint32_t kFirstRtxSsrc = 18; 26 const uint32_t kFirstRtxSsrc = 18;
27 const uint32_t kSecondRtxSsrc = 43; 27 const uint32_t kSecondRtxSsrc = 43;
28 28
29 const int kMinRequiredSamples = 200; 29 const int kMinRequiredSamples = 200;
30 const int kQpIdx0 = 21; 30 const int kQpIdx0 = 21;
31 const int kQpIdx1 = 39; 31 const int kQpIdx1 = 39;
32 } // namespace 32 } // namespace
33 33
34 class SendStatisticsProxyTest : public ::testing::Test { 34 class SendStatisticsProxyTest : public ::testing::Test {
35 public: 35 public:
36 SendStatisticsProxyTest() 36 SendStatisticsProxyTest()
37 : fake_clock_(1234), config_(GetTestConfig()), avg_delay_ms_(0), 37 : fake_clock_(1234), config_(GetTestConfig()), avg_delay_ms_(0),
38 max_delay_ms_(0) {} 38 max_delay_ms_(0) {}
39 virtual ~SendStatisticsProxyTest() {} 39 virtual ~SendStatisticsProxyTest() {}
40 40
41 protected: 41 protected:
42 virtual void SetUp() { 42 virtual void SetUp() {
43 metrics::Reset();
43 statistics_proxy_.reset(new SendStatisticsProxy( 44 statistics_proxy_.reset(new SendStatisticsProxy(
44 &fake_clock_, GetTestConfig(), 45 &fake_clock_, GetTestConfig(),
45 VideoEncoderConfig::ContentType::kRealtimeVideo)); 46 VideoEncoderConfig::ContentType::kRealtimeVideo));
46 expected_ = VideoSendStream::Stats(); 47 expected_ = VideoSendStream::Stats();
47 } 48 }
48 49
49 VideoSendStream::Config GetTestConfig() { 50 VideoSendStream::Config GetTestConfig() {
50 VideoSendStream::Config config(nullptr); 51 VideoSendStream::Config config(nullptr);
51 config.rtp.ssrcs.push_back(kFirstSsrc); 52 config.rtp.ssrcs.push_back(kFirstSsrc);
52 config.rtp.ssrcs.push_back(kSecondSsrc); 53 config.rtp.ssrcs.push_back(kSecondSsrc);
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 CpuOveruseMetrics metrics; 279 CpuOveruseMetrics metrics;
279 metrics.encode_usage_percent = 80; 280 metrics.encode_usage_percent = 80;
280 statistics_proxy_->OnEncodedFrameTimeMeasured(kEncodeTimeMs, metrics); 281 statistics_proxy_->OnEncodedFrameTimeMeasured(kEncodeTimeMs, metrics);
281 282
282 VideoSendStream::Stats stats = statistics_proxy_->GetStats(); 283 VideoSendStream::Stats stats = statistics_proxy_->GetStats();
283 EXPECT_EQ(kEncodeTimeMs, stats.avg_encode_time_ms); 284 EXPECT_EQ(kEncodeTimeMs, stats.avg_encode_time_ms);
284 EXPECT_EQ(metrics.encode_usage_percent, stats.encode_usage_percent); 285 EXPECT_EQ(metrics.encode_usage_percent, stats.encode_usage_percent);
285 } 286 }
286 287
287 TEST_F(SendStatisticsProxyTest, SwitchContentTypeUpdatesHistograms) { 288 TEST_F(SendStatisticsProxyTest, SwitchContentTypeUpdatesHistograms) {
288 test::ClearHistograms();
289 const int kWidth = 640; 289 const int kWidth = 640;
290 const int kHeight = 480; 290 const int kHeight = 480;
291 291
292 for (int i = 0; i < kMinRequiredSamples; ++i) 292 for (int i = 0; i < kMinRequiredSamples; ++i)
293 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); 293 statistics_proxy_->OnIncomingFrame(kWidth, kHeight);
294 294
295 // No switch, stats not should be updated. 295 // No switch, stats not should be updated.
296 statistics_proxy_->SetContentType( 296 statistics_proxy_->SetContentType(
297 VideoEncoderConfig::ContentType::kRealtimeVideo); 297 VideoEncoderConfig::ContentType::kRealtimeVideo);
298 EXPECT_EQ(0, test::NumHistogramSamples("WebRTC.Video.InputWidthInPixels")); 298 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.InputWidthInPixels"));
299 299
300 // Switch to screenshare, real-time stats should be updated. 300 // Switch to screenshare, real-time stats should be updated.
301 statistics_proxy_->SetContentType(VideoEncoderConfig::ContentType::kScreen); 301 statistics_proxy_->SetContentType(VideoEncoderConfig::ContentType::kScreen);
302 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.InputWidthInPixels")); 302 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.InputWidthInPixels"));
303 } 303 }
304 304
305 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8) { 305 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8) {
306 test::ClearHistograms();
307 EncodedImage encoded_image; 306 EncodedImage encoded_image;
308 CodecSpecificInfo codec_info; 307 CodecSpecificInfo codec_info;
309 codec_info.codecType = kVideoCodecVP8; 308 codec_info.codecType = kVideoCodecVP8;
310 309
311 for (int i = 0; i < kMinRequiredSamples; ++i) { 310 for (int i = 0; i < kMinRequiredSamples; ++i) {
312 codec_info.codecSpecific.VP8.simulcastIdx = 0; 311 codec_info.codecSpecific.VP8.simulcastIdx = 0;
313 encoded_image.qp_ = kQpIdx0; 312 encoded_image.qp_ = kQpIdx0;
314 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); 313 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
315 codec_info.codecSpecific.VP8.simulcastIdx = 1; 314 codec_info.codecSpecific.VP8.simulcastIdx = 1;
316 encoded_image.qp_ = kQpIdx1; 315 encoded_image.qp_ = kQpIdx1;
317 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); 316 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
318 } 317 }
319 statistics_proxy_.reset(); 318 statistics_proxy_.reset();
320 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.Encoded.Qp.Vp8.S0")); 319 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8.S0"));
321 EXPECT_EQ(kQpIdx0, 320 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8.S0", kQpIdx0));
322 test::LastHistogramSample("WebRTC.Video.Encoded.Qp.Vp8.S0")); 321 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8.S1"));
323 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.Encoded.Qp.Vp8.S1")); 322 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8.S1", kQpIdx1));
324 EXPECT_EQ(kQpIdx1,
325 test::LastHistogramSample("WebRTC.Video.Encoded.Qp.Vp8.S1"));
326 } 323 }
327 324
328 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8OneSsrc) { 325 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8OneSsrc) {
329 VideoSendStream::Config config(nullptr); 326 VideoSendStream::Config config(nullptr);
330 config.rtp.ssrcs.push_back(kFirstSsrc); 327 config.rtp.ssrcs.push_back(kFirstSsrc);
331 statistics_proxy_.reset(new SendStatisticsProxy( 328 statistics_proxy_.reset(new SendStatisticsProxy(
332 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo)); 329 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo));
333 330
334 test::ClearHistograms();
335 EncodedImage encoded_image; 331 EncodedImage encoded_image;
336 CodecSpecificInfo codec_info; 332 CodecSpecificInfo codec_info;
337 codec_info.codecType = kVideoCodecVP8; 333 codec_info.codecType = kVideoCodecVP8;
338 334
339 for (int i = 0; i < kMinRequiredSamples; ++i) { 335 for (int i = 0; i < kMinRequiredSamples; ++i) {
340 codec_info.codecSpecific.VP8.simulcastIdx = 0; 336 codec_info.codecSpecific.VP8.simulcastIdx = 0;
341 encoded_image.qp_ = kQpIdx0; 337 encoded_image.qp_ = kQpIdx0;
342 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); 338 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
343 } 339 }
344 statistics_proxy_.reset(); 340 statistics_proxy_.reset();
345 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.Encoded.Qp.Vp8")); 341 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8"));
346 EXPECT_EQ(kQpIdx0, test::LastHistogramSample("WebRTC.Video.Encoded.Qp.Vp8")); 342 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8", kQpIdx0));
347 } 343 }
348 344
349 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9) { 345 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9) {
350 test::ClearHistograms();
351 EncodedImage encoded_image; 346 EncodedImage encoded_image;
352 CodecSpecificInfo codec_info; 347 CodecSpecificInfo codec_info;
353 codec_info.codecType = kVideoCodecVP9; 348 codec_info.codecType = kVideoCodecVP9;
354 codec_info.codecSpecific.VP9.num_spatial_layers = 2; 349 codec_info.codecSpecific.VP9.num_spatial_layers = 2;
355 350
356 for (int i = 0; i < kMinRequiredSamples; ++i) { 351 for (int i = 0; i < kMinRequiredSamples; ++i) {
357 encoded_image.qp_ = kQpIdx0; 352 encoded_image.qp_ = kQpIdx0;
358 codec_info.codecSpecific.VP9.spatial_idx = 0; 353 codec_info.codecSpecific.VP9.spatial_idx = 0;
359 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); 354 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
360 encoded_image.qp_ = kQpIdx1; 355 encoded_image.qp_ = kQpIdx1;
361 codec_info.codecSpecific.VP9.spatial_idx = 1; 356 codec_info.codecSpecific.VP9.spatial_idx = 1;
362 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); 357 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
363 } 358 }
364 statistics_proxy_.reset(); 359 statistics_proxy_.reset();
365 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.Encoded.Qp.Vp9.S0")); 360 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9.S0"));
366 EXPECT_EQ(kQpIdx0, 361 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9.S0", kQpIdx0));
367 test::LastHistogramSample("WebRTC.Video.Encoded.Qp.Vp9.S0")); 362 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9.S1"));
368 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.Encoded.Qp.Vp9.S1")); 363 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9.S1", kQpIdx1));
369 EXPECT_EQ(kQpIdx1,
370 test::LastHistogramSample("WebRTC.Video.Encoded.Qp.Vp9.S1"));
371 } 364 }
372 365
373 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9OneSpatialLayer) { 366 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9OneSpatialLayer) {
374 VideoSendStream::Config config(nullptr); 367 VideoSendStream::Config config(nullptr);
375 config.rtp.ssrcs.push_back(kFirstSsrc); 368 config.rtp.ssrcs.push_back(kFirstSsrc);
376 statistics_proxy_.reset(new SendStatisticsProxy( 369 statistics_proxy_.reset(new SendStatisticsProxy(
377 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo)); 370 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo));
378 371
379 test::ClearHistograms();
380 EncodedImage encoded_image; 372 EncodedImage encoded_image;
381 CodecSpecificInfo codec_info; 373 CodecSpecificInfo codec_info;
382 codec_info.codecType = kVideoCodecVP9; 374 codec_info.codecType = kVideoCodecVP9;
383 codec_info.codecSpecific.VP9.num_spatial_layers = 1; 375 codec_info.codecSpecific.VP9.num_spatial_layers = 1;
384 376
385 for (int i = 0; i < kMinRequiredSamples; ++i) { 377 for (int i = 0; i < kMinRequiredSamples; ++i) {
386 encoded_image.qp_ = kQpIdx0; 378 encoded_image.qp_ = kQpIdx0;
387 codec_info.codecSpecific.VP9.spatial_idx = 0; 379 codec_info.codecSpecific.VP9.spatial_idx = 0;
388 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); 380 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info);
389 } 381 }
390 statistics_proxy_.reset(); 382 statistics_proxy_.reset();
391 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.Encoded.Qp.Vp9")); 383 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9"));
392 EXPECT_EQ(kQpIdx0, test::LastHistogramSample("WebRTC.Video.Encoded.Qp.Vp9")); 384 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9", kQpIdx0));
393 } 385 }
394 386
395 TEST_F(SendStatisticsProxyTest, NoSubstreams) { 387 TEST_F(SendStatisticsProxyTest, NoSubstreams) {
396 uint32_t excluded_ssrc = 388 uint32_t excluded_ssrc =
397 std::max( 389 std::max(
398 *std::max_element(config_.rtp.ssrcs.begin(), config_.rtp.ssrcs.end()), 390 *std::max_element(config_.rtp.ssrcs.begin(), config_.rtp.ssrcs.end()),
399 *std::max_element(config_.rtp.rtx.ssrcs.begin(), 391 *std::max_element(config_.rtp.rtx.ssrcs.begin(),
400 config_.rtp.rtx.ssrcs.end())) + 392 config_.rtp.rtx.ssrcs.end())) +
401 1; 393 1;
402 // From RtcpStatisticsCallback. 394 // From RtcpStatisticsCallback.
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds; 516 counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds;
525 counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds; 517 counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds;
526 counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds; 518 counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds;
527 519
528 proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); 520 proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters);
529 proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); 521 proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters);
530 522
531 // Changing content type causes histograms to be reported. 523 // Changing content type causes histograms to be reported.
532 statistics_proxy_->SetContentType(VideoEncoderConfig::ContentType::kScreen); 524 statistics_proxy_->SetContentType(VideoEncoderConfig::ContentType::kScreen);
533 525
534 EXPECT_EQ(1, test::NumHistogramSamples( 526 EXPECT_EQ(1,
535 "WebRTC.Video.NackPacketsReceivedPerMinute")); 527 metrics::NumSamples("WebRTC.Video.NackPacketsReceivedPerMinute"));
536 EXPECT_EQ( 528 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.FirPacketsReceivedPerMinute"));
537 1, test::NumHistogramSamples("WebRTC.Video.FirPacketsReceivedPerMinute")); 529 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.PliPacketsReceivedPerMinute"));
538 EXPECT_EQ( 530 EXPECT_EQ(1, metrics::NumSamples(
539 1, test::NumHistogramSamples("WebRTC.Video.PliPacketsReceivedPerMinute"));
540 EXPECT_EQ(1, test::NumHistogramSamples(
541 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); 531 "WebRTC.Video.UniqueNackRequestsReceivedInPercent"));
542 532
543 const int kRate = 60 * 2; // Packets per minute with two streams. 533 const int kRate = 60 * 2; // Packets per minute with two streams.
544 534
545 EXPECT_EQ(1 * kRate, test::LastHistogramSample( 535 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.NackPacketsReceivedPerMinute",
546 "WebRTC.Video.NackPacketsReceivedPerMinute")); 536 1 * kRate));
547 EXPECT_EQ(2 * kRate, test::LastHistogramSample( 537 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.FirPacketsReceivedPerMinute",
548 "WebRTC.Video.FirPacketsReceivedPerMinute")); 538 2 * kRate));
549 EXPECT_EQ(3 * kRate, test::LastHistogramSample( 539 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.PliPacketsReceivedPerMinute",
550 "WebRTC.Video.PliPacketsReceivedPerMinute")); 540 3 * kRate));
551 EXPECT_EQ(4 * 100 / 5, 541 EXPECT_EQ(
552 test::LastHistogramSample( 542 1, metrics::NumEvents("WebRTC.Video.UniqueNackRequestsReceivedInPercent",
553 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); 543 4 * 100 / 5));
554 544
555 // New start time but same counter values. 545 // New start time but same counter values.
556 proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); 546 proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters);
557 proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); 547 proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters);
558 548
559 fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds); 549 fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds);
560 550
561 counters.nack_packets += 1 * metrics::kMinRunTimeInSeconds; 551 counters.nack_packets += 1 * metrics::kMinRunTimeInSeconds;
562 counters.fir_packets += 2 * metrics::kMinRunTimeInSeconds; 552 counters.fir_packets += 2 * metrics::kMinRunTimeInSeconds;
563 counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds; 553 counters.pli_packets += 3 * metrics::kMinRunTimeInSeconds;
564 counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds; 554 counters.unique_nack_requests += 4 * metrics::kMinRunTimeInSeconds;
565 counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds; 555 counters.nack_requests += 5 * metrics::kMinRunTimeInSeconds;
566 556
567 proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters); 557 proxy->RtcpPacketTypesCounterUpdated(kFirstSsrc, counters);
568 proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters); 558 proxy->RtcpPacketTypesCounterUpdated(kSecondSsrc, counters);
569 559
570 SetUp(); // Reset stats proxy also causes histograms to be reported. 560 SetUp(); // Reset stats proxy also causes histograms to be reported.
571 561
572 EXPECT_EQ(1, test::NumHistogramSamples( 562 EXPECT_EQ(1, metrics::NumSamples(
573 "WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute")); 563 "WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute"));
574 EXPECT_EQ(1, test::NumHistogramSamples( 564 EXPECT_EQ(1, metrics::NumSamples(
575 "WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute")); 565 "WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute"));
576 EXPECT_EQ(1, test::NumHistogramSamples( 566 EXPECT_EQ(1, metrics::NumSamples(
577 "WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute")); 567 "WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute"));
578 EXPECT_EQ( 568 EXPECT_EQ(
579 1, test::NumHistogramSamples( 569 1, metrics::NumSamples(
580 "WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent")); 570 "WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent"));
581 571
582 EXPECT_EQ(1 * kRate, 572 EXPECT_EQ(1, metrics::NumEvents(
583 test::LastHistogramSample( 573 "WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute",
584 "WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute")); 574 1 * kRate));
585 EXPECT_EQ(2 * kRate, 575 EXPECT_EQ(1, metrics::NumEvents(
586 test::LastHistogramSample( 576 "WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute",
587 "WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute")); 577 2 * kRate));
588 EXPECT_EQ(3 * kRate, 578 EXPECT_EQ(1, metrics::NumEvents(
589 test::LastHistogramSample( 579 "WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute",
590 "WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute")); 580 3 * kRate));
591 EXPECT_EQ( 581 EXPECT_EQ(1,
592 4 * 100 / 5, 582 metrics::NumEvents(
593 test::LastHistogramSample( 583 "WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent",
594 "WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent")); 584 4 * 100 / 5));
595 } 585 }
596 586
597 TEST_F(SendStatisticsProxyTest, ResetsRtpCountersOnContentChange) { 587 TEST_F(SendStatisticsProxyTest, ResetsRtpCountersOnContentChange) {
598 StreamDataCountersCallback* proxy = 588 StreamDataCountersCallback* proxy =
599 static_cast<StreamDataCountersCallback*>(statistics_proxy_.get()); 589 static_cast<StreamDataCountersCallback*>(statistics_proxy_.get());
600 StreamDataCounters counters; 590 StreamDataCounters counters;
601 StreamDataCounters rtx_counters; 591 StreamDataCounters rtx_counters;
602 counters.first_packet_time_ms = fake_clock_.TimeInMilliseconds(); 592 counters.first_packet_time_ms = fake_clock_.TimeInMilliseconds();
603 proxy->DataCountersUpdated(counters, kFirstSsrc); 593 proxy->DataCountersUpdated(counters, kFirstSsrc);
604 proxy->DataCountersUpdated(counters, kSecondSsrc); 594 proxy->DataCountersUpdated(counters, kSecondSsrc);
(...skipping 16 matching lines...) Expand all
621 611
622 fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds); 612 fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds);
623 proxy->DataCountersUpdated(counters, kFirstSsrc); 613 proxy->DataCountersUpdated(counters, kFirstSsrc);
624 proxy->DataCountersUpdated(counters, kSecondSsrc); 614 proxy->DataCountersUpdated(counters, kSecondSsrc);
625 proxy->DataCountersUpdated(rtx_counters, kFirstRtxSsrc); 615 proxy->DataCountersUpdated(rtx_counters, kFirstRtxSsrc);
626 proxy->DataCountersUpdated(rtx_counters, kSecondRtxSsrc); 616 proxy->DataCountersUpdated(rtx_counters, kSecondRtxSsrc);
627 617
628 // Changing content type causes histograms to be reported. 618 // Changing content type causes histograms to be reported.
629 statistics_proxy_->SetContentType(VideoEncoderConfig::ContentType::kScreen); 619 statistics_proxy_->SetContentType(VideoEncoderConfig::ContentType::kScreen);
630 620
631 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.BitrateSentInKbps")); 621 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.BitrateSentInKbps"));
632 EXPECT_EQ(static_cast<int>((counters.transmitted.TotalBytes() * 4 * 8) / 622 EXPECT_EQ(1,
633 metrics::kMinRunTimeInSeconds / 1000), 623 metrics::NumEvents(
634 test::LastHistogramSample("WebRTC.Video.BitrateSentInKbps")); 624 "WebRTC.Video.BitrateSentInKbps",
625 static_cast<int>((counters.transmitted.TotalBytes() * 4 * 8) /
626 metrics::kMinRunTimeInSeconds / 1000)));
627
628 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.MediaBitrateSentInKbps"));
629 EXPECT_EQ(1, metrics::NumEvents(
630 "WebRTC.Video.MediaBitrateSentInKbps",
631 static_cast<int>((counters.MediaPayloadBytes() * 2 * 8) /
632 metrics::kMinRunTimeInSeconds / 1000)));
633
634 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.PaddingBitrateSentInKbps"));
635 EXPECT_EQ(1,
636 metrics::NumEvents(
637 "WebRTC.Video.PaddingBitrateSentInKbps",
638 static_cast<int>((counters.transmitted.padding_bytes * 4 * 8) /
639 metrics::kMinRunTimeInSeconds / 1000)));
635 640
636 EXPECT_EQ(1, 641 EXPECT_EQ(1,
637 test::NumHistogramSamples("WebRTC.Video.MediaBitrateSentInKbps")); 642 metrics::NumSamples("WebRTC.Video.RetransmittedBitrateSentInKbps"));
638 EXPECT_EQ(static_cast<int>((counters.MediaPayloadBytes() * 2 * 8) / 643 EXPECT_EQ(1,
639 metrics::kMinRunTimeInSeconds / 1000), 644 metrics::NumEvents(
640 test::LastHistogramSample("WebRTC.Video.MediaBitrateSentInKbps")); 645 "WebRTC.Video.RetransmittedBitrateSentInKbps",
646 static_cast<int>((counters.retransmitted.TotalBytes() * 2 * 8) /
647 metrics::kMinRunTimeInSeconds / 1000)));
641 648
642 EXPECT_EQ(1, 649 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.RtxBitrateSentInKbps"));
643 test::NumHistogramSamples("WebRTC.Video.PaddingBitrateSentInKbps")); 650 EXPECT_EQ(
644 EXPECT_EQ(static_cast<int>((counters.transmitted.padding_bytes * 4 * 8) / 651 1, metrics::NumEvents(
645 metrics::kMinRunTimeInSeconds / 1000), 652 "WebRTC.Video.RtxBitrateSentInKbps",
646 test::LastHistogramSample("WebRTC.Video.PaddingBitrateSentInKbps")); 653 static_cast<int>((rtx_counters.transmitted.TotalBytes() * 2 * 8) /
654 metrics::kMinRunTimeInSeconds / 1000)));
647 655
648 EXPECT_EQ(1, test::NumHistogramSamples( 656 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.FecBitrateSentInKbps"));
649 "WebRTC.Video.RetransmittedBitrateSentInKbps")); 657 EXPECT_EQ(1, metrics::NumEvents(
650 EXPECT_EQ( 658 "WebRTC.Video.FecBitrateSentInKbps",
651 static_cast<int>((counters.retransmitted.TotalBytes() * 2 * 8) / 659 static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) /
652 metrics::kMinRunTimeInSeconds / 1000), 660 metrics::kMinRunTimeInSeconds / 1000)));
653 test::LastHistogramSample("WebRTC.Video.RetransmittedBitrateSentInKbps"));
654
655 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.RtxBitrateSentInKbps"));
656 EXPECT_EQ(static_cast<int>((rtx_counters.transmitted.TotalBytes() * 2 * 8) /
657 metrics::kMinRunTimeInSeconds / 1000),
658 test::LastHistogramSample("WebRTC.Video.RtxBitrateSentInKbps"));
659
660 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.FecBitrateSentInKbps"));
661 EXPECT_EQ(static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) /
662 metrics::kMinRunTimeInSeconds / 1000),
663 test::LastHistogramSample("WebRTC.Video.FecBitrateSentInKbps"));
664 661
665 // New start time but same counter values. 662 // New start time but same counter values.
666 proxy->DataCountersUpdated(counters, kFirstSsrc); 663 proxy->DataCountersUpdated(counters, kFirstSsrc);
667 proxy->DataCountersUpdated(counters, kSecondSsrc); 664 proxy->DataCountersUpdated(counters, kSecondSsrc);
668 proxy->DataCountersUpdated(rtx_counters, kFirstRtxSsrc); 665 proxy->DataCountersUpdated(rtx_counters, kFirstRtxSsrc);
669 proxy->DataCountersUpdated(rtx_counters, kSecondRtxSsrc); 666 proxy->DataCountersUpdated(rtx_counters, kSecondRtxSsrc);
670 667
671 // Double counter values, this should result in the same counts as before but 668 // Double counter values, this should result in the same counts as before but
672 // with new histogram names. 669 // with new histogram names.
673 StreamDataCounters new_counters = counters; 670 StreamDataCounters new_counters = counters;
674 new_counters.Add(counters); 671 new_counters.Add(counters);
675 StreamDataCounters new_rtx_counters = rtx_counters; 672 StreamDataCounters new_rtx_counters = rtx_counters;
676 new_rtx_counters.Add(rtx_counters); 673 new_rtx_counters.Add(rtx_counters);
677 674
678 fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds); 675 fake_clock_.AdvanceTimeMilliseconds(1000 * metrics::kMinRunTimeInSeconds);
679 proxy->DataCountersUpdated(new_counters, kFirstSsrc); 676 proxy->DataCountersUpdated(new_counters, kFirstSsrc);
680 proxy->DataCountersUpdated(new_counters, kSecondSsrc); 677 proxy->DataCountersUpdated(new_counters, kSecondSsrc);
681 proxy->DataCountersUpdated(new_rtx_counters, kFirstRtxSsrc); 678 proxy->DataCountersUpdated(new_rtx_counters, kFirstRtxSsrc);
682 proxy->DataCountersUpdated(new_rtx_counters, kSecondRtxSsrc); 679 proxy->DataCountersUpdated(new_rtx_counters, kSecondRtxSsrc);
683 680
684 SetUp(); // Reset stats proxy also causes histograms to be reported. 681 SetUp(); // Reset stats proxy also causes histograms to be reported.
685 682
686 EXPECT_EQ(1, test::NumHistogramSamples( 683 EXPECT_EQ(1,
687 "WebRTC.Video.Screenshare.BitrateSentInKbps")); 684 metrics::NumSamples("WebRTC.Video.Screenshare.BitrateSentInKbps"));
685 EXPECT_EQ(1,
686 metrics::NumEvents(
687 "WebRTC.Video.Screenshare.BitrateSentInKbps",
688 static_cast<int>((counters.transmitted.TotalBytes() * 4 * 8) /
689 metrics::kMinRunTimeInSeconds / 1000)));
690
691 EXPECT_EQ(1, metrics::NumSamples(
692 "WebRTC.Video.Screenshare.MediaBitrateSentInKbps"));
693 EXPECT_EQ(1, metrics::NumEvents(
694 "WebRTC.Video.Screenshare.MediaBitrateSentInKbps",
695 static_cast<int>((counters.MediaPayloadBytes() * 2 * 8) /
696 metrics::kMinRunTimeInSeconds / 1000)));
697
698 EXPECT_EQ(1, metrics::NumSamples(
699 "WebRTC.Video.Screenshare.PaddingBitrateSentInKbps"));
700 EXPECT_EQ(1,
701 metrics::NumEvents(
702 "WebRTC.Video.Screenshare.PaddingBitrateSentInKbps",
703 static_cast<int>((counters.transmitted.padding_bytes * 4 * 8) /
704 metrics::kMinRunTimeInSeconds / 1000)));
705
706 EXPECT_EQ(1, metrics::NumSamples(
707 "WebRTC.Video.Screenshare.RetransmittedBitrateSentInKbps"));
708 EXPECT_EQ(1,
709 metrics::NumEvents(
710 "WebRTC.Video.Screenshare.RetransmittedBitrateSentInKbps",
711 static_cast<int>((counters.retransmitted.TotalBytes() * 2 * 8) /
712 metrics::kMinRunTimeInSeconds / 1000)));
713
688 EXPECT_EQ( 714 EXPECT_EQ(
689 static_cast<int>((counters.transmitted.TotalBytes() * 4 * 8) / 715 1, metrics::NumSamples("WebRTC.Video.Screenshare.RtxBitrateSentInKbps"));
690 metrics::kMinRunTimeInSeconds / 1000), 716 EXPECT_EQ(
691 test::LastHistogramSample("WebRTC.Video.Screenshare.BitrateSentInKbps")); 717 1, metrics::NumEvents(
718 "WebRTC.Video.Screenshare.RtxBitrateSentInKbps",
719 static_cast<int>((rtx_counters.transmitted.TotalBytes() * 2 * 8) /
720 metrics::kMinRunTimeInSeconds / 1000)));
692 721
693 EXPECT_EQ(1, test::NumHistogramSamples( 722 EXPECT_EQ(
694 "WebRTC.Video.Screenshare.MediaBitrateSentInKbps")); 723 1, metrics::NumSamples("WebRTC.Video.Screenshare.FecBitrateSentInKbps"));
695 EXPECT_EQ(static_cast<int>((counters.MediaPayloadBytes() * 2 * 8) / 724 EXPECT_EQ(1, metrics::NumEvents(
696 metrics::kMinRunTimeInSeconds / 1000), 725 "WebRTC.Video.Screenshare.FecBitrateSentInKbps",
697 test::LastHistogramSample( 726 static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) /
698 "WebRTC.Video.Screenshare.MediaBitrateSentInKbps")); 727 metrics::kMinRunTimeInSeconds / 1000)));
699
700 EXPECT_EQ(1, test::NumHistogramSamples(
701 "WebRTC.Video.Screenshare.PaddingBitrateSentInKbps"));
702 EXPECT_EQ(static_cast<int>((counters.transmitted.padding_bytes * 4 * 8) /
703 metrics::kMinRunTimeInSeconds / 1000),
704 test::LastHistogramSample(
705 "WebRTC.Video.Screenshare.PaddingBitrateSentInKbps"));
706
707 EXPECT_EQ(1, test::NumHistogramSamples(
708 "WebRTC.Video.Screenshare.RetransmittedBitrateSentInKbps"));
709 EXPECT_EQ(static_cast<int>((counters.retransmitted.TotalBytes() * 2 * 8) /
710 metrics::kMinRunTimeInSeconds / 1000),
711 test::LastHistogramSample(
712 "WebRTC.Video.Screenshare.RetransmittedBitrateSentInKbps"));
713
714 EXPECT_EQ(1, test::NumHistogramSamples(
715 "WebRTC.Video.Screenshare.RtxBitrateSentInKbps"));
716 EXPECT_EQ(static_cast<int>((rtx_counters.transmitted.TotalBytes() * 2 * 8) /
717 metrics::kMinRunTimeInSeconds / 1000),
718 test::LastHistogramSample(
719 "WebRTC.Video.Screenshare.RtxBitrateSentInKbps"));
720
721 EXPECT_EQ(1, test::NumHistogramSamples(
722 "WebRTC.Video.Screenshare.FecBitrateSentInKbps"));
723 EXPECT_EQ(static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) /
724 metrics::kMinRunTimeInSeconds / 1000),
725 test::LastHistogramSample(
726 "WebRTC.Video.Screenshare.FecBitrateSentInKbps"));
727 } 728 }
728 729
729 } // namespace webrtc 730 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/send_delay_stats_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698