зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1184429: P2. MediaResource::SilentReadAt to read from cache first. r=jwwang
In practice, it will always read from the cache. This allows SilentReadAt to really be silent and prevent unecessary NotifyDataArrived callbacks.
This commit is contained in:
Родитель
ac32d3c055
Коммит
ba9653671f
|
@ -409,6 +409,8 @@ private:
|
||||||
// MediaByteBuffer is a ref counted infallible TArray.
|
// MediaByteBuffer is a ref counted infallible TArray.
|
||||||
class MediaByteBuffer : public nsTArray<uint8_t> {
|
class MediaByteBuffer : public nsTArray<uint8_t> {
|
||||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaByteBuffer);
|
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaByteBuffer);
|
||||||
|
MediaByteBuffer() = default;
|
||||||
|
explicit MediaByteBuffer(size_t aCapacity) : nsTArray<uint8_t>(aCapacity) {}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
~MediaByteBuffer() {}
|
~MediaByteBuffer() {}
|
||||||
|
|
|
@ -324,8 +324,17 @@ public:
|
||||||
// aCount bytes. Otherwise, it returns an owned buffer.
|
// aCount bytes. Otherwise, it returns an owned buffer.
|
||||||
virtual already_AddRefed<MediaByteBuffer> SilentReadAt(int64_t aOffset, uint32_t aCount)
|
virtual already_AddRefed<MediaByteBuffer> SilentReadAt(int64_t aOffset, uint32_t aCount)
|
||||||
{
|
{
|
||||||
|
nsRefPtr<MediaByteBuffer> bytes = new MediaByteBuffer(aCount);
|
||||||
|
bytes->SetLength(aCount);
|
||||||
|
nsresult rv =
|
||||||
|
ReadFromCache(reinterpret_cast<char*>(bytes->Elements()), aOffset, aCount);
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
return bytes.forget();
|
||||||
|
}
|
||||||
int64_t pos = Tell();
|
int64_t pos = Tell();
|
||||||
nsRefPtr<MediaByteBuffer> bytes = MediaReadAt(aOffset, aCount);
|
// Free our buffer first to minimize memory usage.
|
||||||
|
bytes = nullptr;
|
||||||
|
bytes = MediaReadAt(aOffset, aCount);
|
||||||
Seek(nsISeekableStream::NS_SEEK_SET, pos);
|
Seek(nsISeekableStream::NS_SEEK_SET, pos);
|
||||||
NS_ENSURE_TRUE(bytes && bytes->Length() == aCount, nullptr);
|
NS_ENSURE_TRUE(bytes && bytes->Length() == aCount, nullptr);
|
||||||
return bytes.forget();
|
return bytes.forget();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче