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

Unified Diff: third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample.html

Issue 2597723002: Convert audiobuffer-resample to testharness (Closed)
Patch Set: Address review comments. Created 3 years, 11 months 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
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample-expected.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample.html
diff --git a/third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample.html b/third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample.html
index d45aa6cd78aa1c4a3cc787418641ef178cd519bd..ce6dfc4c540b09471ea47e42ac38bf156be8cae9 100644
--- a/third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample.html
+++ b/third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample.html
@@ -1,140 +1,115 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!doctype>
<html>
<head>
- <script src="../../resources/js-test.js"></script>
+ <script src="../../resources/testharness.js"></script>
+ <script src="../../resources/testharnessreport.js"></script>
<script src="../resources/audit-util.js"></script>
- <script src="../resources/audio-testing.js"></script>
+ <script src="../resources/audit.js"></script>
</head>
<body>
- <div id="description"></div>
- <div id="console"></div>
-
<script>
+ let audit = Audit.createTaskRunner();
+
// These are global to make debugging a little easier.
- var context;
- var buffer;
- var source;
- var renderedData;
- var trueData;
- var signalEnergy;
- var noiseEnergy;
- var maxError;
+ let context;
+ let buffer;
+ let source;
+ let renderedData;
+ let trueData;
+ let signalEnergy;
+ let noiseEnergy;
+ let maxError;
// Context sample rate.
- var sampleRate = 48000;
+ let sampleRate = 48000;
// The sample rate of the buffer.
- var bufferRate = 3000;
+ let bufferRate = 3000;
// The audio buffer is a sine wave of this frequency.
- var toneFrequency = 440;
+ let toneFrequency = 440;
// How long test is
- var lengthInSeconds = 0.5;
- // The maximum allowed peak error between the actual and true output. This value was
- // experimentally determined for the given bufferRate.
- var peakThreshold = 0.11;
+ let lengthInSeconds = 0.5;
+ // The maximum allowed peak error between the actual and true output. This
+ // value was experimentally determined for the given bufferRate.
+ let peakThreshold = 0.11;
// The minimum SNR allowed between the actual and true output.
- var snrThreshold = 22.35;
+ let snrThreshold = 22.35;
- description("Test resampling of an AudioBuffer at " + bufferRate + " Hz");
- function log10(x) {
- return Math.log(x)/Math.LN10;
- }
-
- // Generate a sine wave in an AudioBuffer using the given |freq|. The AudioBuffer has the
- // sample rate of |rate|.
+ // Generate a sine wave in an AudioBuffer using the given |freq|. The
+ // AudioBuffer has the sample rate of |rate|.
function createSineBuffer(context, freq, rate) {
- var buf = context.createBuffer(1, lengthInSeconds * rate, rate);
- var omega = 2 * Math.PI * freq / rate;
- var signal = buf.getChannelData(0);
- var length = signal.length;
- for (var k = 0; k < length; ++k)
- signal[k] = Math.sin(omega * k);
-
- return buf;
+ let buf = context.createBuffer(1, lengthInSeconds * rate, rate);
+ let omega = 2 * Math.PI * freq / rate;
+ let signal = buf.getChannelData(0);
+ let length = signal.length;
+ for (let k = 0; k < length; ++k)
+ signal[k] = Math.sin(omega * k);
+
+ return buf;
}
// Check the output against the expected output.
- function checkResult(event) {
- renderedData = event.renderedBuffer.getChannelData(0);
- var length = renderedData.length;
- // Generate a reference sine wave at the context rate
- var trueReference = createSineBuffer(context, toneFrequency, context.sampleRate);
- trueData = trueReference.getChannelData(0);
-
- // To compare the actual output against the reference, we compute the peak error and the
- // SNR between the two.
- signalEnergy = 0;
- noiseEnergy = 0;
- maxError = -1;
-
- var success = true;
-
- // Compute the peak error and the SNR.
- for (var k = 0; k < length / 2; ++k) {
- var diff = renderedData[k] - trueData[k];
- noiseEnergy += diff * diff;
- signalEnergy += trueData[k] * trueData[k];
- if (Math.abs(diff) > maxError)
- maxError = Math.abs(diff);
- }
-
- var snr;
-
- if (noiseEnergy == 0)
- snr = 1000;
- else
- snr = 10 * log10(signalEnergy / noiseEnergy);
-
- if (maxError < peakThreshold) {
- testPassed("Peak error between actual and reference data below threshold of " +
- peakThreshold + ".");
- } else {
- testFailed("Peak error of " + maxError + " exceeds threshold of " +
- peakThreshold + ".");
- success = false;
- }
-
- if (snr > snrThreshold) {
- testPassed("SNR exceeds threshold of " + snrThreshold + " dB.");
- } else {
- testFailed("SNR of " + snr + " is below the threshold of " + snrThreshold + ".");
- success = false;
- }
-
- if (success)
- testPassed("AudioBuffer resampling is accurate for buffer rate of " +
- bufferRate + " Hz.");
- else
- testFailed("AudioBuffer resampling is not accurate enough for buffer rate of " +
- bufferRate + " Hz.");
-
- finishJSTest();
+ function checkResult(buffer, should) {
+ renderedData = buffer.getChannelData(0);
+ let length = renderedData.length;
+ // Generate a reference sine wave at the context rate
+ let trueReference = createSineBuffer(context, toneFrequency, context.sampleRate);
+ trueData = trueReference.getChannelData(0);
+
+ // To compare the actual output against the reference, we compute the
+ // peak error and the SNR between the two.
+ signalEnergy = 0;
+ noiseEnergy = 0;
+ maxError = -1;
+
+ let success = true;
+
+ // Compute the peak error and the SNR.
+ for (let k = 0; k < length / 2; ++k) {
+ let diff = renderedData[k] - trueData[k];
+ noiseEnergy += diff * diff;
+ signalEnergy += trueData[k] * trueData[k];
+ if (Math.abs(diff) > maxError)
+ maxError = Math.abs(diff);
+ }
+
+ let snr;
+
+ if (noiseEnergy == 0)
+ snr = 1000;
+ else
+ snr = 10 * Math.log10(signalEnergy / noiseEnergy);
+
+ should(maxError, "Peak error between actual and reference data")
+ .beLessThan(peakThreshold);
+
+ should(snr, "SNR")
+ .beGreaterThan(snrThreshold);
}
- function runTest() {
- if (window.testRunner) {
- testRunner.dumpAsText();
- testRunner.waitUntilDone();
- }
-
- window.jsTestIsAsync = true;
+ audit.define("Test resampling of an AudioBuffer",
+ function(task, should) {
+ context = new OfflineAudioContext(1, lengthInSeconds *
+ sampleRate,
+ sampleRate);
- context = new OfflineAudioContext(1, lengthInSeconds * sampleRate, sampleRate);
-
- // Create a sine wave in a buffer that's different from the context rate to test
- // resampling.
+ // Create a sine wave in a buffer that's different from the context rate
+ // to test resampling.
buffer = createSineBuffer(context, toneFrequency, bufferRate);
source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
source.start();
- context.oncomplete = checkResult;
- context.startRendering();
- }
- runTest();
- successfullyParsed = true;
+ context.startRendering()
+ .then(function(buffer) {
+ checkResult(buffer, should);
+ })
+ .then(task.done.bind(task));
+ });
+
+ audit.run();
</script>
</body>
</html>
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/webaudio/AudioBuffer/audiobuffer-resample-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698