Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(437)

Unified Diff: third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html

Issue 2581463002: Refactor WebAudio test directory (Closed)
Patch Set: Use correct path for wav result files Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html
diff --git a/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html b/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html
deleted file mode 100644
index 2034945f20e48d89b23b4433f473d84c687057d0..0000000000000000000000000000000000000000
--- a/third_party/WebKit/LayoutTests/webaudio/audioparam-setTargetAtTime-limit.html
+++ /dev/null
@@ -1,160 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <title>Test setTargetAtTime Approach to Limit</title>
- <script src="../resources/js-test.js"></script>
- <script src="resources/compatibility.js"></script>
- <script src="resources/audit-util.js"></script>
- <script src="resources/audio-testing.js"></script>
- <script src="resources/audioparam-testing.js"></script>
- </head>
-
- <body>
- <script>
- description("Test setTargetAtTime Approach to Limit");
- window.jsTestIsAsync = true;
-
- var audit = Audit.createTaskRunner();
-
- audit.defineTask("approach 1", function(done) {
- var sampleRate = 48000;
-
- // A really short time constant so that setTargetAtTime approaches the limiting value well
- // before the end of the test.
- var timeConstant = 0.001;
-
- // Find the time where setTargetAtTime is close enough to the limit. Since we're
- // approaching 1, use a value of eps smaller than kSetTargetThreshold (5e-7) in
- // AudioParamTimeline.cpp. This is to account for round-off in the actual implementation
- // (which uses a filter and not the formula.)
- var limitThreshold = 1e-7;
-
- runTest({
- sampleRate: sampleRate,
- v0: 0,
- v1: 1,
- timeConstant: timeConstant,
- eps: limitThreshold,
- // Experimentally determined
- threshold: 2.4e-5
- }).then(done);
- })
-
- audit.defineTask("approach 0", function(done) {
- // Use the equation for setTargetAtTime to figure out when we are close to 0:
- //
- // v(t) = exp(-t/tau)
- //
- // So find t such that exp(-t/tau) <= eps. Thus t >= - tau * log(eps).
- //
- // For eps, use 1e-20 (kSetTargetZeroThreshold in AudioParamTimeline.cpp).
-
- var sampleRate = 48000;
-
- // A really short time constant so that setTargetAtTime approaches the limiting value well
- // before the end of the test.
- var timeConstant = 0.001;
-
- // Find the time where setTargetAtTime is close enough to the limit. Since we're
- // approaching 0, use a value of eps smaller than kSetTargetZeroThreshold (1e-20) in
- // AudioParamTimeline.cpp. This is to account for round-off in the actual implementation
- // (which uses a filter and not the formula.)
- var limitThreshold = 1e-21;
-
- runTest({
- sampleRate: sampleRate,
- v0: 1,
- v1: 0,
- timeConstant: timeConstant,
- eps: limitThreshold,
- // Experimentally determined
- threshold: 1.3e-7
- }).then(done);
- });
-
- function findLimitTime(v0, v1, timeConstant, eps) {
- // Find the time at which the setTargetAtTime is close enough to the target value |v1| where
- // we can consider the curve to have reached its limiting value.
- //
- // If v1 = 0, |eps| is the absolute error between the actual value and
- // |v1|. Otherwise, |eps| is the relative error between the actual value and |v1|.
- //
- // The curve is
- //
- // v(t) = v1 - (v1 - v0) * exp(-t/timeConstant)
- //
- // If v1 = 0,
- //
- // v(t) = v0 * exp(-t/timeConstant)
- //
- // Solve this for when |v(t)| <= eps:
- //
- // t >= timeConstant * log(v0/eps)
- //
- // For v1 not zero, we want |v(t) - v1|/|v1| <= eps:
- //
- // t >= timeConstant * log(abs(v1-v0)/eps/v1)
-
- if (v1)
- return timeConstant * Math.log(Math.abs(v1-v0)/eps/v1);
- else
- return timeConstant * Math.log(v0/eps);
- }
-
- function runTest(options) {
- var renderLength = 1;
-
- var context = new OfflineAudioContext(1, renderLength * sampleRate, options.sampleRate);
-
- // A constant source
- var source = context.createBufferSource();
- source.buffer = createConstantBuffer(context, 1, 1);
- source.loop = true;
-
- var gain = context.createGain();
- gain.gain.setValueAtTime(options.v0, 0);
- gain.gain.setTargetAtTime(options.v1, 0, options.timeConstant);
-
- source.connect(gain);
- gain.connect(context.destination);
-
- source.start();
-
- return context.startRendering().then(function (resultBuffer) {
- var actual = resultBuffer.getChannelData(0);
- var expected = createExponentialApproachArray(0, renderLength,
- options.v0, options.v1,
- options.sampleRate, options.timeConstant);
-
- var message = "setTargetAtTime(" + options.v1 + ", 0, " + options.timeConstant + ")";
-
- // Determine where the tail of the curve begins. (Where the curve has basically reached
- // the limit value.)
- var tailTime = findLimitTime(options.v0, options.v1, options.timeConstant, options.eps);
- var tailFrame = Math.ceil(tailTime * options.sampleRate);
-
- var success = true;
- success = Should("Initial output of " + tailFrame + " samples for " + message,
- actual.slice(0, tailFrame), { numberOfArrayLog: 8 })
- .beCloseToArray(expected.slice(0, tailFrame), options.threshold) && success;
-
- success = Should("Tail output for " + message,
- actual.slice(tailFrame))
- .containValues([options.v1]) && success;
-
- if (success)
- testPassed(message + " had the expected values.\n");
- else
- testFailed(message + " did not have the expected values.\n");
- });
- }
-
- audit.defineTask("finish", function (done) {
- finishJSTest();
- done();
- });
-
- audit.runTasks();
- </script>
- </body>
-</html>

Powered by Google App Engine
This is Rietveld 408576698