Changeset 102733 in webkit


Ignore:
Timestamp:
Dec 13, 2011 8:56:56 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Optimize to not use pow() in the inner loop in AudioParamTimeline
https://bugs.webkit.org/show_bug.cgi?id=73530

Patch by James Wei <james.wei@intel.com> on 2011-12-13
Reviewed by Kenneth Russell.

No new tests.

  • webaudio/AudioParamTimeline.cpp:

(WebCore:AudioParamTimeline:valuesForTimeRangeImpl):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r102732 r102733  
     12011-12-13  James Wei <james.wei@intel.com>
     2
     3        Optimize to not use pow() in the inner loop in AudioParamTimeline
     4        https://bugs.webkit.org/show_bug.cgi?id=73530
     5
     6        Reviewed by Kenneth Russell.
     7
     8        No new tests.
     9
     10        * webaudio/AudioParamTimeline.cpp:
     11        (WebCore:AudioParamTimeline:valuesForTimeRangeImpl):
     12
    1132011-12-13  Hajime Morrita  <morrita@chromium.org>
    214
  • trunk/Source/WebCore/webaudio/AudioParamTimeline.cpp

    r96780 r102733  
    246246                    values[writeIndex] = value;
    247247            } else {
    248                 // Interpolate in log space.
    249                 value1 = log2f(value1);
    250                 value2 = log2f(value2);
    251 
    252                 // FIXME: optimize to not use pow() in inner loop, this is just a simple exponential ramp.
     248                float numSampleFrames = deltaTime * sampleRate;
     249                // The value goes exponentially from value1 to value2 in a duration of deltaTime seconds (corresponding to numSampleFrames).
     250                // Compute the per-sample multiplier.
     251                float multiplier = powf(value2 / value1, 1 / numSampleFrames);
    253252                for (; writeIndex < fillToFrame; ++writeIndex) {
    254                     float x = (currentTime - time1) * k;
    255                     value = (1 - x) * value1 + x * value2;
    256                     value = powf(2.0f, value);
    257253                    values[writeIndex] = value;
     254                    value *= multiplier;
    258255                    currentTime += sampleFrameTimeIncr;
    259256                }
Note: See TracChangeset for help on using the changeset viewer.