Bug 997870 - Optimize OscillatorNodeEngine::ComputeCustom a little. r=karlt

--HG--
extra : rebase_source : 486499c25c863378d7c6c404f2fe00b99f5b86a9
This commit is contained in:
Paul Adenot 2014-12-10 15:34:14 +01:00
Родитель 28bfeca6e2
Коммит dc3fa97c86
1 изменённых файлов: 23 добавлений и 6 удалений

Просмотреть файл

@ -151,15 +151,15 @@ public:
{
double frequency, detune;
bool simpleFrequency = mFrequency.HasSimpleValue();
bool simpleDetune = mDetune.HasSimpleValue();
// Shortcut if frequency-related AudioParam are not automated, and we
// already have computed the frequency information and related parameters.
if (simpleFrequency && simpleDetune && !mRecomputeParameters) {
if (!ParametersMayNeedUpdate()) {
return;
}
bool simpleFrequency = mFrequency.HasSimpleValue();
bool simpleDetune = mDetune.HasSimpleValue();
if (simpleFrequency) {
frequency = mFrequency.GetValue();
} else {
@ -212,6 +212,13 @@ public:
}
}
bool ParametersMayNeedUpdate()
{
return mDetune.HasSimpleValue() ||
mFrequency.HasSimpleValue() ||
mRecomputeParameters;
}
void ComputeCustom(float* aOutput,
StreamTime ticks,
uint32_t aStart,
@ -231,12 +238,22 @@ public:
// mPhase runs [0,periodicWaveSize) here instead of [0,2*M_PI).
float basePhaseIncrement = mPeriodicWave->rateScale();
for (uint32_t i = aStart; i < aEnd; ++i) {
UpdateParametersIfNeeded(ticks, i);
bool parametersMayNeedUpdate = ParametersMayNeedUpdate();
if (!parametersMayNeedUpdate) {
mPeriodicWave->waveDataForFundamentalFrequency(mFinalFrequency,
lowerWaveData,
higherWaveData,
tableInterpolationFactor);
}
for (uint32_t i = aStart; i < aEnd; ++i) {
if (parametersMayNeedUpdate) {
mPeriodicWave->waveDataForFundamentalFrequency(mFinalFrequency,
lowerWaveData,
higherWaveData,
tableInterpolationFactor);
UpdateParametersIfNeeded(ticks, i);
}
// Bilinear interpolation between adjacent samples in each table.
float floorPhase = floorf(mPhase);
uint32_t j1 = floorPhase;