Skip to content

Commit 7703754

Browse files
committed
Import Analyser / AudioBuffer / AudioBufferSource layout tests from Blink
https://bugs.webkit.org/show_bug.cgi?id=216649 Reviewed by Eric Carlson. Import Analyser / AudioBuffer / AudioBufferSource layout tests from Blink to extend webaudio test coverage. * webaudio/Analyser/automatic-pull-node-expected.txt: Added. * webaudio/Analyser/automatic-pull-node.html: Added. * webaudio/Analyser/handle-silent-inputs-expected.txt: Added. * webaudio/Analyser/handle-silent-inputs.html: Added. * webaudio/Analyser/realtimeanalyser-byte-data-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-byte-data.html: Added. * webaudio/Analyser/realtimeanalyser-downmix-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-downmix.html: Added. * webaudio/Analyser/realtimeanalyser-fftsize-reset-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-fftsize-reset.html: Added. * webaudio/Analyser/realtimeanalyser-float-data-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-float-data.html: Added. * webaudio/Analyser/realtimeanalyser-freq-data-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-freq-data-smoothing-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html: Added. * webaudio/Analyser/realtimeanalyser-freq-data.html: Added. * webaudio/Analyser/realtimeanalyser-multiple-calls-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-multiple-calls.html: Added. * webaudio/Analyser/realtimeanalyser-zero-expected.txt: Added. * webaudio/Analyser/realtimeanalyser-zero.html: Added. * webaudio/AudioBuffer/audiobuffer-resample-expected.txt: Added. * webaudio/AudioBuffer/audiobuffer-resample.html: Added. * webaudio/AudioBuffer/huge-buffer-expected.txt: Added. * webaudio/AudioBuffer/huge-buffer.html: Added. * webaudio/AudioBufferSource/audiobuffersource-detune-modulated-impulse-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-detune-modulated-impulse.html: Added. * webaudio/AudioBufferSource/audiobuffersource-detune-modulation-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-detune-modulation.html: Added. * webaudio/AudioBufferSource/audiobuffersource-late-start-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-late-start.html: Added. * webaudio/AudioBufferSource/audiobuffersource-loop-comprehensive-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-loop-comprehensive.html: Added. * webaudio/AudioBufferSource/audiobuffersource-loop-grain-no-duration-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-loop-grain-no-duration.html: Added. * webaudio/AudioBufferSource/audiobuffersource-loop-points-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-loop-points.html: Added. * webaudio/AudioBufferSource/audiobuffersource-playbackrate-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulated-impulse-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulated-impulse.html: Added. * webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulation-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulation.html: Added. * webaudio/AudioBufferSource/audiobuffersource-playbackrate.html: Added. * webaudio/AudioBufferSource/audiobuffersource-premature-loop-stop-expected.txt: Added. * webaudio/AudioBufferSource/audiobuffersource-premature-loop-stop.html: Added. * webaudio/AudioBufferSource/resources/audiobuffersource-detune-modulation-expected.wav: Added. * webaudio/AudioBufferSource/resources/audiobuffersource-loop-points-expected.wav: Added. * webaudio/AudioBufferSource/resources/audiobuffersource-playbackrate-modulation-expected.wav: Added. * webaudio/audiobuffersource-loop-comprehensive-expected.txt: Removed. * webaudio/audiobuffersource-loop-comprehensive.html: Removed. * webaudio/audiobuffersource-loop-points-expected.wav: Removed. * webaudio/audiobuffersource-loop-points.html: Removed. * webaudio/audiobuffersource-negative-playbackrate-interpolated-loop.html: * webaudio/audiobuffersource-negative-playbackrate-interpolated.html: * webaudio/audiobuffersource-negative-playbackrate-loop.html: * webaudio/audiobuffersource-negative-playbackrate.html: * webaudio/audiobuffersource-playbackrate-expected.wav: Removed. * webaudio/audiobuffersource-start.html: * webaudio/resources/audiobuffersource-testing-legacy.js: Copied from LayoutTests/webaudio/resources/audiobuffersource-testing.js. (createTestBuffer): (createRamp): (checkSingleTest): (checkAllTests): * webaudio/resources/audiobuffersource-testing.js: (createTestBuffer): (checkSingleTest): (checkAllTests): (createSawtoothWithModulation): * webaudio/resources/buffer-loader.js: (BufferLoader): (request.onload): (request.onerror): (BufferLoader.prototype.loadBuffer): (BufferLoader.prototype.load): * webaudio/resources/fft.js: Added. (FFT): (this.toString): (FFT.prototype.FFTException): (FFT.prototype.FFTRadix2Core): (FFT.prototype.fft): (FFT.prototype.iFFTRadix2Core): (FFT.prototype.ifft): (FFT.prototype.ifftScale): (FFT.prototype.RFFTRadix2CoreStage1): (FFT.prototype.rfft): * webaudio/resources/realtimeanalyser-testing.js: Added. (createGraph): (applyWindow): (computeFFTMagnitude): (dbToLinear): (linearToDb): (clipMagnitude): (compareFloatFreq): (smoothFFT): (convertFloatToByte): Canonical link: https://commits.webkit.org/229506@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267245 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 3a9bc97 commit 7703754

66 files changed

Lines changed: 4457 additions & 325 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

LayoutTests/ChangeLog

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,108 @@
1+
2020-09-18 Chris Dumez <cdumez@apple.com>
2+
3+
Import Analyser / AudioBuffer / AudioBufferSource layout tests from Blink
4+
https://bugs.webkit.org/show_bug.cgi?id=216649
5+
6+
Reviewed by Eric Carlson.
7+
8+
Import Analyser / AudioBuffer / AudioBufferSource layout tests from Blink to extend
9+
webaudio test coverage.
10+
11+
* webaudio/Analyser/automatic-pull-node-expected.txt: Added.
12+
* webaudio/Analyser/automatic-pull-node.html: Added.
13+
* webaudio/Analyser/handle-silent-inputs-expected.txt: Added.
14+
* webaudio/Analyser/handle-silent-inputs.html: Added.
15+
* webaudio/Analyser/realtimeanalyser-byte-data-expected.txt: Added.
16+
* webaudio/Analyser/realtimeanalyser-byte-data.html: Added.
17+
* webaudio/Analyser/realtimeanalyser-downmix-expected.txt: Added.
18+
* webaudio/Analyser/realtimeanalyser-downmix.html: Added.
19+
* webaudio/Analyser/realtimeanalyser-fftsize-reset-expected.txt: Added.
20+
* webaudio/Analyser/realtimeanalyser-fftsize-reset.html: Added.
21+
* webaudio/Analyser/realtimeanalyser-float-data-expected.txt: Added.
22+
* webaudio/Analyser/realtimeanalyser-float-data.html: Added.
23+
* webaudio/Analyser/realtimeanalyser-freq-data-expected.txt: Added.
24+
* webaudio/Analyser/realtimeanalyser-freq-data-smoothing-expected.txt: Added.
25+
* webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html: Added.
26+
* webaudio/Analyser/realtimeanalyser-freq-data.html: Added.
27+
* webaudio/Analyser/realtimeanalyser-multiple-calls-expected.txt: Added.
28+
* webaudio/Analyser/realtimeanalyser-multiple-calls.html: Added.
29+
* webaudio/Analyser/realtimeanalyser-zero-expected.txt: Added.
30+
* webaudio/Analyser/realtimeanalyser-zero.html: Added.
31+
* webaudio/AudioBuffer/audiobuffer-resample-expected.txt: Added.
32+
* webaudio/AudioBuffer/audiobuffer-resample.html: Added.
33+
* webaudio/AudioBuffer/huge-buffer-expected.txt: Added.
34+
* webaudio/AudioBuffer/huge-buffer.html: Added.
35+
* webaudio/AudioBufferSource/audiobuffersource-detune-modulated-impulse-expected.txt: Added.
36+
* webaudio/AudioBufferSource/audiobuffersource-detune-modulated-impulse.html: Added.
37+
* webaudio/AudioBufferSource/audiobuffersource-detune-modulation-expected.txt: Added.
38+
* webaudio/AudioBufferSource/audiobuffersource-detune-modulation.html: Added.
39+
* webaudio/AudioBufferSource/audiobuffersource-late-start-expected.txt: Added.
40+
* webaudio/AudioBufferSource/audiobuffersource-late-start.html: Added.
41+
* webaudio/AudioBufferSource/audiobuffersource-loop-comprehensive-expected.txt: Added.
42+
* webaudio/AudioBufferSource/audiobuffersource-loop-comprehensive.html: Added.
43+
* webaudio/AudioBufferSource/audiobuffersource-loop-grain-no-duration-expected.txt: Added.
44+
* webaudio/AudioBufferSource/audiobuffersource-loop-grain-no-duration.html: Added.
45+
* webaudio/AudioBufferSource/audiobuffersource-loop-points-expected.txt: Added.
46+
* webaudio/AudioBufferSource/audiobuffersource-loop-points.html: Added.
47+
* webaudio/AudioBufferSource/audiobuffersource-playbackrate-expected.txt: Added.
48+
* webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulated-impulse-expected.txt: Added.
49+
* webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulated-impulse.html: Added.
50+
* webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulation-expected.txt: Added.
51+
* webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulation.html: Added.
52+
* webaudio/AudioBufferSource/audiobuffersource-playbackrate.html: Added.
53+
* webaudio/AudioBufferSource/audiobuffersource-premature-loop-stop-expected.txt: Added.
54+
* webaudio/AudioBufferSource/audiobuffersource-premature-loop-stop.html: Added.
55+
* webaudio/AudioBufferSource/resources/audiobuffersource-detune-modulation-expected.wav: Added.
56+
* webaudio/AudioBufferSource/resources/audiobuffersource-loop-points-expected.wav: Added.
57+
* webaudio/AudioBufferSource/resources/audiobuffersource-playbackrate-modulation-expected.wav: Added.
58+
* webaudio/audiobuffersource-loop-comprehensive-expected.txt: Removed.
59+
* webaudio/audiobuffersource-loop-comprehensive.html: Removed.
60+
* webaudio/audiobuffersource-loop-points-expected.wav: Removed.
61+
* webaudio/audiobuffersource-loop-points.html: Removed.
62+
* webaudio/audiobuffersource-negative-playbackrate-interpolated-loop.html:
63+
* webaudio/audiobuffersource-negative-playbackrate-interpolated.html:
64+
* webaudio/audiobuffersource-negative-playbackrate-loop.html:
65+
* webaudio/audiobuffersource-negative-playbackrate.html:
66+
* webaudio/audiobuffersource-playbackrate-expected.wav: Removed.
67+
* webaudio/audiobuffersource-start.html:
68+
* webaudio/resources/audiobuffersource-testing-legacy.js: Copied from LayoutTests/webaudio/resources/audiobuffersource-testing.js.
69+
(createTestBuffer):
70+
(createRamp):
71+
(checkSingleTest):
72+
(checkAllTests):
73+
* webaudio/resources/audiobuffersource-testing.js:
74+
(createTestBuffer):
75+
(checkSingleTest):
76+
(checkAllTests):
77+
(createSawtoothWithModulation):
78+
* webaudio/resources/buffer-loader.js:
79+
(BufferLoader):
80+
(request.onload):
81+
(request.onerror):
82+
(BufferLoader.prototype.loadBuffer):
83+
(BufferLoader.prototype.load):
84+
* webaudio/resources/fft.js: Added.
85+
(FFT):
86+
(this.toString):
87+
(FFT.prototype.FFTException):
88+
(FFT.prototype.FFTRadix2Core):
89+
(FFT.prototype.fft):
90+
(FFT.prototype.iFFTRadix2Core):
91+
(FFT.prototype.ifft):
92+
(FFT.prototype.ifftScale):
93+
(FFT.prototype.RFFTRadix2CoreStage1):
94+
(FFT.prototype.rfft):
95+
* webaudio/resources/realtimeanalyser-testing.js: Added.
96+
(createGraph):
97+
(applyWindow):
98+
(computeFFTMagnitude):
99+
(dbToLinear):
100+
(linearToDb):
101+
(clipMagnitude):
102+
(compareFloatFreq):
103+
(smoothFFT):
104+
(convertFloatToByte):
105+
1106
2020-09-18 Jer Noble <jer.noble@apple.com>
2107

3108
REGRESSION(r254031): Captions fail to load on jw.org

LayoutTests/TestExpectations

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,9 +324,19 @@ imported/w3c/web-platform-tests/webaudio/the-audio-api/the-mediastreamaudiosourc
324324
imported/w3c/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/realtime-conv.html [ Pass Failure ]
325325
imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/k-rate-stereo-panner.html [ Pass Failure ]
326326

327-
# Values in FAIL lines differ from machine to machine.
327+
# Values in FAIL lines differ from machine to machine, we should be able to unskip them once they pass.
328328
imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/buffer-resampling.html [ Pass Failure ]
329329
imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/sub-sample-buffer-stitching.html [ Pass Failure ]
330+
webaudio/Analyser/handle-silent-inputs.html [ Pass Failure ]
331+
webaudio/Analyser/realtimeanalyser-fftsize-reset.html [ Pass Failure ]
332+
webaudio/Analyser/realtimeanalyser-freq-data-smoothing.html [ Pass Failure ]
333+
webaudio/Analyser/realtimeanalyser-freq-data.html [ Pass Failure ]
334+
webaudio/Analyser/realtimeanalyser-multiple-calls.html [ Pass Failure ]
335+
webaudio/AudioBufferSource/audiobuffersource-detune-modulation.html [ Pass Failure ]
336+
webaudio/AudioBufferSource/audiobuffersource-playbackrate-modulation.html [ Pass Failure ]
337+
338+
# This WebAudio test is crashing in debug since its import from Blink.
339+
[ Debug ] webaudio/AudioBufferSource/audiobuffersource-playbackrate.html [ Crash ]
330340

331341
webkit.org/b/176929 imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/ready-states/autoplay-with-slow-text-tracks.html [ Pass Failure ]
332342

LayoutTests/platform/glib/TestExpectations

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,6 @@ webkit.org/b/215255 imported/w3c/web-platform-tests/webaudio/the-audio-api/the-a
262262

263263
webkit.org/b/215281 imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html [ Pass Failure ]
264264

265-
webkit.org/b/215886 webaudio/audiobuffersource-loop-points.html [ Skip ]
266265
webkit.org/b/215886 webaudio/audiobuffersource-playbackrate.html [ Skip ]
267266

268267
webkit.org/b/216171 imported/w3c/web-platform-tests/webaudio/the-audio-api/the-destinationnode-interface/destination.html [ Failure ]

LayoutTests/platform/mac/TestExpectations

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,6 @@ webkit.org/b/85689 fast/animation/request-animation-frame-disabled.html [ Skip ]
470470

471471
webaudio/mediastreamaudiosourcenode.html [ Skip ]
472472
webaudio/codec-tests/vorbis/ [ WontFix ]
473-
webkit.org/b/119467 webaudio/audiobuffersource-loop-points.html [ Skip ]
474473

475474
# Skip tests in fast/text/shaping
476475
webkit.org/b/90951 fast/text/shaping
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
PASS # AUDIT TASK RUNNER STARTED.
3+
PASS Executing "test1"
4+
PASS Executing "test2"
5+
PASS Executing "test3"
6+
PASS Audit report
7+
PASS > [test1]
8+
PASS RealtimeAnalyserNode got pulled when connected from upstream node but not to downstream node is true.
9+
PASS < [test1] All assertions passed. (total 1 assertions)
10+
PASS > [test2]
11+
PASS RealtimeAnalyserNode got pulled when connected from upstream node and to destination node is true.
12+
PASS < [test2] All assertions passed. (total 1 assertions)
13+
PASS > [test3]
14+
PASS RealtimeAnalyserNode didn't get pulled when it should not is true.
15+
PASS < [test3] All assertions passed. (total 1 assertions)
16+
PASS # AUDIT TASK RUNNER FINISHED: 3 tasks ran successfully.
17+
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>
5+
automatic-pull-node.html
6+
</title>
7+
<script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script>
8+
<script src="../../resources/testharnessreport.js"></script>
9+
<script src="../resources/audit-util.js"></script>
10+
<script src="../resources/audit.js"></script>
11+
</head>
12+
<body>
13+
<script id="layout-test-code">
14+
// This test verifies that the AudioBasicInspectorNode based nodes work
15+
// correctly
16+
17+
let audit = Audit.createTaskRunner();
18+
19+
let sampleRate = 44100.0;
20+
// We carefully arrange the renderLengthInFrames to be a multiple of the
21+
// AudioNode rendering quantum (AudioNode::ProcessingSizeInFrames) so that
22+
// AudioSourceNode will not feed tailing zeroes into the context and fail
23+
// this test.
24+
let renderLengthInFrames = 256;
25+
let fftSize = 64;
26+
27+
let audioDataOne = 255; // Audio data 1.0 in Uint8 format will be 255.
28+
let audioDataZero = 128; // Audio data 0 in Uint8 format will be 128.
29+
30+
let context;
31+
let constantBuffer;
32+
let bufferSource;
33+
let analyser;
34+
35+
function constructCommonGraph() {
36+
// Create offline audio context.
37+
context = new OfflineAudioContext(1, renderLengthInFrames, sampleRate);
38+
constantBuffer = createConstantBuffer(context, renderLengthInFrames, 1);
39+
40+
bufferSource = context.createBufferSource();
41+
bufferSource.buffer = constantBuffer;
42+
43+
analyser = context.createAnalyser();
44+
analyser.fftSize = fftSize;
45+
46+
bufferSource.connect(analyser);
47+
}
48+
49+
function test1Finished(should) {
50+
let timeDomainData = new Uint8Array(fftSize);
51+
analyser.getByteTimeDomainData(timeDomainData);
52+
53+
should(
54+
timeDomainData[0] >= audioDataOne,
55+
'RealtimeAnalyserNode got pulled when connected from upstream node but not to downstream node')
56+
.beTrue();
57+
}
58+
59+
// To verify the realtimeAnalyser can pull data when there is an upstream
60+
// node connected to it but it's not connected to a downstream node.
61+
audit.define('test1', function(task, should) {
62+
constructCommonGraph();
63+
64+
bufferSource.start(0);
65+
66+
context.startRendering()
67+
.then(function() {
68+
test1Finished(should);
69+
})
70+
.then(task.done.bind(task));
71+
});
72+
73+
function test2Finished(should) {
74+
let timeDomainData = new Uint8Array(fftSize);
75+
analyser.getByteTimeDomainData(timeDomainData);
76+
77+
should(
78+
timeDomainData[0] >= audioDataOne,
79+
'RealtimeAnalyserNode got pulled when connected from upstream node and to destination node')
80+
.beTrue();
81+
}
82+
83+
// To verify the realtimeAnalyser can process normally when there is an
84+
// upstream node connected to it and it's also connected to a downstream
85+
// node which ultimately connect to audio destination.
86+
audit.define('test2', function(task, should) {
87+
constructCommonGraph();
88+
89+
analyser.connect(context.destination);
90+
91+
bufferSource.start(0);
92+
93+
context.startRendering()
94+
.then(function() {
95+
test2Finished(should);
96+
})
97+
.then(task.done.bind(task));
98+
});
99+
100+
function test3Finished(should) {
101+
let timeDomainData = new Uint8Array(fftSize);
102+
analyser.getByteTimeDomainData(timeDomainData);
103+
104+
// If realtimeAnalyser hasn't pulled any data, the data in buffer will
105+
// be 0.
106+
should(
107+
timeDomainData[0] == audioDataZero,
108+
'RealtimeAnalyserNode didn\'t get pulled when it should not')
109+
.beTrue();
110+
;
111+
}
112+
113+
// To verify the realtimeAnalyser will stop pulling if it is connected to
114+
// a downstream node which is not ultimatly connected to any audio
115+
// destination.
116+
audit.define('test3', function(task, should) {
117+
constructCommonGraph();
118+
119+
let gain = context.createGain();
120+
analyser.connect(gain);
121+
122+
bufferSource.start(0);
123+
124+
context.startRendering()
125+
.then(function() {
126+
test3Finished(should);
127+
})
128+
.then(task.done.bind(task));
129+
});
130+
131+
audit.run();
132+
</script>
133+
</body>
134+
</html>

0 commit comments

Comments
 (0)