зеркало из https://github.com/mozilla/gecko-dev.git
bug 1199561 delay offline buffer allocation until non-null input is received r=padenot
The avoids the allocation and copying altogether when the output buffer is silent. --HG-- extra : rebase_source : f225628dc9bb2ea0cd0ec414a2212e39da92405f
This commit is contained in:
Родитель
b8ba84787a
Коммит
605cd07259
|
@ -54,18 +54,26 @@ public:
|
||||||
// will not go anywhere.
|
// will not go anywhere.
|
||||||
*aOutput = aInput;
|
*aOutput = aInput;
|
||||||
|
|
||||||
// The output buffer is allocated lazily, on the rendering thread.
|
// The output buffer is allocated lazily, on the rendering thread, when
|
||||||
if (!mBufferAllocated) {
|
// non-null input is received.
|
||||||
|
if (!mBufferAllocated && !aInput.IsNull()) {
|
||||||
// These allocations might fail if content provides a huge number of
|
// These allocations might fail if content provides a huge number of
|
||||||
// channels or size, but it's OK since we'll deal with the failure
|
// channels or size, but it's OK since we'll deal with the failure
|
||||||
// gracefully.
|
// gracefully.
|
||||||
mBuffer = ThreadSharedFloatArrayBufferList::
|
mBuffer = ThreadSharedFloatArrayBufferList::
|
||||||
Create(mNumberOfChannels, mLength, fallible);
|
Create(mNumberOfChannels, mLength, fallible);
|
||||||
|
if (mBuffer && mWriteIndex) {
|
||||||
|
// Zero leading for any null chunks that were skipped.
|
||||||
|
for (uint32_t i = 0; i < mNumberOfChannels; ++i) {
|
||||||
|
float* channelData = mBuffer->GetDataForWrite(i);
|
||||||
|
PodZero(channelData, mWriteIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mBufferAllocated = true;
|
mBufferAllocated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle the case of allocation failure in the input buffer
|
// Skip copying if there is no buffer.
|
||||||
uint32_t outputChannelCount = mBuffer ? mNumberOfChannels : 0;
|
uint32_t outputChannelCount = mBuffer ? mNumberOfChannels : 0;
|
||||||
|
|
||||||
// Record our input buffer
|
// Record our input buffer
|
||||||
|
|
Загрузка…
Ссылка в новой задаче