Commit 0d92efc5 authored by acolwell@chromium.org's avatar acolwell@chromium.org

Fix ChunkDemuxer so appending triggers progress events.

BUG=129037
TEST=ChunkDemuxer.TestAppendingInPieces

Review URL: https://chromiumcodereview.appspot.com/10388216

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@138343 0039d316-1c4b-4281-b951-d872f2087c98
parent 86238d21
......@@ -140,8 +140,6 @@ class ChunkDemuxerStream : public DemuxerStream {
bool GetBufferedRange(base::TimeDelta* start_out,
base::TimeDelta* end_out) const;
bool GetLastBufferTimestamp(base::TimeDelta* timestamp) const;
// DemuxerStream methods.
virtual void Read(const ReadCB& read_cb) OVERRIDE;
virtual Type type() OVERRIDE;
......@@ -324,17 +322,6 @@ bool ChunkDemuxerStream::GetBufferedRange(
return true;
}
bool ChunkDemuxerStream::GetLastBufferTimestamp(
base::TimeDelta* timestamp) const {
base::AutoLock auto_lock(lock_);
if (buffers_.empty())
return false;
*timestamp = buffers_.back()->GetTimestamp();
return true;
}
// Helper function that makes sure |read_cb| runs on |message_loop|.
static void RunOnMessageLoop(const DemuxerStream::ReadCB& read_cb,
MessageLoop* message_loop,
......@@ -667,7 +654,6 @@ bool ChunkDemuxer::AppendData(const std::string& id,
DCHECK_GT(length, 0u);
int64 buffered_bytes = 0;
base::TimeDelta buffered_ts = base::TimeDelta::FromSeconds(-1);
PipelineStatusCB cb;
{
......@@ -709,17 +695,7 @@ bool ChunkDemuxer::AppendData(const std::string& id,
std::swap(cb, seek_cb_);
}
base::TimeDelta tmp;
if (audio_.get() && audio_->GetLastBufferTimestamp(&tmp) &&
tmp > buffered_ts) {
buffered_ts = tmp;
}
if (video_.get() && video_->GetLastBufferTimestamp(&tmp) &&
tmp > buffered_ts) {
buffered_ts = tmp;
}
buffered_bytes_ += length;
buffered_bytes = buffered_bytes_;
}
......
......@@ -16,6 +16,7 @@ using ::testing::AnyNumber;
using ::testing::InSequence;
using ::testing::NotNull;
using ::testing::Return;
using ::testing::SaveArg;
using ::testing::SetArgumentPointee;
using ::testing::_;
......@@ -101,7 +102,8 @@ class ChunkDemuxerTest : public testing::Test {
};
ChunkDemuxerTest()
: client_(new MockChunkDemuxerClient()),
: buffered_bytes_(0),
client_(new MockChunkDemuxerClient()),
demuxer_(new ChunkDemuxer(client_.get())) {
}
......@@ -181,7 +183,9 @@ class ChunkDemuxerTest : public testing::Test {
bool AppendData(const uint8* data, size_t length) {
CHECK(length);
EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber());
EXPECT_CALL(host_, SetBufferedBytes(_))
.Times(AnyNumber())
.WillRepeatedly(SaveArg<0>(&buffered_bytes_));
EXPECT_CALL(host_, SetNetworkActivity(true))
.Times(AnyNumber());
return demuxer_->AppendData(kSourceId, data, length);
......@@ -195,11 +199,14 @@ class ChunkDemuxerTest : public testing::Test {
const uint8* start = data;
const uint8* end = data + length;
while (start < end) {
int64 old_buffered_bytes = buffered_bytes_;
size_t append_size = std::min(piece_size,
static_cast<size_t>(end - start));
if (!AppendData(start, append_size))
return false;
start += append_size;
EXPECT_GT(buffered_bytes_, old_buffered_bytes);
}
return true;
}
......@@ -405,6 +412,7 @@ class ChunkDemuxerTest : public testing::Test {
}
MockDemuxerHost host_;
int64 buffered_bytes_;
scoped_ptr<MockChunkDemuxerClient> client_;
scoped_refptr<ChunkDemuxer> demuxer_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment