| Index: media/blink/webmediaplayer_impl_unittest.cc
|
| diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc
|
| index b0fbb4087e32dc2ff074a1cbf3f1748fedebe135..b68bba6eb50b7cf8e1e850729b78e7ae0e0c5b92 100644
|
| --- a/media/blink/webmediaplayer_impl_unittest.cc
|
| +++ b/media/blink/webmediaplayer_impl_unittest.cc
|
| @@ -284,12 +284,24 @@ class WebMediaPlayerImplTest : public testing::Test {
|
| return wmpi_->ShouldDisableVideoWhenHidden();
|
| }
|
|
|
| + bool ShouldPauseVideoWhenHidden() const {
|
| + return wmpi_->ShouldPauseVideoWhenHidden();
|
| + }
|
| +
|
| + bool IsBackgroundOptimizationCandidate() const {
|
| + return wmpi_->IsBackgroundOptimizationCandidate();
|
| + }
|
| +
|
| void SetVideoKeyframeDistanceAverage(base::TimeDelta value) {
|
| PipelineStatistics statistics;
|
| statistics.video_keyframe_distance_average = value;
|
| wmpi_->SetPipelineStatisticsForTest(statistics);
|
| }
|
|
|
| + void SetDuration(base::TimeDelta value) {
|
| + wmpi_->SetPipelineMediaDurationForTest(value);
|
| + }
|
| +
|
| // "Renderer" thread.
|
| base::MessageLoop message_loop_;
|
|
|
| @@ -668,36 +680,88 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) {
|
| ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
|
| }
|
|
|
| -TEST_F(WebMediaPlayerImplTest, ShouldDisableVideoWhenHidden) {
|
| +TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) {
|
| base::test::ScopedFeatureList scoped_feature_list;
|
| scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization);
|
| -
|
| InitializeWebMediaPlayerImpl();
|
| - delegate_.SetFrameHiddenForTesting(true);
|
| + SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
|
| + SetDuration(base::TimeDelta::FromSeconds(300));
|
|
|
| + // Audible video.
|
| SetMetadata(true, true);
|
| - SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
|
| + EXPECT_TRUE(IsBackgroundOptimizationCandidate());
|
| EXPECT_TRUE(ShouldDisableVideoWhenHidden());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
|
|
| + // Video only.
|
| SetMetadata(false, true);
|
| + EXPECT_TRUE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_TRUE(ShouldPauseVideoWhenHidden());
|
| EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
|
|
| + // Audio only.
|
| SetMetadata(true, false);
|
| + EXPECT_FALSE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
|
|
| - SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
|
| + // Duration is shorter than max video keyframe distance.
|
| + SetDuration(base::TimeDelta::FromSeconds(5));
|
| SetMetadata(true, true);
|
| + EXPECT_TRUE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| + EXPECT_TRUE(ShouldDisableVideoWhenHidden());
|
| +
|
| + // Average keyframe distance is too big.
|
| + SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
|
| + SetDuration(base::TimeDelta::FromSeconds(300));
|
| + EXPECT_FALSE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
| }
|
|
|
| -TEST_F(WebMediaPlayerImplTest, ShouldDisableVideoWhenHiddenFeatureDisabled) {
|
| +TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) {
|
| base::test::ScopedFeatureList scoped_feature_list;
|
| scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization);
|
|
|
| InitializeWebMediaPlayerImpl();
|
| - delegate_.SetFrameHiddenForTesting(true);
|
| + SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5));
|
| + SetDuration(base::TimeDelta::FromSeconds(300));
|
|
|
| + // Audible video.
|
| SetMetadata(true, true);
|
| + EXPECT_TRUE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| +
|
| + // Video only (pausing is enabled on Android).
|
| + SetMetadata(false, true);
|
| + EXPECT_TRUE(IsBackgroundOptimizationCandidate());
|
| +#if defined(OS_ANDROID)
|
| + EXPECT_TRUE(ShouldPauseVideoWhenHidden());
|
| +#else
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| +#endif
|
| + EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
| +
|
| + // Audio only.
|
| + SetMetadata(true, false);
|
| + EXPECT_FALSE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| + EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
| +
|
| + // Duration is shorter than max video keyframe distance.
|
| + SetDuration(base::TimeDelta::FromSeconds(5));
|
| + SetMetadata(true, true);
|
| + EXPECT_TRUE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| + EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
| +
|
| + // Average keyframe distance is too big.
|
| + SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100));
|
| + SetDuration(base::TimeDelta::FromSeconds(300));
|
| + EXPECT_FALSE(IsBackgroundOptimizationCandidate());
|
| + EXPECT_FALSE(ShouldPauseVideoWhenHidden());
|
| EXPECT_FALSE(ShouldDisableVideoWhenHidden());
|
| }
|
|
|
|
|