Index: media/blink/webmediaplayer_impl_unittest.cc |
diff --git a/media/blink/webmediaplayer_impl_unittest.cc b/media/blink/webmediaplayer_impl_unittest.cc |
index ffca873997294d97f4c61458f2db085d3cc02774..f4675cc197987d53b6ad823fe38e798a751411c5 100644 |
--- a/media/blink/webmediaplayer_impl_unittest.cc |
+++ b/media/blink/webmediaplayer_impl_unittest.cc |
@@ -303,6 +303,20 @@ class WebMediaPlayerImplTest : public testing::Test { |
wmpi_->SetPipelineMediaDurationForTest(value); |
} |
+ void SetUpMediaSuspend(bool enable) { |
+#if defined(OS_ANDROID) |
+ if (!enable) { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kDisableMediaSuspend); |
+ } |
+#else |
+ if (enable) { |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kEnableMediaSuspend); |
+ } |
+#endif |
+ } |
+ |
// "Renderer" thread. |
base::MessageLoop message_loop_; |
@@ -689,9 +703,12 @@ TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) { |
ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); |
} |
-TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) { |
+TEST_F(WebMediaPlayerImplTest, |
+ BackgroundOptimizationsFeatureEnabledSuspendEnabled) { |
base::test::ScopedFeatureList scoped_feature_list; |
scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization); |
+ SetUpMediaSuspend(true); |
+ |
InitializeWebMediaPlayerImpl(true); |
SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); |
SetDuration(base::TimeDelta::FromSeconds(300)); |
@@ -700,7 +717,7 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) { |
SetMetadata(true, true); |
EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
EXPECT_TRUE(ShouldDisableVideoWhenHidden()); |
- EXPECT_FALSE(ShouldPauseVideoWhenHidden()); |
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden()); |
// Video only. |
SetMetadata(false, true); |
@@ -718,20 +735,22 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureEnabled) { |
SetDuration(base::TimeDelta::FromSeconds(5)); |
SetMetadata(true, true); |
EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
- EXPECT_FALSE(ShouldPauseVideoWhenHidden()); |
+ EXPECT_TRUE(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_TRUE(ShouldPauseVideoWhenHidden()); |
EXPECT_FALSE(ShouldDisableVideoWhenHidden()); |
} |
-TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) { |
+TEST_F(WebMediaPlayerImplTest, |
+ BackgroundOptimizationsFeatureDisabledSuspendEnabled) { |
base::test::ScopedFeatureList scoped_feature_list; |
scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization); |
+ SetUpMediaSuspend(true); |
InitializeWebMediaPlayerImpl(true); |
SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); |
@@ -741,15 +760,15 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) { |
SetMetadata(true, true); |
EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
EXPECT_FALSE(ShouldDisableVideoWhenHidden()); |
- EXPECT_FALSE(ShouldPauseVideoWhenHidden()); |
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden()); |
- // Video only (pausing is enabled on Android). |
+ // Video only. |
SetMetadata(false, true); |
EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
EXPECT_FALSE(ShouldDisableVideoWhenHidden()); |
-#if defined(OS_ANDROID) |
EXPECT_TRUE(ShouldPauseVideoWhenHidden()); |
+#if defined(OS_ANDROID) |
// On Android, the duration and keyframe distance don't matter for video-only. |
SetDuration(base::TimeDelta::FromSeconds(5)); |
EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
@@ -762,8 +781,107 @@ TEST_F(WebMediaPlayerImplTest, BackgroundOptimizationsFeatureDisabled) { |
// Restore average keyframe distance. |
SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); |
-#else |
+#endif |
+ |
+ // 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_TRUE(ShouldPauseVideoWhenHidden()); |
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden()); |
+ |
+ // Average keyframe distance is too big. |
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); |
+ SetDuration(base::TimeDelta::FromSeconds(300)); |
+ EXPECT_FALSE(IsBackgroundOptimizationCandidate()); |
+ EXPECT_TRUE(ShouldPauseVideoWhenHidden()); |
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden()); |
+} |
+ |
+TEST_F(WebMediaPlayerImplTest, |
+ BackgroundOptimizationsFeatureEnabledSuspendDisabled) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndEnableFeature(kBackgroundVideoTrackOptimization); |
+ SetUpMediaSuspend(false); |
+ |
+ InitializeWebMediaPlayerImpl(true); |
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); |
+ SetDuration(base::TimeDelta::FromSeconds(300)); |
+ |
+ // Audible video. |
+ SetMetadata(true, true); |
+ 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()); |
+ |
+ // 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, |
+ BackgroundOptimizationsFeatureDisabledSuspendDisabled) { |
+ base::test::ScopedFeatureList scoped_feature_list; |
+ scoped_feature_list.InitAndDisableFeature(kBackgroundVideoTrackOptimization); |
+ SetUpMediaSuspend(false); |
+ |
+ InitializeWebMediaPlayerImpl(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. |
+ SetMetadata(false, true); |
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
+ EXPECT_FALSE(ShouldDisableVideoWhenHidden()); |
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden()); |
+ |
+#if defined(OS_ANDROID) |
+ // On Android, the duration and keyframe distance don't matter for video-only. |
+ SetDuration(base::TimeDelta::FromSeconds(5)); |
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden()); |
+ |
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(100)); |
+ SetDuration(base::TimeDelta::FromSeconds(300)); |
+ EXPECT_TRUE(IsBackgroundOptimizationCandidate()); |
+ EXPECT_FALSE(ShouldPauseVideoWhenHidden()); |
+ |
+ // Restore average keyframe distance. |
+ SetVideoKeyframeDistanceAverage(base::TimeDelta::FromSeconds(5)); |
#endif |
// Audio only. |