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

Side by Side Diff: media/renderers/renderer_impl_unittest.cc

Issue 2800523003: Properly handle track status changes in FLUSHED state (Closed)
Patch Set: rebase Created 3 years, 8 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 | « media/renderers/renderer_impl.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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 base::RunLoop().RunUntilIdle(); 983 base::RunLoop().RunUntilIdle();
984 EXPECT_TRUE(audio_renderer_flush_cb); 984 EXPECT_TRUE(audio_renderer_flush_cb);
985 985
986 // Now, while the RendererImpl::Flush is pending, perform an audio track 986 // Now, while the RendererImpl::Flush is pending, perform an audio track
987 // switch. The handling of the track switch will be postponed until after 987 // switch. The handling of the track switch will be postponed until after
988 // RendererImpl::Flush completes. 988 // RendererImpl::Flush completes.
989 stream_status_change_cb.Run(audio_stream_.get(), false, base::TimeDelta()); 989 stream_status_change_cb.Run(audio_stream_.get(), false, base::TimeDelta());
990 stream_status_change_cb.Run(secondary_audio_stream.get(), true, 990 stream_status_change_cb.Run(secondary_audio_stream.get(), true,
991 base::TimeDelta()); 991 base::TimeDelta());
992 992
993 // After RendererImpl::Flush we expect audio renderer flush to happen again, 993 // Ensure that audio track switch occurs after Flush by verifying that the
994 // due to audio track switch handling. And we expect the audio renderer to be 994 // audio renderer is reinitialized with the secondary audio stream.
995 // reinitialized for the secondary_audio_stream.
996 EXPECT_CALL(*audio_renderer_, Flush(_))
997 .WillRepeatedly(DoAll(
998 SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_NOTHING),
999 RunClosure<0>()));
1000 EXPECT_CALL(*audio_renderer_, StartPlaying())
1001 .WillRepeatedly(
1002 SetBufferingState(&audio_renderer_client_, BUFFERING_HAVE_ENOUGH));
1003 EXPECT_CALL(*audio_renderer_, 995 EXPECT_CALL(*audio_renderer_,
1004 Initialize(secondary_audio_stream.get(), _, _, _)); 996 Initialize(secondary_audio_stream.get(), _, _, _));
1005 997
1006 audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING); 998 audio_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
1007 audio_renderer_flush_cb.Run(); 999 audio_renderer_flush_cb.Run();
1008 base::RunLoop().RunUntilIdle(); 1000 base::RunLoop().RunUntilIdle();
1009 } 1001 }
1010 1002
1011 TEST_F(RendererImplTest, VideoTrackSwitchDuringFlush) { 1003 TEST_F(RendererImplTest, VideoTrackSwitchDuringFlush) {
1012 CreateAudioAndVideoStream(); 1004 CreateAudioAndVideoStream();
(...skipping 30 matching lines...) Expand all
1043 base::RunLoop().RunUntilIdle(); 1035 base::RunLoop().RunUntilIdle();
1044 EXPECT_TRUE(video_renderer_flush_cb); 1036 EXPECT_TRUE(video_renderer_flush_cb);
1045 1037
1046 // Now, while the RendererImpl::Flush is pending, perform a video track 1038 // Now, while the RendererImpl::Flush is pending, perform a video track
1047 // switch. The handling of the track switch will be postponed until after 1039 // switch. The handling of the track switch will be postponed until after
1048 // RendererImpl::Flush completes. 1040 // RendererImpl::Flush completes.
1049 stream_status_change_cb.Run(video_stream_.get(), false, base::TimeDelta()); 1041 stream_status_change_cb.Run(video_stream_.get(), false, base::TimeDelta());
1050 stream_status_change_cb.Run(secondary_video_stream.get(), true, 1042 stream_status_change_cb.Run(secondary_video_stream.get(), true,
1051 base::TimeDelta()); 1043 base::TimeDelta());
1052 1044
1053 // After RendererImpl::Flush we expect video renderer flush to happen again, 1045 // Ensure that video track switch occurs after Flush by verifying that the
1054 // due to video track switch handling. And we expect the video renderer to be 1046 // video renderer is reinitialized with the secondary video stream.
1055 // reinitialized for the video.
1056 EXPECT_CALL(*video_renderer_, Flush(_))
1057 .WillRepeatedly(DoAll(
1058 SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_NOTHING),
1059 RunClosure<0>()));
1060 EXPECT_CALL(*video_renderer_, StartPlayingFrom(_))
1061 .WillRepeatedly(
1062 SetBufferingState(&video_renderer_client_, BUFFERING_HAVE_ENOUGH));
1063 EXPECT_CALL(*video_renderer_, OnTimeProgressing())
1064 .Times(testing::AnyNumber());
1065 EXPECT_CALL(*video_renderer_, OnTimeStopped()).Times(testing::AnyNumber()); 1047 EXPECT_CALL(*video_renderer_, OnTimeStopped()).Times(testing::AnyNumber());
1066 EXPECT_CALL(*video_renderer_, 1048 EXPECT_CALL(*video_renderer_,
1067 Initialize(secondary_video_stream.get(), _, _, _, _)); 1049 Initialize(secondary_video_stream.get(), _, _, _, _));
1068 1050
1069 video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING); 1051 video_renderer_client_->OnBufferingStateChange(BUFFERING_HAVE_NOTHING);
1070 video_renderer_flush_cb.Run(); 1052 video_renderer_flush_cb.Run();
1071 base::RunLoop().RunUntilIdle(); 1053 base::RunLoop().RunUntilIdle();
1072 } 1054 }
1073 1055
1074 } // namespace media 1056 } // namespace media
OLDNEW
« no previous file with comments | « media/renderers/renderer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698