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

Side by Side Diff: webrtc/video/vie_encoder_unittest.cc

Issue 2903563002: Compare adapt up/down request with sink_wants_ in VideoSourceProxy methods to make sure it is higher (Closed)
Patch Set: rebase Created 3 years, 6 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
« no previous file with comments | « webrtc/video/vie_encoder.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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 1030 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 } 1041 }
1042 1042
1043 TEST_F(ViEEncoderTest, SwitchingSourceKeepsQualityAdaptation) { 1043 TEST_F(ViEEncoderTest, SwitchingSourceKeepsQualityAdaptation) {
1044 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 1044 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
1045 1045
1046 const int kWidth = 1280; 1046 const int kWidth = 1280;
1047 const int kHeight = 720; 1047 const int kHeight = 720;
1048 video_source_.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight)); 1048 video_source_.IncomingCapturedFrame(CreateFrame(1, kWidth, kHeight));
1049 sink_.WaitForEncodedFrame(1); 1049 sink_.WaitForEncodedFrame(1);
1050 VideoSendStream::Stats stats = stats_proxy_->GetStats(); 1050 VideoSendStream::Stats stats = stats_proxy_->GetStats();
1051 EXPECT_FALSE(stats.cpu_limited_resolution);
1052 EXPECT_FALSE(stats.bw_limited_resolution); 1051 EXPECT_FALSE(stats.bw_limited_resolution);
1052 EXPECT_FALSE(stats.bw_limited_framerate);
1053 EXPECT_EQ(0, stats.number_of_quality_adapt_changes); 1053 EXPECT_EQ(0, stats.number_of_quality_adapt_changes);
1054 1054
1055 // Set new source with adaptation still enabled. 1055 // Set new source with adaptation still enabled.
1056 test::FrameForwarder new_video_source; 1056 test::FrameForwarder new_video_source;
1057 vie_encoder_->SetSource(&new_video_source, 1057 vie_encoder_->SetSource(&new_video_source,
1058 VideoSendStream::DegradationPreference::kBalanced); 1058 VideoSendStream::DegradationPreference::kBalanced);
1059 1059
1060 new_video_source.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight)); 1060 new_video_source.IncomingCapturedFrame(CreateFrame(2, kWidth, kHeight));
1061 sink_.WaitForEncodedFrame(2); 1061 sink_.WaitForEncodedFrame(2);
1062 stats = stats_proxy_->GetStats(); 1062 stats = stats_proxy_->GetStats();
1063 EXPECT_FALSE(stats.cpu_limited_resolution);
1064 EXPECT_FALSE(stats.bw_limited_resolution); 1063 EXPECT_FALSE(stats.bw_limited_resolution);
1064 EXPECT_FALSE(stats.bw_limited_framerate);
1065 EXPECT_EQ(0, stats.number_of_quality_adapt_changes); 1065 EXPECT_EQ(0, stats.number_of_quality_adapt_changes);
1066 1066
1067 // Trigger adapt down. 1067 // Trigger adapt down.
1068 vie_encoder_->TriggerQualityLow(); 1068 vie_encoder_->TriggerQualityLow();
1069 new_video_source.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight)); 1069 new_video_source.IncomingCapturedFrame(CreateFrame(3, kWidth, kHeight));
1070 sink_.WaitForEncodedFrame(3); 1070 sink_.WaitForEncodedFrame(3);
1071 stats = stats_proxy_->GetStats(); 1071 stats = stats_proxy_->GetStats();
1072 EXPECT_FALSE(stats.cpu_limited_resolution);
1073 EXPECT_TRUE(stats.bw_limited_resolution); 1072 EXPECT_TRUE(stats.bw_limited_resolution);
1073 EXPECT_FALSE(stats.bw_limited_framerate);
1074 EXPECT_EQ(1, stats.number_of_quality_adapt_changes); 1074 EXPECT_EQ(1, stats.number_of_quality_adapt_changes);
1075 1075
1076 // Set new source with adaptation still enabled. 1076 // Set new source with adaptation still enabled.
1077 vie_encoder_->SetSource(&new_video_source, 1077 vie_encoder_->SetSource(&new_video_source,
1078 VideoSendStream::DegradationPreference::kBalanced); 1078 VideoSendStream::DegradationPreference::kBalanced);
1079 1079
1080 new_video_source.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight)); 1080 new_video_source.IncomingCapturedFrame(CreateFrame(4, kWidth, kHeight));
1081 sink_.WaitForEncodedFrame(4); 1081 sink_.WaitForEncodedFrame(4);
1082 stats = stats_proxy_->GetStats(); 1082 stats = stats_proxy_->GetStats();
1083 EXPECT_FALSE(stats.cpu_limited_resolution);
1084 EXPECT_TRUE(stats.bw_limited_resolution); 1083 EXPECT_TRUE(stats.bw_limited_resolution);
1084 EXPECT_FALSE(stats.bw_limited_framerate);
1085 EXPECT_EQ(1, stats.number_of_quality_adapt_changes); 1085 EXPECT_EQ(1, stats.number_of_quality_adapt_changes);
1086 1086
1087 // Disable resolution scaling. 1087 // Disable resolution scaling.
1088 vie_encoder_->SetSource( 1088 vie_encoder_->SetSource(
1089 &new_video_source, 1089 &new_video_source,
1090 VideoSendStream::DegradationPreference::kMaintainResolution); 1090 VideoSendStream::DegradationPreference::kMaintainResolution);
1091 1091
1092 new_video_source.IncomingCapturedFrame(CreateFrame(5, kWidth, kHeight)); 1092 new_video_source.IncomingCapturedFrame(CreateFrame(5, kWidth, kHeight));
1093 sink_.WaitForEncodedFrame(5); 1093 sink_.WaitForEncodedFrame(5);
1094 stats = stats_proxy_->GetStats(); 1094 stats = stats_proxy_->GetStats();
1095 EXPECT_FALSE(stats.cpu_limited_resolution);
1096 EXPECT_FALSE(stats.bw_limited_resolution); 1095 EXPECT_FALSE(stats.bw_limited_resolution);
1096 EXPECT_FALSE(stats.bw_limited_framerate);
1097 EXPECT_EQ(1, stats.number_of_quality_adapt_changes); 1097 EXPECT_EQ(1, stats.number_of_quality_adapt_changes);
1098 EXPECT_EQ(0, stats.number_of_cpu_adapt_changes); 1098 EXPECT_EQ(0, stats.number_of_cpu_adapt_changes);
1099 1099
1100 vie_encoder_->Stop(); 1100 vie_encoder_->Stop();
1101 } 1101 }
1102 1102
1103 TEST_F(ViEEncoderTest, QualityAdaptationStatsAreResetWhenScalerIsDisabled) { 1103 TEST_F(ViEEncoderTest, QualityAdaptationStatsAreResetWhenScalerIsDisabled) {
1104 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 1104 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
1105 1105
1106 const int kWidth = 1280; 1106 const int kWidth = 1280;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 1147 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
1148 1148
1149 const int kWidth = 1280; 1149 const int kWidth = 1280;
1150 const int kHeight = 720; 1150 const int kHeight = 720;
1151 int sequence = 1; 1151 int sequence = 1;
1152 1152
1153 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight)); 1153 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight));
1154 sink_.WaitForEncodedFrame(sequence++); 1154 sink_.WaitForEncodedFrame(sequence++);
1155 VideoSendStream::Stats stats = stats_proxy_->GetStats(); 1155 VideoSendStream::Stats stats = stats_proxy_->GetStats();
1156 EXPECT_FALSE(stats.cpu_limited_resolution); 1156 EXPECT_FALSE(stats.cpu_limited_resolution);
1157 EXPECT_FALSE(stats.cpu_limited_framerate);
1157 EXPECT_EQ(0, stats.number_of_cpu_adapt_changes); 1158 EXPECT_EQ(0, stats.number_of_cpu_adapt_changes);
1158 1159
1159 // Trigger CPU overuse, should now adapt down. 1160 // Trigger CPU overuse, should now adapt down.
1160 vie_encoder_->TriggerCpuOveruse(); 1161 vie_encoder_->TriggerCpuOveruse();
1161 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight)); 1162 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight));
1162 sink_.WaitForEncodedFrame(sequence++); 1163 sink_.WaitForEncodedFrame(sequence++);
1163 stats = stats_proxy_->GetStats(); 1164 stats = stats_proxy_->GetStats();
1164 EXPECT_TRUE(stats.cpu_limited_resolution); 1165 EXPECT_TRUE(stats.cpu_limited_resolution);
1166 EXPECT_FALSE(stats.cpu_limited_framerate);
1165 EXPECT_EQ(1, stats.number_of_cpu_adapt_changes); 1167 EXPECT_EQ(1, stats.number_of_cpu_adapt_changes);
1166 1168
1167 // Set new source with adaptation still enabled. 1169 // Set new source with adaptation still enabled.
1168 test::FrameForwarder new_video_source; 1170 test::FrameForwarder new_video_source;
1169 vie_encoder_->SetSource( 1171 vie_encoder_->SetSource(
1170 &new_video_source, 1172 &new_video_source,
1171 VideoSendStream::DegradationPreference::kMaintainFramerate); 1173 VideoSendStream::DegradationPreference::kMaintainFramerate);
1172 1174
1173 new_video_source.IncomingCapturedFrame( 1175 new_video_source.IncomingCapturedFrame(
1174 CreateFrame(sequence, kWidth, kHeight)); 1176 CreateFrame(sequence, kWidth, kHeight));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 // Disable CPU adaptation. 1214 // Disable CPU adaptation.
1213 vie_encoder_->SetSource( 1215 vie_encoder_->SetSource(
1214 &new_video_source, 1216 &new_video_source,
1215 VideoSendStream::DegradationPreference::kDegradationDisabled); 1217 VideoSendStream::DegradationPreference::kDegradationDisabled);
1216 new_video_source.IncomingCapturedFrame( 1218 new_video_source.IncomingCapturedFrame(
1217 CreateFrame(sequence, kWidth, kHeight)); 1219 CreateFrame(sequence, kWidth, kHeight));
1218 sink_.WaitForEncodedFrame(sequence++); 1220 sink_.WaitForEncodedFrame(sequence++);
1219 1221
1220 stats = stats_proxy_->GetStats(); 1222 stats = stats_proxy_->GetStats();
1221 EXPECT_FALSE(stats.cpu_limited_resolution); 1223 EXPECT_FALSE(stats.cpu_limited_resolution);
1224 EXPECT_FALSE(stats.cpu_limited_framerate);
1222 EXPECT_EQ(2, stats.number_of_cpu_adapt_changes); 1225 EXPECT_EQ(2, stats.number_of_cpu_adapt_changes);
1223 1226
1224 // Try to trigger overuse. Should not succeed. 1227 // Try to trigger overuse. Should not succeed.
1225 stats_proxy_->SetMockStats(mock_stats); 1228 stats_proxy_->SetMockStats(mock_stats);
1226 vie_encoder_->TriggerCpuOveruse(); 1229 vie_encoder_->TriggerCpuOveruse();
1227 stats_proxy_->ResetMockStats(); 1230 stats_proxy_->ResetMockStats();
1228 1231
1229 stats = stats_proxy_->GetStats(); 1232 stats = stats_proxy_->GetStats();
1230 EXPECT_FALSE(stats.cpu_limited_resolution); 1233 EXPECT_FALSE(stats.cpu_limited_resolution);
1234 EXPECT_FALSE(stats.cpu_limited_framerate);
1231 EXPECT_EQ(2, stats.number_of_cpu_adapt_changes); 1235 EXPECT_EQ(2, stats.number_of_cpu_adapt_changes);
1232 1236
1233 // Switch back the source with resolution adaptation enabled. 1237 // Switch back the source with resolution adaptation enabled.
1234 vie_encoder_->SetSource( 1238 vie_encoder_->SetSource(
1235 &video_source_, 1239 &video_source_,
1236 VideoSendStream::DegradationPreference::kMaintainFramerate); 1240 VideoSendStream::DegradationPreference::kMaintainFramerate);
1237 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight)); 1241 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight));
1238 sink_.WaitForEncodedFrame(sequence++); 1242 sink_.WaitForEncodedFrame(sequence++);
1239 stats = stats_proxy_->GetStats(); 1243 stats = stats_proxy_->GetStats();
1240 EXPECT_TRUE(stats.cpu_limited_resolution); 1244 EXPECT_TRUE(stats.cpu_limited_resolution);
1245 EXPECT_FALSE(stats.cpu_limited_framerate);
1241 EXPECT_EQ(2, stats.number_of_cpu_adapt_changes); 1246 EXPECT_EQ(2, stats.number_of_cpu_adapt_changes);
1242 1247
1243 // Trigger CPU normal usage. 1248 // Trigger CPU normal usage.
1244 vie_encoder_->TriggerCpuNormalUsage(); 1249 vie_encoder_->TriggerCpuNormalUsage();
1245 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight)); 1250 video_source_.IncomingCapturedFrame(CreateFrame(sequence, kWidth, kHeight));
1246 sink_.WaitForEncodedFrame(sequence++); 1251 sink_.WaitForEncodedFrame(sequence++);
1247 stats = stats_proxy_->GetStats(); 1252 stats = stats_proxy_->GetStats();
1248 EXPECT_FALSE(stats.cpu_limited_resolution); 1253 EXPECT_FALSE(stats.cpu_limited_resolution);
1254 EXPECT_FALSE(stats.cpu_limited_framerate);
1249 EXPECT_EQ(3, stats.number_of_cpu_adapt_changes); 1255 EXPECT_EQ(3, stats.number_of_cpu_adapt_changes);
1250 1256
1251 // Back to the source with adaptation off, set it back to maintain-resolution. 1257 // Back to the source with adaptation off, set it back to maintain-resolution.
1252 vie_encoder_->SetSource( 1258 vie_encoder_->SetSource(
1253 &new_video_source, 1259 &new_video_source,
1254 VideoSendStream::DegradationPreference::kMaintainResolution); 1260 VideoSendStream::DegradationPreference::kMaintainResolution);
1255 new_video_source.IncomingCapturedFrame( 1261 new_video_source.IncomingCapturedFrame(
1256 CreateFrame(sequence, kWidth, kHeight)); 1262 CreateFrame(sequence, kWidth, kHeight));
1257 sink_.WaitForEncodedFrame(sequence++); 1263 sink_.WaitForEncodedFrame(sequence++);
1258 stats = stats_proxy_->GetStats(); 1264 stats = stats_proxy_->GetStats();
1259 // Disabled, since we previously switched the source too disabled. 1265 // Disabled, since we previously switched the source to disabled.
1260 EXPECT_FALSE(stats.cpu_limited_resolution); 1266 EXPECT_FALSE(stats.cpu_limited_resolution);
1267 EXPECT_TRUE(stats.cpu_limited_framerate);
1261 EXPECT_EQ(3, stats.number_of_cpu_adapt_changes); 1268 EXPECT_EQ(3, stats.number_of_cpu_adapt_changes);
1262 1269
1263 // Trigger CPU normal usage. 1270 // Trigger CPU normal usage.
1264 vie_encoder_->TriggerCpuNormalUsage(); 1271 vie_encoder_->TriggerCpuNormalUsage();
1265 new_video_source.IncomingCapturedFrame( 1272 new_video_source.IncomingCapturedFrame(
1266 CreateFrame(sequence, kWidth, kHeight)); 1273 CreateFrame(sequence, kWidth, kHeight));
1267 sink_.WaitForEncodedFrame(sequence++); 1274 sink_.WaitForEncodedFrame(sequence++);
1268 stats = stats_proxy_->GetStats(); 1275 stats = stats_proxy_->GetStats();
1269 EXPECT_FALSE(stats.cpu_limited_resolution); 1276 EXPECT_FALSE(stats.cpu_limited_resolution);
1277 EXPECT_FALSE(stats.cpu_limited_framerate);
1270 EXPECT_EQ(4, stats.number_of_cpu_adapt_changes); 1278 EXPECT_EQ(4, stats.number_of_cpu_adapt_changes);
1271 EXPECT_EQ(0, stats.number_of_quality_adapt_changes); 1279 EXPECT_EQ(0, stats.number_of_quality_adapt_changes);
1272 1280
1273 vie_encoder_->Stop(); 1281 vie_encoder_->Stop();
1274 } 1282 }
1275 1283
1276 TEST_F(ViEEncoderTest, StatsTracksPreferredBitrate) { 1284 TEST_F(ViEEncoderTest, StatsTracksPreferredBitrate) {
1277 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 1285 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
1278 1286
1279 const int kWidth = 1280; 1287 const int kWidth = 1280;
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
2106 for (int i = 0; i < 10; ++i) { 2114 for (int i = 0; i < 10; ++i) {
2107 timestamp_ms += kMinFpsFrameInterval; 2115 timestamp_ms += kMinFpsFrameInterval;
2108 fake_clock.AdvanceTimeMicros(kMinFpsFrameInterval * 1000); 2116 fake_clock.AdvanceTimeMicros(kMinFpsFrameInterval * 1000);
2109 video_source_.IncomingCapturedFrame( 2117 video_source_.IncomingCapturedFrame(
2110 CreateFrame(timestamp_ms, kFrameWidth, kFrameHeight)); 2118 CreateFrame(timestamp_ms, kFrameWidth, kFrameHeight));
2111 sink_.WaitForEncodedFrame(timestamp_ms); 2119 sink_.WaitForEncodedFrame(timestamp_ms);
2112 } 2120 }
2113 vie_encoder_->Stop(); 2121 vie_encoder_->Stop();
2114 } 2122 }
2115 } // namespace webrtc 2123 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/vie_encoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698