Bug 1053682 - Optimize SourceBufferResource::ReadAt/ReadFromCache a little. r=cajbir

--HG--
rename : content/media/mediasource/MediaSourceDecoder.cpp => content/media/mediasource/MediaSourceReader.cpp
extra : rebase_source : 2ed344b1731d07f4e89b4695d36a1e0d26ada41f
This commit is contained in:
Matthew Gregan 2014-08-14 01:41:00 +12:00
parent 2988a96173
commit 1f7a632528
2 changed files with 19 additions and 8 deletions

View File

@ -87,7 +87,7 @@ SourceBufferResource::ReadAt(int64_t aOffset, char* aBuffer, uint32_t aCount, ui
SBR_DEBUG("SourceBufferResource(%p)::ReadAt(aOffset=%lld, aBuffer=%p, aCount=%u, aBytes=%p)",
this, aOffset, aBytes, aCount, aBytes);
ReentrantMonitorAutoEnter mon(mMonitor);
nsresult rv = Seek(nsISeekableStream::NS_SEEK_SET, aOffset);
nsresult rv = SeekInternal(aOffset);
if (NS_FAILED(rv)) {
return rv;
}
@ -99,9 +99,6 @@ SourceBufferResource::Seek(int32_t aWhence, int64_t aOffset)
{
SBR_DEBUG("SourceBufferResource(%p)::Seek(aWhence=%d, aOffset=%lld)", this, aWhence, aOffset);
ReentrantMonitorAutoEnter mon(mMonitor);
if (mClosed) {
return NS_ERROR_FAILURE;
}
int64_t newOffset = mOffset;
switch (aWhence) {
@ -118,13 +115,24 @@ SourceBufferResource::Seek(int32_t aWhence, int64_t aOffset)
SBR_DEBUGV("SourceBufferResource(%p)::Seek() newOffset=%lld GetOffset()=%llu GetLength()=%llu)",
this, newOffset, mInputBuffer.GetOffset(), GetLength());
if (newOffset < 0 || uint64_t(newOffset) < mInputBuffer.GetOffset() || newOffset > GetLength()) {
nsresult rv = SeekInternal(newOffset);
mon.NotifyAll();
return rv;
}
nsresult
SourceBufferResource::SeekInternal(int64_t aOffset)
{
mMonitor.AssertCurrentThreadIn();
if (mClosed ||
aOffset < 0 ||
uint64_t(aOffset) < mInputBuffer.GetOffset() ||
aOffset > GetLength()) {
return NS_ERROR_FAILURE;
}
mOffset = newOffset;
mon.NotifyAll();
mOffset = aOffset;
return NS_OK;
}
@ -133,6 +141,7 @@ SourceBufferResource::ReadFromCache(char* aBuffer, int64_t aOffset, uint32_t aCo
{
SBR_DEBUG("SourceBufferResource(%p)::ReadFromCache(aBuffer=%p, aOffset=%lld, aCount=%u)",
this, aBuffer, aOffset, aCount);
ReentrantMonitorAutoEnter mon(mMonitor);
int64_t oldOffset = mOffset;
nsresult rv = ReadAt(aOffset, aBuffer, aCount, nullptr);
mOffset = oldOffset;

View File

@ -273,6 +273,8 @@ public:
void EvictBefore(uint64_t aOffset);
private:
nsresult SeekInternal(int64_t aOffset);
nsCOMPtr<nsIPrincipal> mPrincipal;
const nsCString mType;