Index: webrtc/media/engine/webrtcvideoengine2_unittest.cc |
diff --git a/webrtc/media/engine/webrtcvideoengine2_unittest.cc b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
index d3a604735df1d3ae7d60ae8b596039fee32465da..71156a6db0c93f8aa529cd956b687329a772bf2a 100644 |
--- a/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
+++ b/webrtc/media/engine/webrtcvideoengine2_unittest.cc |
@@ -1988,9 +1988,6 @@ TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruseAndChangeResolution) { |
ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
- webrtc::LoadObserver* overuse_callback = |
- send_stream->GetConfig().overuse_callback; |
- ASSERT_TRUE(overuse_callback != NULL); |
EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
@@ -1998,44 +1995,47 @@ TEST_F(WebRtcVideoChannel2Test, AdaptsOnOveruseAndChangeResolution) { |
EXPECT_EQ(720, send_stream->GetLastHeight()); |
// Trigger overuse. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
+ rtc::VideoSinkWants wants; |
+ wants.max_pixel_count = rtc::Optional<int>( |
+ send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); |
+ send_stream->InjectVideoSinkWants(wants); |
EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); |
EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); |
// Trigger overuse again. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
+ wants.max_pixel_count = rtc::Optional<int>( |
+ send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); |
+ send_stream->InjectVideoSinkWants(wants); |
EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); |
EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); |
EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); |
- // Trigger overuse again. This should not decrease the resolution since we |
- // should only adapt the resolution down max two steps. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
- EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
- EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames()); |
- EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); |
- EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); |
- |
// Change input resolution. |
EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
- EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); |
+ EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames()); |
EXPECT_EQ(1284 / 2, send_stream->GetLastWidth()); |
EXPECT_EQ(724 / 2, send_stream->GetLastHeight()); |
// Trigger underuse which should go back up in resolution. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); |
+ wants.max_pixel_count = rtc::Optional<int>(); |
+ wants.max_pixel_count_step_up = rtc::Optional<int>( |
+ send_stream->GetLastWidth() * send_stream->GetLastHeight()); |
+ send_stream->InjectVideoSinkWants(wants); |
EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
- EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); |
+ EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); |
EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); |
EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); |
// Trigger underuse which should go back up in resolution. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); |
+ wants.max_pixel_count = rtc::Optional<int>(); |
+ wants.max_pixel_count_step_up = rtc::Optional<int>( |
+ send_stream->GetLastWidth() * send_stream->GetLastHeight()); |
+ send_stream->InjectVideoSinkWants(wants); |
EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); |
- EXPECT_EQ(7, send_stream->GetNumberOfSwappedFrames()); |
+ EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); |
EXPECT_EQ(1284, send_stream->GetLastWidth()); |
EXPECT_EQ(724, send_stream->GetLastHeight()); |
@@ -2059,14 +2059,12 @@ TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { |
capturer.Start(capturer.GetSupportedFormats()->front())); |
ASSERT_TRUE(channel_->SetSend(true)); |
cricket::VideoOptions camera_options; |
+ camera_options.is_screencast = rtc::Optional<bool>(false); |
channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options, |
&capturer); |
ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
- webrtc::LoadObserver* overuse_callback = |
- send_stream->GetConfig().overuse_callback; |
- ASSERT_TRUE(overuse_callback != NULL); |
EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
@@ -2074,7 +2072,10 @@ TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { |
EXPECT_EQ(720, send_stream->GetLastHeight()); |
// Trigger overuse. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
+ rtc::VideoSinkWants wants; |
+ wants.max_pixel_count = rtc::Optional<int>( |
+ send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1); |
+ send_stream->InjectVideoSinkWants(wants); |
EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); |
EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); |
@@ -2130,14 +2131,10 @@ void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, |
EXPECT_TRUE(channel_->SetSend(true)); |
- // Trigger overuse. |
- ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); |
- webrtc::LoadObserver* overuse_callback = |
- send_stream->GetConfig().overuse_callback; |
- if (!enable_overuse) { |
- ASSERT_TRUE(overuse_callback == NULL); |
+ if (!enable_overuse || is_screenshare) { |
+ EXPECT_FALSE(send_stream->resolution_scaling_enabled()); |
EXPECT_TRUE(capturer.CaptureFrame()); |
EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
@@ -2149,25 +2146,30 @@ void WebRtcVideoChannel2Test::TestCpuAdaptation(bool enable_overuse, |
return; |
} |
- ASSERT_TRUE(overuse_callback != NULL); |
+ EXPECT_TRUE(send_stream->resolution_scaling_enabled()); |
+ // Trigger overuse. |
+ ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
+ |
+ rtc::VideoSinkWants wants; |
+ wants.max_pixel_count = |
+ rtc::Optional<int>(capture_format.width * capture_format.height - 1); |
+ send_stream->InjectVideoSinkWants(wants); |
+ |
EXPECT_TRUE(capturer.CaptureFrame()); |
EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
EXPECT_TRUE(capturer.CaptureFrame()); |
EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); |
- if (is_screenshare) { |
- // Do not adapt screen share. |
- EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); |
- EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); |
- } else { |
- EXPECT_LT(send_stream->GetLastWidth(), capture_format.width); |
- EXPECT_LT(send_stream->GetLastHeight(), capture_format.height); |
- } |
+ EXPECT_LT(send_stream->GetLastWidth(), capture_format.width); |
+ EXPECT_LT(send_stream->GetLastHeight(), capture_format.height); |
// Trigger underuse which should go back to normal resolution. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); |
+ wants.max_pixel_count = rtc::Optional<int>(); |
+ wants.max_pixel_count_step_up = rtc::Optional<int>( |
+ send_stream->GetLastWidth() * send_stream->GetLastHeight()); |
+ send_stream->InjectVideoSinkWants(wants); |
+ |
EXPECT_TRUE(capturer.CaptureFrame()); |
EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); |
@@ -2916,144 +2918,35 @@ TEST_F(WebRtcVideoChannel2Test, GetStatsReportsPreferredBitrate) { |
EXPECT_EQ(5, info.senders[0].preferred_bitrate); |
} |
-TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) { |
- AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); |
- |
- // Capture format VGA. |
- cricket::FakeVideoCapturer video_capturer_vga; |
- const std::vector<cricket::VideoFormat>* formats = |
- video_capturer_vga.GetSupportedFormats(); |
- cricket::VideoFormat capture_format_vga = (*formats)[1]; |
- EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); |
- EXPECT_TRUE( |
- channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga)); |
- EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
- |
- cricket::VideoCodec send_codec(100, "VP8"); |
- cricket::VideoSendParameters parameters; |
- parameters.codecs.push_back(send_codec); |
- EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
- EXPECT_TRUE(channel_->SetSend(true)); |
- |
- // Verify that the CpuOveruseObserver is registered and trigger downgrade. |
- |
- // Trigger overuse. |
- ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
- webrtc::LoadObserver* overuse_callback = |
- fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; |
- ASSERT_TRUE(overuse_callback != NULL); |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
+TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuAdaptationStats) { |
+ FakeVideoSendStream* stream = AddSendStream(); |
+ webrtc::VideoSendStream::Stats stats; |
+ stats.number_of_cpu_adapt_changes = 2; |
+ stats.cpu_limited_resolution = true; |
+ stream->SetStats(stats); |
- // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2. |
- EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
cricket::VideoMediaInfo info; |
EXPECT_TRUE(channel_->GetStats(&info)); |
ASSERT_EQ(1U, info.senders.size()); |
- EXPECT_EQ(1, info.senders[0].adapt_changes); |
EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); |
- |
- // Trigger upgrade and verify that we adapt back up to VGA. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); |
- EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
- info.Clear(); |
- EXPECT_TRUE(channel_->GetStats(&info)); |
- ASSERT_EQ(1U, info.senders.size()); |
- EXPECT_EQ(2, info.senders[0].adapt_changes); |
- EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, |
- info.senders[0].adapt_reason); |
- |
- // No capturer (no adapter). Adapt changes from old adapter should be kept. |
- EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); |
- info.Clear(); |
- EXPECT_TRUE(channel_->GetStats(&info)); |
- ASSERT_EQ(1U, info.senders.size()); |
- EXPECT_EQ(2, info.senders[0].adapt_changes); |
- EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, |
- info.senders[0].adapt_reason); |
- |
- // Set new capturer, capture format HD. |
- cricket::FakeVideoCapturer video_capturer_hd; |
- cricket::VideoFormat capture_format_hd = (*formats)[0]; |
- EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd)); |
- EXPECT_TRUE( |
- channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_hd)); |
- EXPECT_TRUE(video_capturer_hd.CaptureFrame()); |
- |
- // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
- EXPECT_TRUE(video_capturer_hd.CaptureFrame()); |
- info.Clear(); |
- EXPECT_TRUE(channel_->GetStats(&info)); |
- ASSERT_EQ(1U, info.senders.size()); |
- EXPECT_EQ(3, info.senders[0].adapt_changes); |
- EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); |
- |
- EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); |
+ EXPECT_EQ(stats.number_of_cpu_adapt_changes, info.senders[0].adapt_changes); |
} |
-TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) { |
- AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); |
- |
- // Capture format VGA. |
- cricket::FakeVideoCapturer video_capturer_vga; |
- const std::vector<cricket::VideoFormat>* formats = |
- video_capturer_vga.GetSupportedFormats(); |
- cricket::VideoFormat capture_format_vga = (*formats)[1]; |
- EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga)); |
- EXPECT_TRUE( |
- channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga)); |
- EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
- |
- cricket::VideoCodec send_codec(100, "VP8"); |
- cricket::VideoSendParameters parameters; |
- parameters.codecs.push_back(send_codec); |
- EXPECT_TRUE(channel_->SetSendParameters(parameters)); |
- EXPECT_TRUE(channel_->SetSend(true)); |
- |
- // Verify that the CpuOveruseObserver is registered and trigger downgrade. |
- |
- // Trigger overuse -> adapt CPU. |
- ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); |
- webrtc::LoadObserver* overuse_callback = |
- fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback; |
- ASSERT_TRUE(overuse_callback != NULL); |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); |
- EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
- cricket::VideoMediaInfo info; |
- EXPECT_TRUE(channel_->GetStats(&info)); |
- ASSERT_EQ(1U, info.senders.size()); |
- EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); |
- |
- // Set bandwidth limitation stats for the stream -> adapt CPU + BW. |
+TEST_F(WebRtcVideoChannel2Test, GetStatsReportsAdaptationAndBandwidthStats) { |
+ FakeVideoSendStream* stream = AddSendStream(); |
webrtc::VideoSendStream::Stats stats; |
+ stats.number_of_cpu_adapt_changes = 2; |
+ stats.cpu_limited_resolution = true; |
stats.bw_limited_resolution = true; |
- fake_call_->GetVideoSendStreams().front()->SetStats(stats); |
- info.Clear(); |
+ stream->SetStats(stats); |
+ |
+ cricket::VideoMediaInfo info; |
EXPECT_TRUE(channel_->GetStats(&info)); |
ASSERT_EQ(1U, info.senders.size()); |
EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU | |
WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, |
info.senders[0].adapt_reason); |
- |
- // Trigger upgrade -> adapt BW. |
- overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); |
- EXPECT_TRUE(video_capturer_vga.CaptureFrame()); |
- info.Clear(); |
- EXPECT_TRUE(channel_->GetStats(&info)); |
- ASSERT_EQ(1U, info.senders.size()); |
- EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, |
- info.senders[0].adapt_reason); |
- |
- // Reset bandwidth limitation state -> adapt NONE. |
- stats.bw_limited_resolution = false; |
- fake_call_->GetVideoSendStreams().front()->SetStats(stats); |
- info.Clear(); |
- EXPECT_TRUE(channel_->GetStats(&info)); |
- ASSERT_EQ(1U, info.senders.size()); |
- EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE, |
- info.senders[0].adapt_reason); |
- |
- EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr)); |
+ EXPECT_EQ(stats.number_of_cpu_adapt_changes, info.senders[0].adapt_changes); |
} |
TEST_F(WebRtcVideoChannel2Test, |