Title: [102733] trunk/Source/WebCore
Revision
102733
Author
[email protected]
Date
2011-12-13 20:56:56 -0800 (Tue, 13 Dec 2011)

Log 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 <[email protected]> on 2011-12-13
Reviewed by Kenneth Russell.

No new tests.

* webaudio/AudioParamTimeline.cpp:
(WebCore:AudioParamTimeline:valuesForTimeRangeImpl):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (102732 => 102733)


--- trunk/Source/WebCore/ChangeLog	2011-12-14 04:49:56 UTC (rev 102732)
+++ trunk/Source/WebCore/ChangeLog	2011-12-14 04:56:56 UTC (rev 102733)
@@ -1,3 +1,15 @@
+2011-12-13  James Wei <[email protected]> 
+
+        Optimize to not use pow() in the inner loop in AudioParamTimeline
+        https://bugs.webkit.org/show_bug.cgi?id=73530
+
+        Reviewed by Kenneth Russell.
+
+        No new tests.
+
+        * webaudio/AudioParamTimeline.cpp:
+        (WebCore:AudioParamTimeline:valuesForTimeRangeImpl):
+
 2011-12-13  Hajime Morrita  <[email protected]>
 
         Unreviewed Chromium-Mac build fix trial.

Modified: trunk/Source/WebCore/webaudio/AudioParamTimeline.cpp (102732 => 102733)


--- trunk/Source/WebCore/webaudio/AudioParamTimeline.cpp	2011-12-14 04:49:56 UTC (rev 102732)
+++ trunk/Source/WebCore/webaudio/AudioParamTimeline.cpp	2011-12-14 04:56:56 UTC (rev 102733)
@@ -245,16 +245,13 @@
                 for (; writeIndex < fillToFrame; ++writeIndex)
                     values[writeIndex] = value;
             } else {
-                // Interpolate in log space.
-                value1 = log2f(value1);
-                value2 = log2f(value2);
-
-                // FIXME: optimize to not use pow() in inner loop, this is just a simple exponential ramp.
+                float numSampleFrames = deltaTime * sampleRate;
+                // The value goes exponentially from value1 to value2 in a duration of deltaTime seconds (corresponding to numSampleFrames).
+                // Compute the per-sample multiplier.
+                float multiplier = powf(value2 / value1, 1 / numSampleFrames);
                 for (; writeIndex < fillToFrame; ++writeIndex) {
-                    float x = (currentTime - time1) * k;
-                    value = (1 - x) * value1 + x * value2;
-                    value = powf(2.0f, value);
                     values[writeIndex] = value;
+                    value *= multiplier;
                     currentTime += sampleFrameTimeIncr;
                 }
             }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to