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 #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 "webrtc/system_wrappers/include/metrics.h" | 18 #include "webrtc/system_wrappers/include/metrics.h" |
19 #include "webrtc/system_wrappers/include/metrics_default.h" | 19 #include "webrtc/system_wrappers/include/metrics_default.h" |
20 #include "webrtc/test/gtest.h" | 20 #include "webrtc/test/gtest.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; | |
30 const int kQpIdx0 = 21; | 29 const int kQpIdx0 = 21; |
31 const int kQpIdx1 = 39; | 30 const int kQpIdx1 = 39; |
32 } // namespace | 31 } // namespace |
33 | 32 |
34 class SendStatisticsProxyTest : public ::testing::Test { | 33 class SendStatisticsProxyTest : public ::testing::Test { |
35 public: | 34 public: |
36 SendStatisticsProxyTest() | 35 SendStatisticsProxyTest() |
37 : fake_clock_(1234), config_(GetTestConfig()), avg_delay_ms_(0), | 36 : fake_clock_(1234), config_(GetTestConfig()), avg_delay_ms_(0), |
38 max_delay_ms_(0) {} | 37 max_delay_ms_(0) {} |
39 virtual ~SendStatisticsProxyTest() {} | 38 virtual ~SendStatisticsProxyTest() {} |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 encoded_image.qp_ = -1; | 329 encoded_image.qp_ = -1; |
331 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum); | 330 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum); |
332 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); | 331 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); |
333 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum); | 332 EXPECT_EQ(rtc::Optional<uint64_t>(), statistics_proxy_->GetStats().qp_sum); |
334 } | 333 } |
335 | 334 |
336 TEST_F(SendStatisticsProxyTest, SwitchContentTypeUpdatesHistograms) { | 335 TEST_F(SendStatisticsProxyTest, SwitchContentTypeUpdatesHistograms) { |
337 const int kWidth = 640; | 336 const int kWidth = 640; |
338 const int kHeight = 480; | 337 const int kHeight = 480; |
339 | 338 |
340 for (int i = 0; i < kMinRequiredSamples; ++i) | 339 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
341 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); | 340 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); |
342 | 341 |
343 // No switch, stats should not be updated. | 342 // No switch, stats should not be updated. |
344 VideoEncoderConfig config; | 343 VideoEncoderConfig config; |
345 config.content_type = VideoEncoderConfig::ContentType::kRealtimeVideo; | 344 config.content_type = VideoEncoderConfig::ContentType::kRealtimeVideo; |
346 statistics_proxy_->OnEncoderReconfigured(config, 50); | 345 statistics_proxy_->OnEncoderReconfigured(config, 50); |
347 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.InputWidthInPixels")); | 346 EXPECT_EQ(0, metrics::NumSamples("WebRTC.Video.InputWidthInPixels")); |
348 | 347 |
349 // Switch to screenshare, real-time stats should be updated. | 348 // Switch to screenshare, real-time stats should be updated. |
350 config.content_type = VideoEncoderConfig::ContentType::kScreen; | 349 config.content_type = VideoEncoderConfig::ContentType::kScreen; |
351 statistics_proxy_->OnEncoderReconfigured(config, 50); | 350 statistics_proxy_->OnEncoderReconfigured(config, 50); |
352 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.InputWidthInPixels")); | 351 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.InputWidthInPixels")); |
353 } | 352 } |
354 | 353 |
| 354 TEST_F(SendStatisticsProxyTest, CpuLimitedResolutionUpdated) { |
| 355 const int kWidth = 640; |
| 356 const int kHeight = 480; |
| 357 |
| 358 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
| 359 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); |
| 360 |
| 361 statistics_proxy_->OnCpuRestrictedResolutionChanged(true); |
| 362 |
| 363 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
| 364 statistics_proxy_->OnIncomingFrame(kWidth, kHeight); |
| 365 |
| 366 statistics_proxy_.reset(); |
| 367 EXPECT_EQ(1, |
| 368 metrics::NumSamples("WebRTC.Video.CpuLimitedResolutionInPercent")); |
| 369 EXPECT_EQ( |
| 370 1, metrics::NumEvents("WebRTC.Video.CpuLimitedResolutionInPercent", 50)); |
| 371 } |
| 372 |
355 TEST_F(SendStatisticsProxyTest, LifetimeHistogramIsUpdated) { | 373 TEST_F(SendStatisticsProxyTest, LifetimeHistogramIsUpdated) { |
356 const int64_t kTimeSec = 3; | 374 const int64_t kTimeSec = 3; |
357 fake_clock_.AdvanceTimeMilliseconds(kTimeSec * 1000); | 375 fake_clock_.AdvanceTimeMilliseconds(kTimeSec * 1000); |
358 statistics_proxy_.reset(); | 376 statistics_proxy_.reset(); |
359 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.SendStreamLifetimeInSeconds")); | 377 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.SendStreamLifetimeInSeconds")); |
360 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.SendStreamLifetimeInSeconds", | 378 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.SendStreamLifetimeInSeconds", |
361 kTimeSec)); | 379 kTimeSec)); |
362 } | 380 } |
363 | 381 |
364 TEST_F(SendStatisticsProxyTest, CodecTypeHistogramIsUpdated) { | 382 TEST_F(SendStatisticsProxyTest, CodecTypeHistogramIsUpdated) { |
365 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); | 383 fake_clock_.AdvanceTimeMilliseconds(metrics::kMinRunTimeInSeconds * 1000); |
366 statistics_proxy_.reset(); | 384 statistics_proxy_.reset(); |
367 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoder.CodecType")); | 385 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoder.CodecType")); |
368 } | 386 } |
369 | 387 |
370 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8) { | 388 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8) { |
371 EncodedImage encoded_image; | 389 EncodedImage encoded_image; |
372 CodecSpecificInfo codec_info; | 390 CodecSpecificInfo codec_info; |
373 codec_info.codecType = kVideoCodecVP8; | 391 codec_info.codecType = kVideoCodecVP8; |
374 | 392 |
375 for (int i = 0; i < kMinRequiredSamples; ++i) { | 393 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) { |
376 codec_info.codecSpecific.VP8.simulcastIdx = 0; | 394 codec_info.codecSpecific.VP8.simulcastIdx = 0; |
377 encoded_image.qp_ = kQpIdx0; | 395 encoded_image.qp_ = kQpIdx0; |
378 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); | 396 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); |
379 codec_info.codecSpecific.VP8.simulcastIdx = 1; | 397 codec_info.codecSpecific.VP8.simulcastIdx = 1; |
380 encoded_image.qp_ = kQpIdx1; | 398 encoded_image.qp_ = kQpIdx1; |
381 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); | 399 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); |
382 } | 400 } |
383 statistics_proxy_.reset(); | 401 statistics_proxy_.reset(); |
384 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8.S0")); | 402 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8.S0")); |
385 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8.S0", kQpIdx0)); | 403 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8.S0", kQpIdx0)); |
386 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8.S1")); | 404 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8.S1")); |
387 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8.S1", kQpIdx1)); | 405 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8.S1", kQpIdx1)); |
388 } | 406 } |
389 | 407 |
390 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8OneSsrc) { | 408 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp8OneSsrc) { |
391 VideoSendStream::Config config(nullptr); | 409 VideoSendStream::Config config(nullptr); |
392 config.rtp.ssrcs.push_back(kFirstSsrc); | 410 config.rtp.ssrcs.push_back(kFirstSsrc); |
393 statistics_proxy_.reset(new SendStatisticsProxy( | 411 statistics_proxy_.reset(new SendStatisticsProxy( |
394 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo)); | 412 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo)); |
395 | 413 |
396 EncodedImage encoded_image; | 414 EncodedImage encoded_image; |
397 CodecSpecificInfo codec_info; | 415 CodecSpecificInfo codec_info; |
398 codec_info.codecType = kVideoCodecVP8; | 416 codec_info.codecType = kVideoCodecVP8; |
399 | 417 |
400 for (int i = 0; i < kMinRequiredSamples; ++i) { | 418 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) { |
401 codec_info.codecSpecific.VP8.simulcastIdx = 0; | 419 codec_info.codecSpecific.VP8.simulcastIdx = 0; |
402 encoded_image.qp_ = kQpIdx0; | 420 encoded_image.qp_ = kQpIdx0; |
403 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); | 421 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); |
404 } | 422 } |
405 statistics_proxy_.reset(); | 423 statistics_proxy_.reset(); |
406 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8")); | 424 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp8")); |
407 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8", kQpIdx0)); | 425 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp8", kQpIdx0)); |
408 } | 426 } |
409 | 427 |
410 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9) { | 428 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9) { |
411 EncodedImage encoded_image; | 429 EncodedImage encoded_image; |
412 CodecSpecificInfo codec_info; | 430 CodecSpecificInfo codec_info; |
413 codec_info.codecType = kVideoCodecVP9; | 431 codec_info.codecType = kVideoCodecVP9; |
414 codec_info.codecSpecific.VP9.num_spatial_layers = 2; | 432 codec_info.codecSpecific.VP9.num_spatial_layers = 2; |
415 | 433 |
416 for (int i = 0; i < kMinRequiredSamples; ++i) { | 434 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) { |
417 encoded_image.qp_ = kQpIdx0; | 435 encoded_image.qp_ = kQpIdx0; |
418 codec_info.codecSpecific.VP9.spatial_idx = 0; | 436 codec_info.codecSpecific.VP9.spatial_idx = 0; |
419 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); | 437 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); |
420 encoded_image.qp_ = kQpIdx1; | 438 encoded_image.qp_ = kQpIdx1; |
421 codec_info.codecSpecific.VP9.spatial_idx = 1; | 439 codec_info.codecSpecific.VP9.spatial_idx = 1; |
422 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); | 440 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); |
423 } | 441 } |
424 statistics_proxy_.reset(); | 442 statistics_proxy_.reset(); |
425 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9.S0")); | 443 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9.S0")); |
426 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9.S0", kQpIdx0)); | 444 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9.S0", kQpIdx0)); |
427 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9.S1")); | 445 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9.S1")); |
428 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9.S1", kQpIdx1)); | 446 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9.S1", kQpIdx1)); |
429 } | 447 } |
430 | 448 |
431 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9OneSpatialLayer) { | 449 TEST_F(SendStatisticsProxyTest, VerifyQpHistogramStats_Vp9OneSpatialLayer) { |
432 VideoSendStream::Config config(nullptr); | 450 VideoSendStream::Config config(nullptr); |
433 config.rtp.ssrcs.push_back(kFirstSsrc); | 451 config.rtp.ssrcs.push_back(kFirstSsrc); |
434 statistics_proxy_.reset(new SendStatisticsProxy( | 452 statistics_proxy_.reset(new SendStatisticsProxy( |
435 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo)); | 453 &fake_clock_, config, VideoEncoderConfig::ContentType::kRealtimeVideo)); |
436 | 454 |
437 EncodedImage encoded_image; | 455 EncodedImage encoded_image; |
438 CodecSpecificInfo codec_info; | 456 CodecSpecificInfo codec_info; |
439 codec_info.codecType = kVideoCodecVP9; | 457 codec_info.codecType = kVideoCodecVP9; |
440 codec_info.codecSpecific.VP9.num_spatial_layers = 1; | 458 codec_info.codecSpecific.VP9.num_spatial_layers = 1; |
441 | 459 |
442 for (int i = 0; i < kMinRequiredSamples; ++i) { | 460 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) { |
443 encoded_image.qp_ = kQpIdx0; | 461 encoded_image.qp_ = kQpIdx0; |
444 codec_info.codecSpecific.VP9.spatial_idx = 0; | 462 codec_info.codecSpecific.VP9.spatial_idx = 0; |
445 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); | 463 statistics_proxy_->OnSendEncodedImage(encoded_image, &codec_info); |
446 } | 464 } |
447 statistics_proxy_.reset(); | 465 statistics_proxy_.reset(); |
448 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9")); | 466 EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.Encoded.Qp.Vp9")); |
449 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9", kQpIdx0)); | 467 EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.Encoded.Qp.Vp9", kQpIdx0)); |
450 } | 468 } |
451 | 469 |
452 TEST_F(SendStatisticsProxyTest, | 470 TEST_F(SendStatisticsProxyTest, |
453 BandwidthLimitedHistogramsNotUpdatedWhenDisabled) { | 471 BandwidthLimitedHistogramsNotUpdatedWhenDisabled) { |
454 EncodedImage encoded_image; | 472 EncodedImage encoded_image; |
455 // encoded_image.adapt_reason_.bw_resolutions_disabled by default: -1 | 473 // encoded_image.adapt_reason_.bw_resolutions_disabled by default: -1 |
456 for (int i = 0; i < kMinRequiredSamples; ++i) | 474 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
457 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); | 475 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); |
458 | 476 |
459 // Histograms are updated when the statistics_proxy_ is deleted. | 477 // Histograms are updated when the statistics_proxy_ is deleted. |
460 statistics_proxy_.reset(); | 478 statistics_proxy_.reset(); |
461 EXPECT_EQ(0, metrics::NumSamples( | 479 EXPECT_EQ(0, metrics::NumSamples( |
462 "WebRTC.Video.BandwidthLimitedResolutionInPercent")); | 480 "WebRTC.Video.BandwidthLimitedResolutionInPercent")); |
463 EXPECT_EQ(0, metrics::NumSamples( | 481 EXPECT_EQ(0, metrics::NumSamples( |
464 "WebRTC.Video.BandwidthLimitedResolutionsDisabled")); | 482 "WebRTC.Video.BandwidthLimitedResolutionsDisabled")); |
465 } | 483 } |
466 | 484 |
467 TEST_F(SendStatisticsProxyTest, | 485 TEST_F(SendStatisticsProxyTest, |
468 BandwidthLimitedHistogramsUpdatedWhenEnabled_NoResolutionDisabled) { | 486 BandwidthLimitedHistogramsUpdatedWhenEnabled_NoResolutionDisabled) { |
469 const int kResolutionsDisabled = 0; | 487 const int kResolutionsDisabled = 0; |
470 EncodedImage encoded_image; | 488 EncodedImage encoded_image; |
471 encoded_image.adapt_reason_.bw_resolutions_disabled = kResolutionsDisabled; | 489 encoded_image.adapt_reason_.bw_resolutions_disabled = kResolutionsDisabled; |
472 for (int i = 0; i < kMinRequiredSamples; ++i) | 490 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
473 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); | 491 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); |
474 | 492 |
475 // Histograms are updated when the statistics_proxy_ is deleted. | 493 // Histograms are updated when the statistics_proxy_ is deleted. |
476 statistics_proxy_.reset(); | 494 statistics_proxy_.reset(); |
477 EXPECT_EQ(1, metrics::NumSamples( | 495 EXPECT_EQ(1, metrics::NumSamples( |
478 "WebRTC.Video.BandwidthLimitedResolutionInPercent")); | 496 "WebRTC.Video.BandwidthLimitedResolutionInPercent")); |
479 EXPECT_EQ(1, metrics::NumEvents( | 497 EXPECT_EQ(1, metrics::NumEvents( |
480 "WebRTC.Video.BandwidthLimitedResolutionInPercent", 0)); | 498 "WebRTC.Video.BandwidthLimitedResolutionInPercent", 0)); |
481 // No resolution disabled. | 499 // No resolution disabled. |
482 EXPECT_EQ(0, metrics::NumSamples( | 500 EXPECT_EQ(0, metrics::NumSamples( |
483 "WebRTC.Video.BandwidthLimitedResolutionsDisabled")); | 501 "WebRTC.Video.BandwidthLimitedResolutionsDisabled")); |
484 } | 502 } |
485 | 503 |
486 TEST_F(SendStatisticsProxyTest, | 504 TEST_F(SendStatisticsProxyTest, |
487 BandwidthLimitedHistogramsUpdatedWhenEnabled_OneResolutionDisabled) { | 505 BandwidthLimitedHistogramsUpdatedWhenEnabled_OneResolutionDisabled) { |
488 const int kResolutionsDisabled = 1; | 506 const int kResolutionsDisabled = 1; |
489 EncodedImage encoded_image; | 507 EncodedImage encoded_image; |
490 encoded_image.adapt_reason_.bw_resolutions_disabled = kResolutionsDisabled; | 508 encoded_image.adapt_reason_.bw_resolutions_disabled = kResolutionsDisabled; |
491 for (int i = 0; i < kMinRequiredSamples; ++i) | 509 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
492 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); | 510 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); |
493 | 511 |
494 // Histograms are updated when the statistics_proxy_ is deleted. | 512 // Histograms are updated when the statistics_proxy_ is deleted. |
495 statistics_proxy_.reset(); | 513 statistics_proxy_.reset(); |
496 EXPECT_EQ(1, metrics::NumSamples( | 514 EXPECT_EQ(1, metrics::NumSamples( |
497 "WebRTC.Video.BandwidthLimitedResolutionInPercent")); | 515 "WebRTC.Video.BandwidthLimitedResolutionInPercent")); |
498 EXPECT_EQ(1, metrics::NumEvents( | 516 EXPECT_EQ(1, metrics::NumEvents( |
499 "WebRTC.Video.BandwidthLimitedResolutionInPercent", 100)); | 517 "WebRTC.Video.BandwidthLimitedResolutionInPercent", 100)); |
500 // Resolutions disabled. | 518 // Resolutions disabled. |
501 EXPECT_EQ(1, metrics::NumSamples( | 519 EXPECT_EQ(1, metrics::NumSamples( |
502 "WebRTC.Video.BandwidthLimitedResolutionsDisabled")); | 520 "WebRTC.Video.BandwidthLimitedResolutionsDisabled")); |
503 EXPECT_EQ( | 521 EXPECT_EQ( |
504 1, metrics::NumEvents("WebRTC.Video.BandwidthLimitedResolutionsDisabled", | 522 1, metrics::NumEvents("WebRTC.Video.BandwidthLimitedResolutionsDisabled", |
505 kResolutionsDisabled)); | 523 kResolutionsDisabled)); |
506 } | 524 } |
507 | 525 |
508 TEST_F(SendStatisticsProxyTest, | 526 TEST_F(SendStatisticsProxyTest, |
509 QualityLimitedHistogramsNotUpdatedWhenDisabled) { | 527 QualityLimitedHistogramsNotUpdatedWhenDisabled) { |
510 EncodedImage encoded_image; | 528 EncodedImage encoded_image; |
511 // encoded_image.adapt_reason_.quality_resolution_downscales disabled by | 529 // encoded_image.adapt_reason_.quality_resolution_downscales disabled by |
512 // default: -1 | 530 // default: -1 |
513 for (int i = 0; i < kMinRequiredSamples; ++i) | 531 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
514 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); | 532 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); |
515 | 533 |
516 // Histograms are updated when the statistics_proxy_ is deleted. | 534 // Histograms are updated when the statistics_proxy_ is deleted. |
517 statistics_proxy_.reset(); | 535 statistics_proxy_.reset(); |
518 EXPECT_EQ( | 536 EXPECT_EQ( |
519 0, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); | 537 0, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); |
520 EXPECT_EQ(0, metrics::NumSamples( | 538 EXPECT_EQ(0, metrics::NumSamples( |
521 "WebRTC.Video.QualityLimitedResolutionDownscales")); | 539 "WebRTC.Video.QualityLimitedResolutionDownscales")); |
522 } | 540 } |
523 | 541 |
524 TEST_F(SendStatisticsProxyTest, | 542 TEST_F(SendStatisticsProxyTest, |
525 QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) { | 543 QualityLimitedHistogramsUpdatedWhenEnabled_NoResolutionDownscale) { |
526 const int kDownscales = 0; | 544 const int kDownscales = 0; |
527 EncodedImage encoded_image; | 545 EncodedImage encoded_image; |
528 encoded_image.adapt_reason_.quality_resolution_downscales = kDownscales; | 546 encoded_image.adapt_reason_.quality_resolution_downscales = kDownscales; |
529 for (int i = 0; i < kMinRequiredSamples; ++i) | 547 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
530 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); | 548 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); |
531 | 549 |
532 // Histograms are updated when the statistics_proxy_ is deleted. | 550 // Histograms are updated when the statistics_proxy_ is deleted. |
533 statistics_proxy_.reset(); | 551 statistics_proxy_.reset(); |
534 EXPECT_EQ( | 552 EXPECT_EQ( |
535 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); | 553 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); |
536 EXPECT_EQ(1, metrics::NumEvents( | 554 EXPECT_EQ(1, metrics::NumEvents( |
537 "WebRTC.Video.QualityLimitedResolutionInPercent", 0)); | 555 "WebRTC.Video.QualityLimitedResolutionInPercent", 0)); |
538 // No resolution downscale. | 556 // No resolution downscale. |
539 EXPECT_EQ(0, metrics::NumSamples( | 557 EXPECT_EQ(0, metrics::NumSamples( |
540 "WebRTC.Video.QualityLimitedResolutionDownscales")); | 558 "WebRTC.Video.QualityLimitedResolutionDownscales")); |
541 } | 559 } |
542 | 560 |
543 TEST_F(SendStatisticsProxyTest, | 561 TEST_F(SendStatisticsProxyTest, |
544 QualityLimitedHistogramsUpdatedWhenEnabled_TwoResolutionDownscales) { | 562 QualityLimitedHistogramsUpdatedWhenEnabled_TwoResolutionDownscales) { |
545 const int kDownscales = 2; | 563 const int kDownscales = 2; |
546 EncodedImage encoded_image; | 564 EncodedImage encoded_image; |
547 encoded_image.adapt_reason_.quality_resolution_downscales = kDownscales; | 565 encoded_image.adapt_reason_.quality_resolution_downscales = kDownscales; |
548 for (int i = 0; i < kMinRequiredSamples; ++i) | 566 for (int i = 0; i < SendStatisticsProxy::kMinRequiredMetricsSamples; ++i) |
549 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); | 567 statistics_proxy_->OnSendEncodedImage(encoded_image, nullptr); |
550 | 568 |
551 // Histograms are updated when the statistics_proxy_ is deleted. | 569 // Histograms are updated when the statistics_proxy_ is deleted. |
552 statistics_proxy_.reset(); | 570 statistics_proxy_.reset(); |
553 EXPECT_EQ( | 571 EXPECT_EQ( |
554 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); | 572 1, metrics::NumSamples("WebRTC.Video.QualityLimitedResolutionInPercent")); |
555 EXPECT_EQ(1, metrics::NumEvents( | 573 EXPECT_EQ(1, metrics::NumEvents( |
556 "WebRTC.Video.QualityLimitedResolutionInPercent", 100)); | 574 "WebRTC.Video.QualityLimitedResolutionInPercent", 100)); |
557 // Resolution downscales. | 575 // Resolution downscales. |
558 EXPECT_EQ(1, metrics::NumSamples( | 576 EXPECT_EQ(1, metrics::NumSamples( |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 | 949 |
932 EXPECT_EQ( | 950 EXPECT_EQ( |
933 1, metrics::NumSamples("WebRTC.Video.Screenshare.FecBitrateSentInKbps")); | 951 1, metrics::NumSamples("WebRTC.Video.Screenshare.FecBitrateSentInKbps")); |
934 EXPECT_EQ(1, metrics::NumEvents( | 952 EXPECT_EQ(1, metrics::NumEvents( |
935 "WebRTC.Video.Screenshare.FecBitrateSentInKbps", | 953 "WebRTC.Video.Screenshare.FecBitrateSentInKbps", |
936 static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) / | 954 static_cast<int>((rtx_counters.fec.TotalBytes() * 2 * 8) / |
937 metrics::kMinRunTimeInSeconds / 1000))); | 955 metrics::kMinRunTimeInSeconds / 1000))); |
938 } | 956 } |
939 | 957 |
940 } // namespace webrtc | 958 } // namespace webrtc |
OLD | NEW |