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

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