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

Side by Side Diff: media/base/pipeline_unittest.cc

Issue 275673002: Remove completion callbacks from AudioRenderer::Play/Pause(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « media/base/mock_filters.h ('k') | media/base/serial_runner.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <vector> 5 #include <vector>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/test/simple_test_tick_clock.h" 10 #include "base/test/simple_test_tick_clock.h"
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 if (start_status == PIPELINE_OK) { 201 if (start_status == PIPELINE_OK) {
202 EXPECT_CALL(callbacks_, OnMetadata(_)).WillOnce(SaveArg<0>(&metadata_)); 202 EXPECT_CALL(callbacks_, OnMetadata(_)).WillOnce(SaveArg<0>(&metadata_));
203 203
204 if (audio_stream_) { 204 if (audio_stream_) {
205 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); 205 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f));
206 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); 206 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f));
207 207
208 // Startup sequence. 208 // Startup sequence.
209 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) 209 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _))
210 .WillOnce(RunCallback<1>(PIPELINE_OK)); 210 .WillOnce(RunCallback<1>(PIPELINE_OK));
211 EXPECT_CALL(*audio_renderer_, Play(_)) 211 EXPECT_CALL(*audio_renderer_, Play());
212 .WillOnce(RunClosure<0>());
213 } 212 }
214 EXPECT_CALL(callbacks_, OnPrerollCompleted()); 213 EXPECT_CALL(callbacks_, OnPrerollCompleted());
215 } 214 }
216 215
217 pipeline_->Start( 216 pipeline_->Start(
218 filter_collection_.Pass(), 217 filter_collection_.Pass(),
219 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), 218 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
220 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), 219 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
221 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), 220 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)),
222 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)), 221 base::Bind(&CallbackHelper::OnMetadata, base::Unretained(&callbacks_)),
(...skipping 29 matching lines...) Expand all
252 FakeTextTrackStream* text_stream() { 251 FakeTextTrackStream* text_stream() {
253 return text_stream_.get(); 252 return text_stream_.get();
254 } 253 }
255 254
256 void ExpectSeek(const base::TimeDelta& seek_time) { 255 void ExpectSeek(const base::TimeDelta& seek_time) {
257 // Every filter should receive a call to Seek(). 256 // Every filter should receive a call to Seek().
258 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) 257 EXPECT_CALL(*demuxer_, Seek(seek_time, _))
259 .WillOnce(RunCallback<1>(PIPELINE_OK)); 258 .WillOnce(RunCallback<1>(PIPELINE_OK));
260 259
261 if (audio_stream_) { 260 if (audio_stream_) {
262 EXPECT_CALL(*audio_renderer_, Pause(_)) 261 EXPECT_CALL(*audio_renderer_, Pause());
263 .WillOnce(RunClosure<0>());
264 EXPECT_CALL(*audio_renderer_, Flush(_)) 262 EXPECT_CALL(*audio_renderer_, Flush(_))
265 .WillOnce(RunClosure<0>()); 263 .WillOnce(RunClosure<0>());
266 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _)) 264 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _))
267 .WillOnce(RunCallback<1>(PIPELINE_OK)); 265 .WillOnce(RunCallback<1>(PIPELINE_OK));
268 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_)); 266 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_));
269 EXPECT_CALL(*audio_renderer_, SetVolume(_)); 267 EXPECT_CALL(*audio_renderer_, SetVolume(_));
270 EXPECT_CALL(*audio_renderer_, Play(_)) 268 EXPECT_CALL(*audio_renderer_, Play());
271 .WillOnce(RunClosure<0>());
272 } 269 }
273 270
274 if (video_stream_) { 271 if (video_stream_) {
275 EXPECT_CALL(*video_renderer_, Pause(_)) 272 EXPECT_CALL(*video_renderer_, Pause(_))
276 .WillOnce(RunClosure<0>()); 273 .WillOnce(RunClosure<0>());
277 EXPECT_CALL(*video_renderer_, Flush(_)) 274 EXPECT_CALL(*video_renderer_, Flush(_))
278 .WillOnce(RunClosure<0>()); 275 .WillOnce(RunClosure<0>());
279 EXPECT_CALL(*video_renderer_, Preroll(seek_time, _)) 276 EXPECT_CALL(*video_renderer_, Preroll(seek_time, _))
280 .WillOnce(RunCallback<1>(PIPELINE_OK)); 277 .WillOnce(RunCallback<1>(PIPELINE_OK));
281 EXPECT_CALL(*video_renderer_, SetPlaybackRate(_)); 278 EXPECT_CALL(*video_renderer_, SetPlaybackRate(_));
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 InitializePipeline(PIPELINE_OK); 659 InitializePipeline(PIPELINE_OK);
663 660
664 float playback_rate = 1.0f; 661 float playback_rate = 1.0f;
665 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate)); 662 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(playback_rate));
666 pipeline_->SetPlaybackRate(playback_rate); 663 pipeline_->SetPlaybackRate(playback_rate);
667 message_loop_.RunUntilIdle(); 664 message_loop_.RunUntilIdle();
668 665
669 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); 666 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
670 667
671 // Preroll() isn't called as the demuxer errors out first. 668 // Preroll() isn't called as the demuxer errors out first.
672 EXPECT_CALL(*audio_renderer_, Pause(_)) 669 EXPECT_CALL(*audio_renderer_, Pause());
673 .WillOnce(RunClosure<0>());
674 EXPECT_CALL(*audio_renderer_, Flush(_)) 670 EXPECT_CALL(*audio_renderer_, Flush(_))
675 .WillOnce(RunClosure<0>()); 671 .WillOnce(RunClosure<0>());
676 EXPECT_CALL(*audio_renderer_, Stop(_)) 672 EXPECT_CALL(*audio_renderer_, Stop(_))
677 .WillOnce(RunClosure<0>()); 673 .WillOnce(RunClosure<0>());
678 674
679 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) 675 EXPECT_CALL(*demuxer_, Seek(seek_time, _))
680 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); 676 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ));
681 EXPECT_CALL(*demuxer_, Stop(_)) 677 EXPECT_CALL(*demuxer_, Stop(_))
682 .WillOnce(RunClosure<0>()); 678 .WillOnce(RunClosure<0>());
683 679
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 713
718 // Trigger additional requests on the pipeline during tear down from error. 714 // Trigger additional requests on the pipeline during tear down from error.
719 base::Callback<void(PipelineStatus)> cb = base::Bind( 715 base::Callback<void(PipelineStatus)> cb = base::Bind(
720 &TestNoCallsAfterError, pipeline_.get(), &message_loop_); 716 &TestNoCallsAfterError, pipeline_.get(), &message_loop_);
721 ON_CALL(callbacks_, OnError(_)) 717 ON_CALL(callbacks_, OnError(_))
722 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); 718 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run));
723 719
724 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); 720 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
725 721
726 // Seek() isn't called as the demuxer errors out first. 722 // Seek() isn't called as the demuxer errors out first.
727 EXPECT_CALL(*audio_renderer_, Pause(_)) 723 EXPECT_CALL(*audio_renderer_, Pause());
728 .WillOnce(RunClosure<0>());
729 EXPECT_CALL(*audio_renderer_, Flush(_)) 724 EXPECT_CALL(*audio_renderer_, Flush(_))
730 .WillOnce(RunClosure<0>()); 725 .WillOnce(RunClosure<0>());
731 EXPECT_CALL(*audio_renderer_, Stop(_)) 726 EXPECT_CALL(*audio_renderer_, Stop(_))
732 .WillOnce(RunClosure<0>()); 727 .WillOnce(RunClosure<0>());
733 728
734 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) 729 EXPECT_CALL(*demuxer_, Seek(seek_time, _))
735 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); 730 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ));
736 EXPECT_CALL(*demuxer_, Stop(_)) 731 EXPECT_CALL(*demuxer_, Stop(_))
737 .WillOnce(RunClosure<0>()); 732 .WillOnce(RunClosure<0>());
738 733
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); 803 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
809 804
810 // Arrange to trigger a time update while the demuxer is in the middle of 805 // Arrange to trigger a time update while the demuxer is in the middle of
811 // seeking. This update should be ignored by the pipeline and the clock should 806 // seeking. This update should be ignored by the pipeline and the clock should
812 // not get updated. 807 // not get updated.
813 base::Closure closure = base::Bind(&RunTimeCB, audio_time_cb_, 300, 700); 808 base::Closure closure = base::Bind(&RunTimeCB, audio_time_cb_, 300, 700);
814 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) 809 EXPECT_CALL(*demuxer_, Seek(seek_time, _))
815 .WillOnce(DoAll(InvokeWithoutArgs(&closure, &base::Closure::Run), 810 .WillOnce(DoAll(InvokeWithoutArgs(&closure, &base::Closure::Run),
816 RunCallback<1>(PIPELINE_OK))); 811 RunCallback<1>(PIPELINE_OK)));
817 812
818 EXPECT_CALL(*audio_renderer_, Pause(_)) 813 EXPECT_CALL(*audio_renderer_, Pause());
819 .WillOnce(RunClosure<0>());
820 EXPECT_CALL(*audio_renderer_, Flush(_)) 814 EXPECT_CALL(*audio_renderer_, Flush(_))
821 .WillOnce(RunClosure<0>()); 815 .WillOnce(RunClosure<0>());
822 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _)) 816 EXPECT_CALL(*audio_renderer_, Preroll(seek_time, _))
823 .WillOnce(RunCallback<1>(PIPELINE_OK)); 817 .WillOnce(RunCallback<1>(PIPELINE_OK));
824 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_)); 818 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(_));
825 EXPECT_CALL(*audio_renderer_, SetVolume(_)); 819 EXPECT_CALL(*audio_renderer_, SetVolume(_));
826 EXPECT_CALL(*audio_renderer_, Play(_)) 820 EXPECT_CALL(*audio_renderer_, Play());
827 .WillOnce(RunClosure<0>());
828 821
829 EXPECT_CALL(callbacks_, OnPrerollCompleted()); 822 EXPECT_CALL(callbacks_, OnPrerollCompleted());
830 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK)); 823 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK));
831 DoSeek(seek_time); 824 DoSeek(seek_time);
832 825
833 EXPECT_EQ(pipeline_->GetMediaTime(), seek_time); 826 EXPECT_EQ(pipeline_->GetMediaTime(), seek_time);
834 827
835 // Now that the seek is complete, verify that time updates advance the current 828 // Now that the seek is complete, verify that time updates advance the current
836 // time. 829 // time.
837 base::TimeDelta new_time = seek_time + base::TimeDelta::FromMilliseconds(100); 830 base::TimeDelta new_time = seek_time + base::TimeDelta::FromMilliseconds(100);
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 // If we get here it's a successful initialization. 996 // If we get here it's a successful initialization.
1004 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _)) 997 EXPECT_CALL(*audio_renderer_, Preroll(base::TimeDelta(), _))
1005 .WillOnce(RunCallback<1>(PIPELINE_OK)); 998 .WillOnce(RunCallback<1>(PIPELINE_OK));
1006 EXPECT_CALL(*video_renderer_, Preroll(base::TimeDelta(), _)) 999 EXPECT_CALL(*video_renderer_, Preroll(base::TimeDelta(), _))
1007 .WillOnce(RunCallback<1>(PIPELINE_OK)); 1000 .WillOnce(RunCallback<1>(PIPELINE_OK));
1008 1001
1009 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); 1002 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f));
1010 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); 1003 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f));
1011 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); 1004 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f));
1012 1005
1013 EXPECT_CALL(*audio_renderer_, Play(_)) 1006 EXPECT_CALL(*audio_renderer_, Play());
1014 .WillOnce(RunClosure<0>());
1015 EXPECT_CALL(*video_renderer_, Play(_)) 1007 EXPECT_CALL(*video_renderer_, Play(_))
1016 .WillOnce(RunClosure<0>()); 1008 .WillOnce(RunClosure<0>());
1017 1009
1018 if (status == PIPELINE_OK) 1010 if (status == PIPELINE_OK)
1019 EXPECT_CALL(callbacks_, OnPrerollCompleted()); 1011 EXPECT_CALL(callbacks_, OnPrerollCompleted());
1020 1012
1021 return status; 1013 return status;
1022 } 1014 }
1023 1015
1024 void DoSeek(TeardownState state, StopOrError stop_or_error) { 1016 void DoSeek(TeardownState state, StopOrError stop_or_error) {
(...skipping 15 matching lines...) Expand all
1040 } 1032 }
1041 1033
1042 PipelineStatus SetSeekExpectations(TeardownState state, 1034 PipelineStatus SetSeekExpectations(TeardownState state,
1043 StopOrError stop_or_error) { 1035 StopOrError stop_or_error) {
1044 PipelineStatus status = PIPELINE_OK; 1036 PipelineStatus status = PIPELINE_OK;
1045 base::Closure stop_cb = base::Bind( 1037 base::Closure stop_cb = base::Bind(
1046 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); 1038 &CallbackHelper::OnStop, base::Unretained(&callbacks_));
1047 1039
1048 if (state == kPausing) { 1040 if (state == kPausing) {
1049 if (stop_or_error == kStop) { 1041 if (stop_or_error == kStop) {
1050 EXPECT_CALL(*audio_renderer_, Pause(_)) 1042 EXPECT_CALL(*audio_renderer_, Pause())
1051 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>())); 1043 .WillOnce(Stop(pipeline_.get(), stop_cb));
1052 } else { 1044 } else {
1053 status = PIPELINE_ERROR_READ; 1045 status = PIPELINE_ERROR_READ;
1054 EXPECT_CALL(*audio_renderer_, Pause(_)).WillOnce( 1046 EXPECT_CALL(*audio_renderer_, Pause())
1055 DoAll(SetError(pipeline_.get(), status), RunClosure<0>())); 1047 .WillOnce(SetError(pipeline_.get(), status));
1056 } 1048 }
1057 1049
1058 return status; 1050 return status;
1059 } 1051 }
1060 1052
1061 EXPECT_CALL(*audio_renderer_, Pause(_)).WillOnce(RunClosure<0>()); 1053 EXPECT_CALL(*audio_renderer_, Pause());
1062 EXPECT_CALL(*video_renderer_, Pause(_)).WillOnce(RunClosure<0>()); 1054 EXPECT_CALL(*video_renderer_, Pause(_)).WillOnce(RunClosure<0>());
1063 1055
1064 if (state == kFlushing) { 1056 if (state == kFlushing) {
1065 if (stop_or_error == kStop) { 1057 if (stop_or_error == kStop) {
1066 EXPECT_CALL(*audio_renderer_, Flush(_)) 1058 EXPECT_CALL(*audio_renderer_, Flush(_))
1067 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>())); 1059 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>()));
1068 } else { 1060 } else {
1069 status = PIPELINE_ERROR_READ; 1061 status = PIPELINE_ERROR_READ;
1070 EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce( 1062 EXPECT_CALL(*audio_renderer_, Flush(_)).WillOnce(
1071 DoAll(SetError(pipeline_.get(), status), RunClosure<0>())); 1063 DoAll(SetError(pipeline_.get(), status), RunClosure<0>()));
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1113 EXPECT_CALL(*video_renderer_, Preroll(_, _)) 1105 EXPECT_CALL(*video_renderer_, Preroll(_, _))
1114 .WillOnce(RunCallback<1>(PIPELINE_OK)); 1106 .WillOnce(RunCallback<1>(PIPELINE_OK));
1115 1107
1116 // Playback rate and volume are updated prior to starting. 1108 // Playback rate and volume are updated prior to starting.
1117 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f)); 1109 EXPECT_CALL(*audio_renderer_, SetPlaybackRate(0.0f));
1118 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f)); 1110 EXPECT_CALL(*video_renderer_, SetPlaybackRate(0.0f));
1119 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f)); 1111 EXPECT_CALL(*audio_renderer_, SetVolume(1.0f));
1120 1112
1121 if (state == kStarting) { 1113 if (state == kStarting) {
1122 if (stop_or_error == kStop) { 1114 if (stop_or_error == kStop) {
1123 EXPECT_CALL(*audio_renderer_, Play(_)) 1115 EXPECT_CALL(*audio_renderer_, Play())
1124 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), RunClosure<0>())); 1116 .WillOnce(Stop(pipeline_.get(), stop_cb));
1125 } else { 1117 } else {
1126 status = PIPELINE_ERROR_READ; 1118 status = PIPELINE_ERROR_READ;
1127 EXPECT_CALL(*audio_renderer_, Play(_)).WillOnce( 1119 EXPECT_CALL(*audio_renderer_, Play())
1128 DoAll(SetError(pipeline_.get(), status), RunClosure<0>())); 1120 .WillOnce(SetError(pipeline_.get(), status));
1129 } 1121 }
1130 return status; 1122 return status;
1131 } 1123 }
1132 1124
1133 NOTREACHED() << "State not supported: " << state; 1125 NOTREACHED() << "State not supported: " << state;
1134 return status; 1126 return status;
1135 } 1127 }
1136 1128
1137 void DoStopOrError(StopOrError stop_or_error) { 1129 void DoStopOrError(StopOrError stop_or_error) {
1138 InSequence s; 1130 InSequence s;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); 1180 INSTANTIATE_TEARDOWN_TEST(Error, Pausing);
1189 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); 1181 INSTANTIATE_TEARDOWN_TEST(Error, Flushing);
1190 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); 1182 INSTANTIATE_TEARDOWN_TEST(Error, Seeking);
1191 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); 1183 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling);
1192 INSTANTIATE_TEARDOWN_TEST(Error, Starting); 1184 INSTANTIATE_TEARDOWN_TEST(Error, Starting);
1193 INSTANTIATE_TEARDOWN_TEST(Error, Playing); 1185 INSTANTIATE_TEARDOWN_TEST(Error, Playing);
1194 1186
1195 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); 1187 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing);
1196 1188
1197 } // namespace media 1189 } // namespace media
OLDNEW
« no previous file with comments | « media/base/mock_filters.h ('k') | media/base/serial_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698