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

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

Issue 2304363002: Let ViEEncoder express resolution requests as Sinkwants (Closed)
Patch Set: Fix broken test RunOnTqNormalUsage. Created 4 years, 2 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) 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 1987 matching lines...) Expand 10 before | Expand all | Expand 10 after
1998 AddSendStream(); 1998 AddSendStream();
1999 1999
2000 cricket::FakeVideoCapturer capturer; 2000 cricket::FakeVideoCapturer capturer;
2001 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer)); 2001 ASSERT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, &capturer));
2002 ASSERT_EQ(cricket::CS_RUNNING, 2002 ASSERT_EQ(cricket::CS_RUNNING,
2003 capturer.Start(capturer.GetSupportedFormats()->front())); 2003 capturer.Start(capturer.GetSupportedFormats()->front()));
2004 ASSERT_TRUE(channel_->SetSend(true)); 2004 ASSERT_TRUE(channel_->SetSend(true));
2005 2005
2006 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2006 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2007 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2007 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2008 webrtc::LoadObserver* overuse_callback =
2009 send_stream->GetConfig().overuse_callback;
2010 ASSERT_TRUE(overuse_callback != NULL);
2011 2008
2012 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2009 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2013 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2010 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2014 EXPECT_EQ(1280, send_stream->GetLastWidth()); 2011 EXPECT_EQ(1280, send_stream->GetLastWidth());
2015 EXPECT_EQ(720, send_stream->GetLastHeight()); 2012 EXPECT_EQ(720, send_stream->GetLastHeight());
2016 2013
2017 // Trigger overuse. 2014 // Trigger overuse.
2018 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2015 rtc::VideoSinkWants wants;
2016 wants.max_pixel_count = rtc::Optional<int>(
2017 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1);
2018 send_stream->InjectVideoSinkWants(wants);
2019 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2019 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2020 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2020 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2021 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); 2021 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2022 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); 2022 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2023 2023
2024 // Trigger overuse again. 2024 // Trigger overuse again.
2025 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2025 wants.max_pixel_count = rtc::Optional<int>(
2026 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1);
2027 send_stream->InjectVideoSinkWants(wants);
2026 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2028 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2027 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 2029 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
2028 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth()); 2030 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth());
2029 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight()); 2031 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight());
2030 2032
2031 // Trigger overuse again. This should not decrease the resolution since we
2032 // should only adapt the resolution down max two steps.
2033 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2035 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames());
2036 EXPECT_EQ(1280 * 2 / 4, send_stream->GetLastWidth());
2037 EXPECT_EQ(720 * 2 / 4, send_stream->GetLastHeight());
2038
2039 // Change input resolution. 2033 // Change input resolution.
2040 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2034 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2041 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames()); 2035 EXPECT_EQ(4, send_stream->GetNumberOfSwappedFrames());
2042 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth()); 2036 EXPECT_EQ(1284 / 2, send_stream->GetLastWidth());
2043 EXPECT_EQ(724 / 2, send_stream->GetLastHeight()); 2037 EXPECT_EQ(724 / 2, send_stream->GetLastHeight());
2044 2038
2045 // Trigger underuse which should go back up in resolution. 2039 // Trigger underuse which should go back up in resolution.
2046 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2040 wants.max_pixel_count = rtc::Optional<int>();
2041 wants.max_pixel_count_step_up = rtc::Optional<int>(
2042 send_stream->GetLastWidth() * send_stream->GetLastHeight());
2043 send_stream->InjectVideoSinkWants(wants);
2047 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2044 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2048 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames()); 2045 EXPECT_EQ(5, send_stream->GetNumberOfSwappedFrames());
2049 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth()); 2046 EXPECT_EQ(1284 * 3 / 4, send_stream->GetLastWidth());
2050 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight()); 2047 EXPECT_EQ(724 * 3 / 4, send_stream->GetLastHeight());
2051 2048
2052 // Trigger underuse which should go back up in resolution. 2049 // Trigger underuse which should go back up in resolution.
2053 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2050 wants.max_pixel_count = rtc::Optional<int>();
2051 wants.max_pixel_count_step_up = rtc::Optional<int>(
2052 send_stream->GetLastWidth() * send_stream->GetLastHeight());
2053 send_stream->InjectVideoSinkWants(wants);
2054 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420)); 2054 EXPECT_TRUE(capturer.CaptureCustomFrame(1284, 724, cricket::FOURCC_I420));
2055 EXPECT_EQ(7, send_stream->GetNumberOfSwappedFrames()); 2055 EXPECT_EQ(6, send_stream->GetNumberOfSwappedFrames());
2056 EXPECT_EQ(1284, send_stream->GetLastWidth()); 2056 EXPECT_EQ(1284, send_stream->GetLastWidth());
2057 EXPECT_EQ(724, send_stream->GetLastHeight()); 2057 EXPECT_EQ(724, send_stream->GetLastHeight());
2058 2058
2059 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); 2059 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2060 } 2060 }
2061 2061
2062 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) { 2062 TEST_F(WebRtcVideoChannel2Test, PreviousAdaptationDoesNotApplyToScreenshare) {
2063 cricket::VideoCodec codec = kVp8Codec720p; 2063 cricket::VideoCodec codec = kVp8Codec720p;
2064 cricket::VideoSendParameters parameters; 2064 cricket::VideoSendParameters parameters;
2065 parameters.codecs.push_back(codec); 2065 parameters.codecs.push_back(codec);
2066 2066
2067 MediaConfig media_config = MediaConfig(); 2067 MediaConfig media_config = MediaConfig();
2068 channel_.reset( 2068 channel_.reset(
2069 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions())); 2069 engine_.CreateChannel(fake_call_.get(), media_config, VideoOptions()));
2070 ASSERT_TRUE(channel_->SetSendParameters(parameters)); 2070 ASSERT_TRUE(channel_->SetSendParameters(parameters));
2071 2071
2072 AddSendStream(); 2072 AddSendStream();
2073 2073
2074 cricket::FakeVideoCapturer capturer; 2074 cricket::FakeVideoCapturer capturer;
2075 ASSERT_EQ(cricket::CS_RUNNING, 2075 ASSERT_EQ(cricket::CS_RUNNING,
2076 capturer.Start(capturer.GetSupportedFormats()->front())); 2076 capturer.Start(capturer.GetSupportedFormats()->front()));
2077 ASSERT_TRUE(channel_->SetSend(true)); 2077 ASSERT_TRUE(channel_->SetSend(true));
2078 cricket::VideoOptions camera_options; 2078 cricket::VideoOptions camera_options;
2079 camera_options.is_screencast = rtc::Optional<bool>(false);
2079 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options, 2080 channel_->SetVideoSend(last_ssrc_, true /* enable */, &camera_options,
2080 &capturer); 2081 &capturer);
2081 2082
2082 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size()); 2083 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2083 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2084 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2084 webrtc::LoadObserver* overuse_callback =
2085 send_stream->GetConfig().overuse_callback;
2086 ASSERT_TRUE(overuse_callback != NULL);
2087 2085
2088 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2086 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2089 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2087 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2090 EXPECT_EQ(1280, send_stream->GetLastWidth()); 2088 EXPECT_EQ(1280, send_stream->GetLastWidth());
2091 EXPECT_EQ(720, send_stream->GetLastHeight()); 2089 EXPECT_EQ(720, send_stream->GetLastHeight());
2092 2090
2093 // Trigger overuse. 2091 // Trigger overuse.
2094 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse); 2092 rtc::VideoSinkWants wants;
2093 wants.max_pixel_count = rtc::Optional<int>(
2094 send_stream->GetLastWidth() * send_stream->GetLastHeight() - 1);
2095 send_stream->InjectVideoSinkWants(wants);
2095 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420)); 2096 EXPECT_TRUE(capturer.CaptureCustomFrame(1280, 720, cricket::FOURCC_I420));
2096 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2097 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2097 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth()); 2098 EXPECT_EQ(1280 * 3 / 4, send_stream->GetLastWidth());
2098 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight()); 2099 EXPECT_EQ(720 * 3 / 4, send_stream->GetLastHeight());
2099 2100
2100 // Switch to screen share. Expect no CPU adaptation. 2101 // Switch to screen share. Expect no CPU adaptation.
2101 cricket::FakeVideoCapturer screen_share(true); 2102 cricket::FakeVideoCapturer screen_share(true);
2102 ASSERT_EQ(cricket::CS_RUNNING, 2103 ASSERT_EQ(cricket::CS_RUNNING,
2103 screen_share.Start(screen_share.GetSupportedFormats()->front())); 2104 screen_share.Start(screen_share.GetSupportedFormats()->front()));
2104 cricket::VideoOptions screenshare_options; 2105 cricket::VideoOptions screenshare_options;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2140 2141
2141 cricket::FakeVideoCapturer capturer; 2142 cricket::FakeVideoCapturer capturer;
2142 VideoOptions options; 2143 VideoOptions options;
2143 options.is_screencast = rtc::Optional<bool>(is_screenshare); 2144 options.is_screencast = rtc::Optional<bool>(is_screenshare);
2144 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer)); 2145 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, &options, &capturer));
2145 EXPECT_EQ(cricket::CS_RUNNING, 2146 EXPECT_EQ(cricket::CS_RUNNING,
2146 capturer.Start(capturer.GetSupportedFormats()->front())); 2147 capturer.Start(capturer.GetSupportedFormats()->front()));
2147 2148
2148 EXPECT_TRUE(channel_->SetSend(true)); 2149 EXPECT_TRUE(channel_->SetSend(true));
2149 2150
2150 // Trigger overuse.
2151 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2152 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front(); 2151 FakeVideoSendStream* send_stream = fake_call_->GetVideoSendStreams().front();
2153 webrtc::LoadObserver* overuse_callback =
2154 send_stream->GetConfig().overuse_callback;
2155 2152
2156 if (!enable_overuse) { 2153 if (!enable_overuse || is_screenshare) {
2157 ASSERT_TRUE(overuse_callback == NULL); 2154 EXPECT_TRUE(send_stream->resolution_scaling_disabled());
2158 2155
2159 EXPECT_TRUE(capturer.CaptureFrame()); 2156 EXPECT_TRUE(capturer.CaptureFrame());
2160 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2157 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2161 2158
2162 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 2159 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
2163 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 2160 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
2164 2161
2165 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); 2162 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2166 return; 2163 return;
2167 } 2164 }
2168 2165
2169 ASSERT_TRUE(overuse_callback != NULL); 2166 EXPECT_FALSE(send_stream->resolution_scaling_disabled());
2167 // Trigger overuse.
2168 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2169
2170 rtc::VideoSinkWants wants;
2171 wants.max_pixel_count = rtc::Optional<int>(codec.width * codec.height - 1);
2172 send_stream->InjectVideoSinkWants(wants);
2173
2170 EXPECT_TRUE(capturer.CaptureFrame()); 2174 EXPECT_TRUE(capturer.CaptureFrame());
2171 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames()); 2175 EXPECT_EQ(1, send_stream->GetNumberOfSwappedFrames());
2172 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2173 2176
2174 EXPECT_TRUE(capturer.CaptureFrame()); 2177 EXPECT_TRUE(capturer.CaptureFrame());
2175 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames()); 2178 EXPECT_EQ(2, send_stream->GetNumberOfSwappedFrames());
2176 2179
2177 if (is_screenshare) { 2180 EXPECT_LT(send_stream->GetLastWidth(), codec.width);
2178 // Do not adapt screen share. 2181 EXPECT_LT(send_stream->GetLastHeight(), codec.height);
2179 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
2180 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
2181 } else {
2182 EXPECT_LT(send_stream->GetLastWidth(), codec.width);
2183 EXPECT_LT(send_stream->GetLastHeight(), codec.height);
2184 }
2185 2182
2186 // Trigger underuse which should go back to normal resolution. 2183 // Trigger underuse which should go back to normal resolution.
2187 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse); 2184 wants.max_pixel_count = rtc::Optional<int>();
2185 wants.max_pixel_count_step_up = rtc::Optional<int>(
2186 send_stream->GetLastWidth() * send_stream->GetLastHeight());
2187 send_stream->InjectVideoSinkWants(wants);
2188
2188 EXPECT_TRUE(capturer.CaptureFrame()); 2189 EXPECT_TRUE(capturer.CaptureFrame());
2189 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames()); 2190 EXPECT_EQ(3, send_stream->GetNumberOfSwappedFrames());
2190 2191
2191 EXPECT_EQ(codec.width, send_stream->GetLastWidth()); 2192 EXPECT_EQ(codec.width, send_stream->GetLastWidth());
2192 EXPECT_EQ(codec.height, send_stream->GetLastHeight()); 2193 EXPECT_EQ(codec.height, send_stream->GetLastHeight());
2193 2194
2194 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr)); 2195 EXPECT_TRUE(channel_->SetVideoSend(last_ssrc_, true, nullptr, nullptr));
2195 } 2196 }
2196 2197
2197 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) { 2198 TEST_F(WebRtcVideoChannel2Test, EstimatesNtpStartTimeCorrectly) {
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
2918 webrtc::VideoSendStream::Stats stats; 2919 webrtc::VideoSendStream::Stats stats;
2919 stats.preferred_media_bitrate_bps = 5; 2920 stats.preferred_media_bitrate_bps = 5;
2920 stream->SetStats(stats); 2921 stream->SetStats(stats);
2921 2922
2922 cricket::VideoMediaInfo info; 2923 cricket::VideoMediaInfo info;
2923 ASSERT_TRUE(channel_->GetStats(&info)); 2924 ASSERT_TRUE(channel_->GetStats(&info));
2924 ASSERT_EQ(1u, info.senders.size()); 2925 ASSERT_EQ(1u, info.senders.size());
2925 EXPECT_EQ(5, info.senders[0].preferred_bitrate); 2926 EXPECT_EQ(5, info.senders[0].preferred_bitrate);
2926 } 2927 }
2927 2928
2928 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationStats) { 2929 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsCpuAdaptationStats) {
2929 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3))); 2930 FakeVideoSendStream* stream = AddSendStream();
2931 webrtc::VideoSendStream::Stats stats;
2932 stats.number_of_cpu_adapt_changes = 2;
2933 stats.cpu_limited_resolution = true;
2934 stream->SetStats(stats);
2930 2935
2931 // Capture format VGA.
2932 cricket::FakeVideoCapturer video_capturer_vga;
2933 const std::vector<cricket::VideoFormat>* formats =
2934 video_capturer_vga.GetSupportedFormats();
2935 cricket::VideoFormat capture_format_vga = (*formats)[1];
2936 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
2937 EXPECT_TRUE(
2938 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga));
2939 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2940
2941 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30);
2942 cricket::VideoSendParameters parameters;
2943 parameters.codecs.push_back(send_codec);
2944 EXPECT_TRUE(channel_->SetSendParameters(parameters));
2945 EXPECT_TRUE(channel_->SetSend(true));
2946
2947 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
2948
2949 // Trigger overuse.
2950 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
2951 webrtc::LoadObserver* overuse_callback =
2952 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback;
2953 ASSERT_TRUE(overuse_callback != NULL);
2954 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2955
2956 // Capture format VGA -> adapt (OnCpuResolutionRequest downgrade) -> VGA/2.
2957 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2958 cricket::VideoMediaInfo info;
2959 EXPECT_TRUE(channel_->GetStats(&info));
2960 ASSERT_EQ(1U, info.senders.size());
2961 EXPECT_EQ(1, info.senders[0].adapt_changes);
2962 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2963
2964 // Trigger upgrade and verify that we adapt back up to VGA.
2965 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
2966 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
2967 info.Clear();
2968 EXPECT_TRUE(channel_->GetStats(&info));
2969 ASSERT_EQ(1U, info.senders.size());
2970 EXPECT_EQ(2, info.senders[0].adapt_changes);
2971 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2972 info.senders[0].adapt_reason);
2973
2974 // No capturer (no adapter). Adapt changes from old adapter should be kept.
2975 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
2976 info.Clear();
2977 EXPECT_TRUE(channel_->GetStats(&info));
2978 ASSERT_EQ(1U, info.senders.size());
2979 EXPECT_EQ(2, info.senders[0].adapt_changes);
2980 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
2981 info.senders[0].adapt_reason);
2982
2983 // Set new capturer, capture format HD.
2984 cricket::FakeVideoCapturer video_capturer_hd;
2985 cricket::VideoFormat capture_format_hd = (*formats)[0];
2986 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_hd.Start(capture_format_hd));
2987 EXPECT_TRUE(
2988 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_hd));
2989 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2990
2991 // Trigger overuse, HD -> adapt (OnCpuResolutionRequest downgrade) -> HD/2.
2992 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
2993 EXPECT_TRUE(video_capturer_hd.CaptureFrame());
2994 info.Clear();
2995 EXPECT_TRUE(channel_->GetStats(&info));
2996 ASSERT_EQ(1U, info.senders.size());
2997 EXPECT_EQ(3, info.senders[0].adapt_changes);
2998 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2999
3000 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
3001 }
3002
3003 TEST_F(WebRtcVideoChannel2Test, GetStatsTracksAdaptationAndBandwidthStats) {
3004 AddSendStream(cricket::CreateSimStreamParams("cname", MAKE_VECTOR(kSsrcs3)));
3005
3006 // Capture format VGA.
3007 cricket::FakeVideoCapturer video_capturer_vga;
3008 const std::vector<cricket::VideoFormat>* formats =
3009 video_capturer_vga.GetSupportedFormats();
3010 cricket::VideoFormat capture_format_vga = (*formats)[1];
3011 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_vga.Start(capture_format_vga));
3012 EXPECT_TRUE(
3013 channel_->SetVideoSend(kSsrcs3[0], true, nullptr, &video_capturer_vga));
3014 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
3015
3016 cricket::VideoCodec send_codec(100, "VP8", 640, 480, 30);
3017 cricket::VideoSendParameters parameters;
3018 parameters.codecs.push_back(send_codec);
3019 EXPECT_TRUE(channel_->SetSendParameters(parameters));
3020 EXPECT_TRUE(channel_->SetSend(true));
3021
3022 // Verify that the CpuOveruseObserver is registered and trigger downgrade.
3023
3024 // Trigger overuse -> adapt CPU.
3025 ASSERT_EQ(1u, fake_call_->GetVideoSendStreams().size());
3026 webrtc::LoadObserver* overuse_callback =
3027 fake_call_->GetVideoSendStreams().front()->GetConfig().overuse_callback;
3028 ASSERT_TRUE(overuse_callback != NULL);
3029 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kOveruse);
3030 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
3031 cricket::VideoMediaInfo info; 2936 cricket::VideoMediaInfo info;
3032 EXPECT_TRUE(channel_->GetStats(&info)); 2937 EXPECT_TRUE(channel_->GetStats(&info));
3033 ASSERT_EQ(1U, info.senders.size()); 2938 ASSERT_EQ(1U, info.senders.size());
3034 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason); 2939 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU, info.senders[0].adapt_reason);
2940 EXPECT_EQ(2, info.senders[0].adapt_changes);
2941 }
3035 2942
3036 // Set bandwidth limitation stats for the stream -> adapt CPU + BW. 2943 TEST_F(WebRtcVideoChannel2Test, GetStatsReportsAdaptationAndBandwidthStats) {
2944 FakeVideoSendStream* stream = AddSendStream();
3037 webrtc::VideoSendStream::Stats stats; 2945 webrtc::VideoSendStream::Stats stats;
2946 stats.number_of_cpu_adapt_changes = 2;
2947 stats.cpu_limited_resolution = true;
3038 stats.bw_limited_resolution = true; 2948 stats.bw_limited_resolution = true;
3039 fake_call_->GetVideoSendStreams().front()->SetStats(stats); 2949 stream->SetStats(stats);
3040 info.Clear(); 2950
2951 cricket::VideoMediaInfo info;
3041 EXPECT_TRUE(channel_->GetStats(&info)); 2952 EXPECT_TRUE(channel_->GetStats(&info));
3042 ASSERT_EQ(1U, info.senders.size()); 2953 ASSERT_EQ(1U, info.senders.size());
3043 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU | 2954 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_CPU |
3044 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH, 2955 WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH,
3045 info.senders[0].adapt_reason); 2956 info.senders[0].adapt_reason);
3046 2957 EXPECT_EQ(2, info.senders[0].adapt_changes);
3047 // Trigger upgrade -> adapt BW.
3048 overuse_callback->OnLoadUpdate(webrtc::LoadObserver::kUnderuse);
3049 EXPECT_TRUE(video_capturer_vga.CaptureFrame());
3050 info.Clear();
3051 EXPECT_TRUE(channel_->GetStats(&info));
3052 ASSERT_EQ(1U, info.senders.size());
3053 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_BANDWIDTH,
3054 info.senders[0].adapt_reason);
3055
3056 // Reset bandwidth limitation state -> adapt NONE.
3057 stats.bw_limited_resolution = false;
3058 fake_call_->GetVideoSendStreams().front()->SetStats(stats);
3059 info.Clear();
3060 EXPECT_TRUE(channel_->GetStats(&info));
3061 ASSERT_EQ(1U, info.senders.size());
3062 EXPECT_EQ(WebRtcVideoChannel2::ADAPTREASON_NONE,
3063 info.senders[0].adapt_reason);
3064
3065 EXPECT_TRUE(channel_->SetVideoSend(kSsrcs3[0], true, nullptr, nullptr));
3066 } 2958 }
3067 2959
3068 TEST_F(WebRtcVideoChannel2Test, 2960 TEST_F(WebRtcVideoChannel2Test,
3069 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) { 2961 GetStatsTranslatesBandwidthLimitedResolutionCorrectly) {
3070 FakeVideoSendStream* stream = AddSendStream(); 2962 FakeVideoSendStream* stream = AddSendStream();
3071 webrtc::VideoSendStream::Stats stats; 2963 webrtc::VideoSendStream::Stats stats;
3072 stats.bw_limited_resolution = true; 2964 stats.bw_limited_resolution = true;
3073 stream->SetStats(stats); 2965 stream->SetStats(stats);
3074 2966
3075 cricket::VideoMediaInfo info; 2967 cricket::VideoMediaInfo info;
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
3857 } 3749 }
3858 3750
3859 // Test that we normalize send codec format size in simulcast. 3751 // Test that we normalize send codec format size in simulcast.
3860 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) { 3752 TEST_F(WebRtcVideoChannel2SimulcastTest, SetSendCodecsWithOddSizeInSimulcast) {
3861 cricket::VideoCodec codec(kVp8Codec270p); 3753 cricket::VideoCodec codec(kVp8Codec270p);
3862 codec.width += 1; 3754 codec.width += 1;
3863 codec.height += 1; 3755 codec.height += 1;
3864 VerifySimulcastSettings(codec, 2, 2); 3756 VerifySimulcastSettings(codec, 2, 2);
3865 } 3757 }
3866 } // namespace cricket 3758 } // namespace cricket
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698