| Index: media/base/android/media_source_player_unittest.cc
|
| diff --git a/media/base/android/media_source_player_unittest.cc b/media/base/android/media_source_player_unittest.cc
|
| index a9d52f942e4f22b0d565f966de468ebf035625df..e9a208495e03b5ad7498a198fe8301723eecb1dd 100644
|
| --- a/media/base/android/media_source_player_unittest.cc
|
| +++ b/media/base/android/media_source_player_unittest.cc
|
| @@ -277,7 +277,23 @@ TEST_F(MediaSourcePlayerTest, ReadFromDemuxerAfterSeek) {
|
|
|
| // Initiate a seek
|
| player_->SeekTo(base::TimeDelta());
|
| +
|
| + // Verify that the seek does not occur until the initial prefetch
|
| + // completes.
|
| + EXPECT_EQ(0u, manager_->last_seek_request_id());
|
| +
|
| + // Simulate aborted read caused by the seek. This aborts the initial
|
| + // prefetch.
|
| + DemuxerData data;
|
| + data.type = DemuxerStream::AUDIO;
|
| + data.access_units.resize(1);
|
| + data.access_units[0].status = DemuxerStream::kAborted;
|
| + player_->ReadFromDemuxerAck(data);
|
| +
|
| + // Verify that the seek is requested now that the initial prefetch
|
| + // has completed.
|
| EXPECT_EQ(1u, manager_->last_seek_request_id());
|
| +
|
| // Sending back the seek ACK, this should trigger the player to call
|
| // OnReadFromDemuxer() again.
|
| player_->OnSeekRequestAck(manager_->last_seek_request_id());
|
| @@ -436,15 +452,31 @@ TEST_F(MediaSourcePlayerTest, StartTimeTicksResetAfterDecoderUnderruns) {
|
|
|
| // The decoder job should finish and a new request will be sent.
|
| EXPECT_EQ(5, manager_->num_requests());
|
| - EXPECT_FALSE(GetMediaDecoderJob(true)->is_decoding());
|
| + EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding());
|
| base::TimeTicks previous = StartTimeTicks();
|
|
|
| // Let the decoder timeout and execute the OnDecoderStarved() callback.
|
| base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
|
| +
|
| + EXPECT_TRUE(GetMediaDecoderJob(true)->is_decoding());
|
| + EXPECT_TRUE(StartTimeTicks() != base::TimeTicks());
|
| manager_->message_loop()->RunUntilIdle();
|
|
|
| - // Send new data to the decoder. This should reset the start time ticks.
|
| - player_->ReadFromDemuxerAck(CreateEOSAck(true));
|
| + // Send new data to the decoder so it can finish the currently
|
| + // pending decode.
|
| + player_->ReadFromDemuxerAck(CreateReadFromDemuxerAckForAudio(3));
|
| + while(GetMediaDecoderJob(true)->is_decoding())
|
| + manager_->message_loop()->RunUntilIdle();
|
| +
|
| + // Verify the start time ticks is cleared at this point because the
|
| + // player is prefetching.
|
| + EXPECT_TRUE(StartTimeTicks() == base::TimeTicks());
|
| +
|
| + // Send new data to the decoder so it can finish prefetching. This should
|
| + // reset the start time ticks.
|
| + player_->ReadFromDemuxerAck(CreateReadFromDemuxerAckForAudio(3));
|
| + EXPECT_TRUE(StartTimeTicks() != base::TimeTicks());
|
| +
|
| base::TimeTicks current = StartTimeTicks();
|
| EXPECT_LE(100.0, (current - previous).InMillisecondsF());
|
| }
|
|
|