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

Side by Side Diff: webrtc/media/engine/webrtcvideoengine2_unittest.cc

Issue 2304363002: Let ViEEncoder express resolution requests as Sinkwants (Closed)
Patch Set: Revert changes to OveruseFrameDetector. Fix merge mistake Created 4 years, 1 month 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) 2004 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2004 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
(...skipping 1967 matching lines...) Expand 10 before | Expand all | Expand 10 after
1978 AddSendStream(); 1978 AddSendStream();
1979 1979
1980 cricket::FakeVideoCapturer capturer; 1980 cricket::FakeVideoCapturer capturer;
1981 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); 1981 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
1982 ASSERT_EQ(cricket::CS_RUNNING, 1982 ASSERT_EQ(cricket::CS_RUNNING,
1983 capturer.Start(capturer.GetSupportedFormats()->front())); 1983 capturer.Start(capturer.GetSupportedFormats()->front()));
1984 ASSERT_TRUE(channel_->SetSend(true)); 1984 ASSERT_TRUE(channel_->SetSend(true));
1985 1985
1986 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 1986 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
1987 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 1987 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
1988 webrtc::LoadObserver* overuse_callback =
1989 send_stream->GetConfig().overuse_callback;
1990 ASSERT_TRUE(overuse_callback != NULL);
1991 1988
1992 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 1989 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
1993 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 1990 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
1994 EXPECT_EQ(1280, send_stream->GetLastWidth()); 1991 EXPECT_EQ(1280, send_stream->GetLastWidth());
1995 EXPECT_EQ(720, send_stream->GetLastHeight()); 1992 EXPECT_EQ(720, send_stream->GetLastHeight());
1996 1993
1997 // Trigger overuse. 1994 // Trigger overuse.
1998 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 1995 rtc::VideoSinkWants wants;
1996 wants.max_pixel_count = rtc::Optional<int>(
1997 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1);
1998 send_stream->InjectVideoSinkWants(wants);
1999 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 1999 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2000 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2000 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2001 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); 2001 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2002 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); 2002 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2003 2003
2004 // Trigger overuse again. 2004 // Trigger overuse again.
2005 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2005 wants.max_pixel_count = rtc::Optional<int>(
2006 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1);
2007 send_stream->InjectVideoSinkWants(wants);
2006 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2008 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2007 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 2009 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
2008 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); 2010 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth());
2009 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); 2011 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight());
2010 2012
2011 // Trigger overuse again. This should not decrease the resolution since we
2012 // should only adapt the resolution down max two steps.
2013 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2014 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2015 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames());
2016 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth());
2017 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight());
2018
2019 // Change input resolution. 2013 // Change input resolution.
2020 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2014 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2021 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); 2015 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames());
2022 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth()); 2016 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth());
2023 EXPECT_EQ(724 / 2, send_stream->GetLastHeight()); 2017 EXPECT_EQ(724 / 2, send_stream->GetLastHeight());
2024 2018
2025 // Trigger underuse which should go back up in resolution. 2019 // Trigger underuse which should go back up in resolution.
2026 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2020 wants.max_pixel_count = rtc::Optional<int>();
2021 wants.max_pixel_count_step_up = rtc::Optional<int>(
2022 send_stream->GetLastWidth() * send_stream->GetLastHeight());
2023 send_stream->InjectVideoSinkWants(wants);
2027 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2024 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2028 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); 2025 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames());
2029 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); 2026 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth());
2030 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); 2027 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight());
2031 2028
2032 // Trigger underuse which should go back up in resolution. 2029 // Trigger underuse which should go back up in resolution.
2033 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2030 wants.max_pixel_count = rtc::Optional<int>();
2031 wants.max_pixel_count_step_up = rtc::Optional<int>(
2032 send_stream->GetLastWidth() * send_stream->GetLastHeight());
2033 send_stream->InjectVideoSinkWants(wants);
2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2035 EXPECT_EQ(7, send_stream->GetNumberOfSwappedFrames()); 2035 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames());
2036 EXPECT_EQ(1284, send_stream->GetLastWidth()); 2036 EXPECT_EQ(1284, send_stream->GetLastWidth());
2037 EXPECT_EQ(724, send_stream->GetLastHeight()); 2037 EXPECT_EQ(724, send_stream->GetLastHeight());
2038 2038
2039 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); 2039 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2040 } 2040 }
2041 2041
2042 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { 2042 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) {
2043 cricket::VideoCodec codec = kVp8Codec; 2043 cricket::VideoCodec codec = kVp8Codec;
2044 cricket::VideoSendParameters parameters; 2044 cricket::VideoSendParameters parameters;
2045 parameters.codecs.push_back(codec); 2045 parameters.codecs.push_back(codec);
2046 2046
2047 MediaConfig media_config = MediaConfig(); 2047 MediaConfig media_config = MediaConfig();
2048 channel_.reset( 2048 channel_.reset(
2049 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 2049 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
2050 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2050 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2051 2051
2052 AddSendStream(); 2052 AddSendStream();
2053 2053
2054 cricket::FakeVideoCapturer capturer; 2054 cricket::FakeVideoCapturer capturer;
2055 ASSERT_EQ(cricket::CS_RUNNING, 2055 ASSERT_EQ(cricket::CS_RUNNING,
2056 capturer.Start(capturer.GetSupportedFormats()->front())); 2056 capturer.Start(capturer.GetSupportedFormats()->front()));
2057 ASSERT_TRUE(channel_->SetSend(true)); 2057 ASSERT_TRUE(channel_->SetSend(true));
2058 cricket::VideoOptions camera_options; 2058 cricket::VideoOptions camera_options;
2059 camera_options.is_screencast = rtc::Optional<bool>(false);
2059 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options, 2060 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options,
2060 &capturer); 2061 &capturer);
2061 2062
2062 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2063 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2063 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2064 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2064 webrtc::LoadObserver* overuse_callback =
2065 send_stream->GetConfig().overuse_callback;
2066 ASSERT_TRUE(overuse_callback != NULL);
2067 2065
2068 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2066 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2069 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2067 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2070 EXPECT_EQ(1280, send_stream->GetLastWidth()); 2068 EXPECT_EQ(1280, send_stream->GetLastWidth());
2071 EXPECT_EQ(720, send_stream->GetLastHeight()); 2069 EXPECT_EQ(720, send_stream->GetLastHeight());
2072 2070
2073 // Trigger overuse. 2071 // Trigger overuse.
2074 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2072 rtc::VideoSinkWants wants;
2073 wants.max_pixel_count = rtc::Optional<int>(
2074 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1);
2075 send_stream->InjectVideoSinkWants(wants);
2075 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2076 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2076 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2077 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2077 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); 2078 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2078 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); 2079 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2079 2080
2080 // Switch to screen share. Expect no CPU adaptation. 2081 // Switch to screen share. Expect no CPU adaptation.
2081 cricket::FakeVideoCapturer screen_share(true); 2082 cricket::FakeVideoCapturer screen_share(true);
2082 ASSERT_EQ(cricket::CS_RUNNING, 2083 ASSERT_EQ(cricket::CS_RUNNING,
2083 screen_share.Start(screen_share.GetSupportedFormats()->front())); 2084 screen_share.Start(screen_share.GetSupportedFormats()->front()));
2084 cricket::VideoOptions screenshare_options; 2085 cricket::VideoOptions screenshare_options;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2120 2121
2121 cricket::FakeVideoCapturer capturer; 2122 cricket::FakeVideoCapturer capturer;
2122 VideoOptions options; 2123 VideoOptions options;
2123 options.is_screencast = rtc::Optional<bool>(is_screenshare); 2124 options.is_screencast = rtc::Optional<bool>(is_screenshare);
2124 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); 2125 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
2125 cricket::VideoFormat capture_format = capturer.GetSupportedFormats()->front(); 2126 cricket::VideoFormat capture_format = capturer.GetSupportedFormats()->front();
2126 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format)); 2127 EXPECT_EQ(cricket::CS_RUNNING, capturer.Start(capture_format));
2127 2128
2128 EXPECT_TRUE(channel_->SetSend(true)); 2129 EXPECT_TRUE(channel_->SetSend(true));
2129 2130
2130 // Trigger overuse.
2131 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2132 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2131 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2133 webrtc::LoadObserver* overuse_callback =
2134 send_stream->GetConfig().overuse_callback;
2135 2132
2136 if (!enable_overuse) { 2133 if (!enable_overuse || is_screenshare) {
2137 ASSERT_TRUE(overuse_callback == NULL); 2134 EXPECT_FALSE(send_stream->resolution_scaling_enabled());
2138 2135
2139 EXPECT_TRUE(capturer.CaptureFrame()); 2136 EXPECT_TRUE(capturer.CaptureFrame());
2140 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2137 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2141 2138
2142 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); 2139 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth());
2143 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); 2140 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight());
2144 2141
2145 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); 2142 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2146 return; 2143 return;
2147 } 2144 }
2148 2145
2149 ASSERT_TRUE(overuse_callback != NULL); 2146 EXPECT_TRUE(send_stream->resolution_scaling_enabled());
2147 // Trigger overuse.
2148 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2149
2150 rtc::VideoSinkWants wants;
2151 wants.max_pixel_count =
2152 rtc::Optional<int>(capture_format.width * capture_format.height - 1);
2153 send_stream->InjectVideoSinkWants(wants);
2154
2150 EXPECT_TRUE(capturer.CaptureFrame()); 2155 EXPECT_TRUE(capturer.CaptureFrame());
2151 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2156 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2152 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2153 2157
2154 EXPECT_TRUE(capturer.CaptureFrame()); 2158 EXPECT_TRUE(capturer.CaptureFrame());
2155 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2159 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2156 2160
2157 if (is_screenshare) { 2161 EXPECT_LT(send_stream->GetLastWidth(), capture_format.width);
2158 // Do not adapt screen share. 2162 EXPECT_LT(send_stream->GetLastHeight(), capture_format.height);
2159 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth());
2160 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight());
2161 } else {
2162 EXPECT_LT(send_stream->GetLastWidth(), capture_format.width);
2163 EXPECT_LT(send_stream->GetLastHeight(), capture_format.height);
2164 }
2165 2163
2166 // Trigger underuse which should go back to normal resolution. 2164 // Trigger underuse which should go back to normal resolution.
2167 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2165 wants.max_pixel_count = rtc::Optional<int>();
2166 wants.max_pixel_count_step_up = rtc::Optional<int>(
2167 send_stream->GetLastWidth() * send_stream->GetLastHeight());
2168 send_stream->InjectVideoSinkWants(wants);
2169
2168 EXPECT_TRUE(capturer.CaptureFrame()); 2170 EXPECT_TRUE(capturer.CaptureFrame());
2169 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 2171 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
2170 2172
2171 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth()); 2173 EXPECT_EQ(capture_format.width, send_stream->GetLastWidth());
2172 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight()); 2174 EXPECT_EQ(capture_format.height, send_stream->GetLastHeight());
2173 2175
2174 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); 2176 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2175 } 2177 }
2176 2178
2177 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { 2179 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) {
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after
2895 webrtc::VideoSendStream::Stats stats; 2897 webrtc::VideoSendStream::Stats stats;
2896 stats.preferred_media_bitrate_bps = 5; 2898 stats.preferred_media_bitrate_bps = 5;
2897 stream->SetStats(stats); 2899 stream->SetStats(stats);
2898 2900
2899 cricket::VideoMediaInfo info; 2901 cricket::VideoMediaInfo info;
2900 ASSERT_TRUE(channel_->GetStats(&info)); 2902 ASSERT_TRUE(channel_->GetStats(&info));
2901 ASSERT_EQ(1u, info.senders.size()); 2903 ASSERT_EQ(1u, info.senders.size());
2902 EXPECT_EQ(5, info.senders[0].preferred_bitrate); 2904 EXPECT_EQ(5, info.senders[0].preferred_bitrate);
2903 } 2905 }
2904 2906
2905 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) { 2907 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuAdaptationStats) {
2906 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2908 FakeVideoSendStream* stream = AddSendStream();
2909 webrtc::VideoSendStream::Stats stats;
2910 stats.number_of_cpu_adapt_changes = 2;
2911 stats.cpu_limited_resolution = true;
2912 stream->SetStats(stats);
2907 2913
2908 // Capture format VGA.
2909 cricket::FakeVideoCapturer video_capturer_vga;
2910 const std::vector<cricket::VideoFormat>* formats =
2911 video_capturer_vga.GetSupportedFormats();
2912 cricket::VideoFormat capture_format_vga = (*formats)[1];
2913 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
2914 EXPECT_TRUE(
2915 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga));
2916 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2917
2918 cricket::VideoCodec send_codec(100, "VP8");
2919 cricket::VideoSendParameters parameters;
2920 parameters.codecs.push_back(send_codec);
2921 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2922 EXPECT_TRUE(channel_->SetSend(true));
2923
2924 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
2925
2926 // Trigger overuse.
2927 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2928 webrtc::LoadObserver* overuse_callback =
2929 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback;
2930 ASSERT_TRUE(overuse_callback != NULL);
2931 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2932
2933 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2.
2934 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2935 cricket::VideoMediaInfo info;
2936 EXPECT_TRUE(channel_->GetStats(&info));
2937 ASSERT_EQ(1U, info.senders.size());
2938 EXPECT_EQ(1, info.senders[0].adapt_changes);
2939 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2940
2941 // Trigger upgrade and verify that we adapt back up to VGA.
2942 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2943 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2944 info.Clear();
2945 EXPECT_TRUE(channel_->GetStats(&info));
2946 ASSERT_EQ(1U, info.senders.size());
2947 EXPECT_EQ(2, info.senders[0].adapt_changes);
2948 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2949 info.senders[0].adapt_reason);
2950
2951 // No capturer (no adapter). Adapt changes from old adapter should be kept.
2952 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
2953 info.Clear();
2954 EXPECT_TRUE(channel_->GetStats(&info));
2955 ASSERT_EQ(1U, info.senders.size());
2956 EXPECT_EQ(2, info.senders[0].adapt_changes);
2957 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2958 info.senders[0].adapt_reason);
2959
2960 // Set new capturer, capture format HD.
2961 cricket::FakeVideoCapturer video_capturer_hd;
2962 cricket::VideoFormat capture_format_hd = (*formats)[0];
2963 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd));
2964 EXPECT_TRUE(
2965 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_hd));
2966 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2967
2968 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2.
2969 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2970 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2971 info.Clear();
2972 EXPECT_TRUE(channel_->GetStats(&info));
2973 ASSERT_EQ(1U, info.senders.size());
2974 EXPECT_EQ(3, info.senders[0].adapt_changes);
2975 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2976
2977 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
2978 }
2979
2980 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) {
2981 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
2982
2983 // Capture format VGA.
2984 cricket::FakeVideoCapturer video_capturer_vga;
2985 const std::vector<cricket::VideoFormat>* formats =
2986 video_capturer_vga.GetSupportedFormats();
2987 cricket::VideoFormat capture_format_vga = (*formats)[1];
2988 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
2989 EXPECT_TRUE(
2990 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga));
2991 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2992
2993 cricket::VideoCodec send_codec(100, "VP8");
2994 cricket::VideoSendParameters parameters;
2995 parameters.codecs.push_back(send_codec);
2996 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2997 EXPECT_TRUE(channel_->SetSend(true));
2998
2999 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
3000
3001 // Trigger overuse -> adapt CPU.
3002 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
3003 webrtc::LoadObserver* overuse_callback =
3004 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback;
3005 ASSERT_TRUE(overuse_callback != NULL);
3006 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
3007 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
3008 cricket::VideoMediaInfo info; 2914 cricket::VideoMediaInfo info;
3009 EXPECT_TRUE(channel_->GetStats(&info)); 2915 EXPECT_TRUE(channel_->GetStats(&info));
3010 ASSERT_EQ(1U, info.senders.size()); 2916 ASSERT_EQ(1U, info.senders.size());
3011 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); 2917 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2918 EXPECT_EQ(2, info.senders[0].adapt_changes);
åsapersson 2016/10/31 08:43:01 2 -> stats.number_of_cpu_adapt_changes
perkj_webrtc 2016/10/31 19:45:18 Done.
2919 }
3012 2920
3013 // Set bandwidth limitation stats for the stream -> adapt CPU + BW. 2921 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsAdaptationAndBandwidthStats) {
2922 FakeVideoSendStream* stream = AddSendStream();
3014 webrtc::VideoSendStream::Stats stats; 2923 webrtc::VideoSendStream::Stats stats;
2924 stats.number_of_cpu_adapt_changes = 2;
2925 stats.cpu_limited_resolution = true;
3015 stats.bw_limited_resolution = true; 2926 stats.bw_limited_resolution = true;
3016 fake_call_->GetVideoSendStreams().front()->SetStats(stats); 2927 stream->SetStats(stats);
3017 info.Clear(); 2928
2929 cricket::VideoMediaInfo info;
3018 EXPECT_TRUE(channel_->GetStats(&info)); 2930 EXPECT_TRUE(channel_->GetStats(&info));
3019 ASSERT_EQ(1U, info.senders.size()); 2931 ASSERT_EQ(1U, info.senders.size());
3020 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU | 2932 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU |
3021 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, 2933 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH,
3022 info.senders[0].adapt_reason); 2934 info.senders[0].adapt_reason);
3023 2935 EXPECT_EQ(2, info.senders[0].adapt_changes);
åsapersson 2016/10/31 08:43:02 ditto
perkj_webrtc 2016/10/31 19:45:18 Done.
3024 // Trigger upgrade -> adapt BW.
3025 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
3026 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
3027 info.Clear();
3028 EXPECT_TRUE(channel_->GetStats(&info));
3029 ASSERT_EQ(1U, info.senders.size());
3030 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH,
3031 info.senders[0].adapt_reason);
3032
3033 // Reset bandwidth limitation state -> adapt NONE.
3034 stats.bw_limited_resolution = false;
3035 fake_call_->GetVideoSendStreams().front()->SetStats(stats);
3036 info.Clear();
3037 EXPECT_TRUE(channel_->GetStats(&info));
3038 ASSERT_EQ(1U, info.senders.size());
3039 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
3040 info.senders[0].adapt_reason);
3041
3042 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
3043 } 2936 }
3044 2937
3045 TEST_F(WebRtcVideoChannel2Test, 2938 TEST_F(WebRtcVideoChannel2Test,
3046 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { 2939 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) {
3047 FakeVideoSendStream* stream = AddSendStream(); 2940 FakeVideoSendStream* stream = AddSendStream();
3048 webrtc::VideoSendStream::Stats stats; 2941 webrtc::VideoSendStream::Stats stats;
3049 stats.bw_limited_resolution = true; 2942 stats.bw_limited_resolution = true;
3050 stream->SetStats(stats); 2943 stream->SetStats(stats);
3051 2944
3052 cricket::VideoMediaInfo info; 2945 cricket::VideoMediaInfo info;
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after
3836 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) { 3729 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWith3SimulcastStreams) {
3837 VerifySimulcastSettings(kVp8Codec, 1280, 720, 3, 3); 3730 VerifySimulcastSettings(kVp8Codec, 1280, 720, 3, 3);
3838 } 3731 }
3839 3732
3840 // Test that we normalize send codec format size in simulcast. 3733 // Test that we normalize send codec format size in simulcast.
3841 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 3734 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
3842 cricket::VideoCodec codec(kVp8Codec); 3735 cricket::VideoCodec codec(kVp8Codec);
3843 VerifySimulcastSettings(codec, 541, 271, 2, 2); 3736 VerifySimulcastSettings(codec, 541, 271, 2, 2);
3844 } 3737 }
3845 } // namespace cricket 3738 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698