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

Unified Diff: third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-fft-scaling.html

Issue 2596983004: Convert realtimeanalyser-fft-scaling to testharness (Closed)
Patch Set: Rebase Created 3 years, 12 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/Analyser/realtimeanalyser-fft-scaling-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/Analyser/realtimeanalyser-fft-scaling.html
diff --git a/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-fft-scaling.html b/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-fft-scaling.html
index 1fb5ff68aa69bddbb2f6bd7e721cb841ede62e36..2ee683ca0763547d63226e3a85ff330be6bb9474 100644
--- a/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-fft-scaling.html
+++ b/third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-fft-scaling.html
@@ -1,9 +1,10 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<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>
@@ -11,21 +12,21 @@
<div id="console"></div>
<script>
- description("Test scaling of FFT data for AnalyserNode");
+ let audit = Audit.createTaskRunner();
// The number of analysers. We have analysers from size for each of the possible sizes of 32,
// 64, 128, 256, 512, 1024 and 2048 for a total of 7.
- var numberOfAnalysers = 7;
- var sampleRate = 44100;
- var nyquistFrequency = sampleRate / 2;
+ let numberOfAnalysers = 7;
+ let sampleRate = 44100;
+ let nyquistFrequency = sampleRate / 2;
// Frequency of the sine wave test signal. Should be high enough so that we get at least one
// full cycle for the 32-point FFT. This should also be such that the frequency should be
// exactly in one of the FFT bins for each of the possible FFT sizes.
- var oscFrequency = nyquistFrequency/16;
+ let oscFrequency = nyquistFrequency/16;
// The actual peak values from each analyser. Useful for examining the results in Chrome.
- var peakValue = new Array(numberOfAnalysers);
+ let peakValue = new Array(numberOfAnalysers);
// For a 0dBFS sine wave, we would expect the FFT magnitude to be 0dB as well, but the
// analyzer node applies a Blackman window (to smooth the estimate). This reduces the energy
@@ -33,22 +34,20 @@
// determined experimentally.
//
// See https://code.google.com/p/chromium/issues/detail?id=341596.
- var peakThreshold = [-14.43, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56];
+ let peakThreshold = [-14.43, -13.56, -13.56, -13.56, -13.56, -13.56, -13.56];
- var allTestsPassed = true;
-
- function checkResult(order, analyser) {
+ function checkResult(order, analyser, should) {
return function () {
- var index = order - 5;
- var fftSize = 1 << order;
- var fftData = new Float32Array(fftSize);
+ let index = order - 5;
+ let fftSize = 1 << order;
+ let fftData = new Float32Array(fftSize);
analyser.getFloatFrequencyData(fftData);
// Compute the frequency bin that should contain the peak.
- var expectedBin = analyser.frequencyBinCount * (oscFrequency / nyquistFrequency);
+ let expectedBin = analyser.frequencyBinCount * (oscFrequency / nyquistFrequency);
// Find the actual bin by finding the bin containing the peak.
- var actualBin = 0;
+ let actualBin = 0;
peakValue[index] = -1000;
for (k = 0; k < analyser.frequencyBinCount; ++k) {
if (fftData[k] > peakValue[index]) {
@@ -57,77 +56,48 @@
}
}
- var success = true;
-
- if (actualBin == expectedBin) {
- testPassed("Actual FFT peak in the expected position (" + expectedBin + ").");
- } else {
- success = false;
- testFailed("Actual FFT peak (" + actualBin + ") differs from expected (" + expectedBin + ").");
- }
-
- if (peakValue[index] >= peakThreshold[index]) {
- testPassed("Peak value is near " + peakThreshold[index] + " dBFS as expected.");
- } else {
- success = false;
- testFailed("Peak value of " + peakValue[index]
- + " is incorrect. (Expected approximately "
- + peakThreshold[index] + ").");
- }
-
- if (success) {
- testPassed("Analyser correctly scaled FFT data of size " + fftSize);
- } else {
- testFailed("Analyser incorrectly scaled FFT data of size " + fftSize);
- }
- allTestsPassed = allTestsPassed && success;
+ should(actualBin, (1 << order) + "-point FFT peak position")
+ .beEqualTo(expectedBin);
- if (fftSize == 2048) {
- if (allTestsPassed) {
- testPassed("All Analyser tests passed.");
- } else {
- testFailed("At least one Analyser test failed.");
- }
-
- finishJSTest();
- }
+ should(peakValue[index], (1 << order) +
+ "-point FFT peak value in dBFS")
+ .beGreaterThanOrEqualTo(peakThreshold[index]);
}
}
- function runTests() {
- if (window.testRunner) {
- testRunner.dumpAsText();
- testRunner.waitUntilDone();
- }
-
- window.jsTestIsAsync = true;
-
- // Test each analyser size from order 5 (size 32) to 11 (size 2048).
- for (order = 5; order < 12; ++order) {
- // Create a new offline context for each analyser test with the number of samples
- // exactly equal to the fft size. This ensures that the analyser node gets the
- // expected data from the oscillator.
- var context = new OfflineAudioContext(1, 1 << order, sampleRate);
- // Use a sine wave oscillator as the reference source signal.
- var osc = context.createOscillator();
- osc.type = "sine";
- osc.frequency.value = oscFrequency;
- osc.connect(context.destination);
-
- var analyser = context.createAnalyser();
- // No smoothing to simplify the analysis of the result.
- analyser.smoothingTimeConstant = 0;
- analyser.fftSize = 1 << order;
- osc.connect(analyser);
-
- osc.start();
- context.oncomplete = checkResult(order, analyser);
- context.startRendering();
- }
+ audit.define("FFT scaling tests", function (task, should) {
+ task.describe("Test Scaling of FFT in AnalyserNode");
+ let tests = [];
+ for (let k = 5; k < 12; ++k)
+ tests.push(runTest(k, should));
+
+ Promise.all(tests)
+ .then(task.done.bind(task));
+ });
+
+ function runTest(order, should) {
+ let context = new OfflineAudioContext(1, 1 << order, sampleRate);
+ // Use a sine wave oscillator as the reference source signal.
+ let osc = context.createOscillator();
+ osc.type = "sine";
+ osc.frequency.value = oscFrequency;
+ osc.connect(context.destination);
+
+ let analyser = context.createAnalyser();
+ // No smoothing to simplify the analysis of the result.
+ analyser.smoothingTimeConstant = 0;
+ analyser.fftSize = 1 << order;
+ osc.connect(analyser);
+
+ osc.start();
+ context.oncomplete = checkResult(order, analyser, should);
+ return context.startRendering()
+ .then(function (audioBuffer) {
+ checkResult(audioBuffer, order, analyser);
+ });
}
- runTests();
- successfullyParsed = true;
+ audit.run();
</script>
</body>
</html>
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/webaudio/Analyser/realtimeanalyser-fft-scaling-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698