Chromium Code Reviews| Index: third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp |
| diff --git a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp |
| index 7bfedbe0b1b9f2a46b6c85d4afaa09ec19be91e5..db4c8b2cc9a016be3fa4e516175edb83966d166c 100644 |
| --- a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp |
| +++ b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp |
| @@ -87,7 +87,8 @@ PeriodicWave* PeriodicWave::createTriangle(float sampleRate) |
| } |
| PeriodicWave::PeriodicWave(float sampleRate) |
| - : m_sampleRate(sampleRate) |
| + : m_v8ExternalMemory(0) |
| + , m_sampleRate(sampleRate) |
| , m_centsPerRange(CentsPerRange) |
| { |
| float nyquist = 0.5 * m_sampleRate; |
| @@ -98,6 +99,11 @@ PeriodicWave::PeriodicWave(float sampleRate) |
| m_numberOfRanges = 0.5 + kNumberOfOctaveBands * log2f(periodicWaveSize()); |
| } |
| +PeriodicWave::~PeriodicWave() |
| +{ |
| + adjustV8ExternalMemory(-static_cast<int64_t>(m_v8ExternalMemory)); |
| +} |
| + |
| unsigned PeriodicWave::periodicWaveSize() const |
| { |
| // Choose an appropriate wave size for the given sample rate. This allows us to use shorter |
| @@ -162,6 +168,13 @@ unsigned PeriodicWave::numberOfPartialsForRange(unsigned rangeIndex) const |
| return numberOfPartials; |
| } |
| +// Tell V8 about the memory we're using so it can properly schedule garbage collects. |
| +void PeriodicWave::adjustV8ExternalMemory(int delta) |
| +{ |
| + v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory(delta); |
|
jochen (gone - plz use gerrit)
2016/01/26 15:33:55
mainThreadIsolate()
Daniel Bratell
2016/01/26 16:19:13
Is that important?
modules.dll doesn't know how to
jochen (gone - plz use gerrit)
2016/01/26 17:11:51
I'm trying to get rid of this method - the embedde
|
| + m_v8ExternalMemory += delta; |
| +} |
| + |
| // Convert into time-domain wave buffers. |
| // One table is created for each range for non-aliasing playback at different playback rates. |
| // Thus, higher ranges have more high-frequency partials culled out. |
| @@ -208,7 +221,9 @@ void PeriodicWave::createBandLimitedTables(const float* realData, const float* i |
| imagP[0] = 0; |
| // Create the band-limited table. |
| - OwnPtr<AudioFloatArray> table = adoptPtr(new AudioFloatArray(periodicWaveSize())); |
| + unsigned waveSize = periodicWaveSize(); |
| + OwnPtr<AudioFloatArray> table = adoptPtr(new AudioFloatArray(waveSize)); |
| + adjustV8ExternalMemory(waveSize * sizeof(float)); |
| m_bandLimitedTables.append(table.release()); |
| // Apply an inverse FFT to generate the time-domain table data. |