92 lines
3.0 KiB
HTML
92 lines
3.0 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>
|
|
offlineaudiocontext-suspend-resume-promise.html
|
|
</title>
|
|
<script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script>
|
|
<script src="../../resources/testharnessreport.js"></script>
|
|
<script src="../resources/audit-util.js"></script>
|
|
<script src="../resources/audit.js"></script>
|
|
</head>
|
|
<body>
|
|
<script id="layout-test-code">
|
|
let audit = Audit.createTaskRunner();
|
|
let context;
|
|
|
|
// The sample rate is multiple of the rendering quantum, so suspension
|
|
// times fall in to the render quantum boundary.
|
|
let renderQuantum = 128;
|
|
|
|
let sampleRate = renderQuantum * 100;
|
|
let renderDuration = 2;
|
|
let scheduledSuspendTime = 0;
|
|
|
|
// With the sample rate setting above, this ensures suspension time fall
|
|
// in to the render quantum boundary.
|
|
let suspendInterval = 0.25;
|
|
|
|
function onSuspended(should) {
|
|
if (context.state === 'suspended' &&
|
|
context.currentTime === scheduledSuspendTime) {
|
|
should(
|
|
context.state === 'suspended' &&
|
|
context.currentTime === scheduledSuspendTime,
|
|
'Context suspended at ' + scheduledSuspendTime + ' second(s)')
|
|
.beTrue();
|
|
|
|
scheduledSuspendTime = context.currentTime + suspendInterval;
|
|
|
|
// Scheduling a suspend before the render duration should pass.
|
|
if (scheduledSuspendTime < renderDuration) {
|
|
should(
|
|
() => context.suspend(scheduledSuspendTime)
|
|
.then(() => onSuspended(should)),
|
|
'Scheduling a new suspend at ' + scheduledSuspendTime +
|
|
' second(s)')
|
|
.notThrow();
|
|
}
|
|
|
|
// Scheduling a suspend exactly at the render duration should be
|
|
// rejected.
|
|
if (scheduledSuspendTime === renderDuration) {
|
|
should(
|
|
context.suspend(scheduledSuspendTime),
|
|
'Scheduling at ' + renderDuration + ' seconds')
|
|
.beRejected();
|
|
}
|
|
|
|
context.resume();
|
|
}
|
|
}
|
|
|
|
audit.define(
|
|
{
|
|
label: 'test',
|
|
description: 'Promise resolution of resume() and suspend()'
|
|
},
|
|
(task, should) => {
|
|
context = new OfflineAudioContext(
|
|
1, sampleRate * renderDuration, sampleRate);
|
|
|
|
// Schedule the first suspension.
|
|
should(
|
|
() => context.suspend(scheduledSuspendTime)
|
|
.then(() => onSuspended(should)),
|
|
'Scheduling a new suspend at ' + scheduledSuspendTime +
|
|
' second(s)')
|
|
.notThrow();
|
|
|
|
context.startRendering()
|
|
.then(function() {
|
|
should(context.state, 'Promise context.state')
|
|
.beEqualTo('closed');
|
|
})
|
|
.then(() => task.done());
|
|
});
|
|
|
|
audit.run();
|
|
</script>
|
|
</body>
|
|
</html>
|