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 { ...@@ -140,8 +140,6 @@ class ChunkDemuxerStream : public DemuxerStream {
bool GetBufferedRange(base::TimeDelta* start_out, bool GetBufferedRange(base::TimeDelta* start_out,
base::TimeDelta* end_out) const; base::TimeDelta* end_out) const;
bool GetLastBufferTimestamp(base::TimeDelta* timestamp) const;
// DemuxerStream methods. // DemuxerStream methods.
virtual void Read(const ReadCB& read_cb) OVERRIDE; virtual void Read(const ReadCB& read_cb) OVERRIDE;
virtual Type type() OVERRIDE; virtual Type type() OVERRIDE;
...@@ -324,17 +322,6 @@ bool ChunkDemuxerStream::GetBufferedRange( ...@@ -324,17 +322,6 @@ bool ChunkDemuxerStream::GetBufferedRange(
return true; 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|. // Helper function that makes sure |read_cb| runs on |message_loop|.
static void RunOnMessageLoop(const DemuxerStream::ReadCB& read_cb, static void RunOnMessageLoop(const DemuxerStream::ReadCB& read_cb,
MessageLoop* message_loop, MessageLoop* message_loop,
...@@ -667,7 +654,6 @@ bool ChunkDemuxer::AppendData(const std::string& id, ...@@ -667,7 +654,6 @@ bool ChunkDemuxer::AppendData(const std::string& id,
DCHECK_GT(length, 0u); DCHECK_GT(length, 0u);
int64 buffered_bytes = 0; int64 buffered_bytes = 0;
base::TimeDelta buffered_ts = base::TimeDelta::FromSeconds(-1);
PipelineStatusCB cb; PipelineStatusCB cb;
{ {
...@@ -709,17 +695,7 @@ bool ChunkDemuxer::AppendData(const std::string& id, ...@@ -709,17 +695,7 @@ bool ChunkDemuxer::AppendData(const std::string& id,
std::swap(cb, seek_cb_); std::swap(cb, seek_cb_);
} }
base::TimeDelta tmp; buffered_bytes_ += length;
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 = buffered_bytes_; buffered_bytes = buffered_bytes_;
} }
......
...@@ -16,6 +16,7 @@ using ::testing::AnyNumber; ...@@ -16,6 +16,7 @@ using ::testing::AnyNumber;
using ::testing::InSequence; using ::testing::InSequence;
using ::testing::NotNull; using ::testing::NotNull;
using ::testing::Return; using ::testing::Return;
using ::testing::SaveArg;
using ::testing::SetArgumentPointee; using ::testing::SetArgumentPointee;
using ::testing::_; using ::testing::_;
...@@ -101,7 +102,8 @@ class ChunkDemuxerTest : public testing::Test { ...@@ -101,7 +102,8 @@ class ChunkDemuxerTest : public testing::Test {
}; };
ChunkDemuxerTest() ChunkDemuxerTest()
: client_(new MockChunkDemuxerClient()), : buffered_bytes_(0),
client_(new MockChunkDemuxerClient()),
demuxer_(new ChunkDemuxer(client_.get())) { demuxer_(new ChunkDemuxer(client_.get())) {
} }
...@@ -181,7 +183,9 @@ class ChunkDemuxerTest : public testing::Test { ...@@ -181,7 +183,9 @@ class ChunkDemuxerTest : public testing::Test {
bool AppendData(const uint8* data, size_t length) { bool AppendData(const uint8* data, size_t length) {
CHECK(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)) EXPECT_CALL(host_, SetNetworkActivity(true))
.Times(AnyNumber()); .Times(AnyNumber());
return demuxer_->AppendData(kSourceId, data, length); return demuxer_->AppendData(kSourceId, data, length);
...@@ -195,11 +199,14 @@ class ChunkDemuxerTest : public testing::Test { ...@@ -195,11 +199,14 @@ class ChunkDemuxerTest : public testing::Test {
const uint8* start = data; const uint8* start = data;
const uint8* end = data + length; const uint8* end = data + length;
while (start < end) { while (start < end) {
int64 old_buffered_bytes = buffered_bytes_;
size_t append_size = std::min(piece_size, size_t append_size = std::min(piece_size,
static_cast<size_t>(end - start)); static_cast<size_t>(end - start));
if (!AppendData(start, append_size)) if (!AppendData(start, append_size))
return false; return false;
start += append_size; start += append_size;
EXPECT_GT(buffered_bytes_, old_buffered_bytes);
} }
return true; return true;
} }
...@@ -405,6 +412,7 @@ class ChunkDemuxerTest : public testing::Test { ...@@ -405,6 +412,7 @@ class ChunkDemuxerTest : public testing::Test {
} }
MockDemuxerHost host_; MockDemuxerHost host_;
int64 buffered_bytes_;
scoped_ptr<MockChunkDemuxerClient> client_; scoped_ptr<MockChunkDemuxerClient> client_;
scoped_refptr<ChunkDemuxer> demuxer_; 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