blob: 04b0065b6331979d9c73107dc5f029cbe4cfc137 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>
OfflineAudioContext - Thread Smoke Test
</title>
<script src="../../imported/w3c/web-platform-tests/resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../resources/audit.js"></script>
</head>
<body>
<script id="layout-test-code">
const audit = Audit.createTaskRunner();
// The common sample rate.
const sampleRate = 48000;
// To make channel count and buffer length irrelevant to this test.
const numberOfChannels = 1;
const renderLength = 1;
// 1000 concurrent contexts caused this test to time out on Mac OS and
// Linux. (See: crbug.com/1092145, crbug.com/741699)
const maxNumberOfContexts = 500;
let contexts = [];
// For recursive and sequential rendering of multiple context.
function recurseContextRendering(index, oncomplete) {
if (index < maxNumberOfContexts) {
contexts[index].startRendering().then(() => {
recurseContextRendering(index + 1, oncomplete);
});
} else {
oncomplete(index);
}
}
// Create contexts up front, but do not start rendering. Based on
// crbug.com/716800, this caused a crash with out-of-threads error.
audit.define(
{
label: 'context-creation-smoketest',
description:
'Creating ' + maxNumberOfContexts + ' contexts up front.'
},
(task, should) => {
let i;
for (i = 0; i < maxNumberOfContexts; ++i) {
contexts.push(new OfflineAudioContext(
numberOfChannels, renderLength, sampleRate));
}
should(i, 'The number of created contexts without a crash')
.beEqualTo(maxNumberOfContexts);
task.done();
});
// Create contexts, render and drop them sequentially. This should not
// crash the browser with out-of-threads error.
audit.define(
{
label: 'rendering-thread-smoketest',
description:
'Rendering ' + maxNumberOfContexts + ' contexts sequentially.'
},
(task, should) => {
recurseContextRendering(0, (counter) => {
should(counter, 'The number of contexts rendered without a crash')
.beEqualTo(maxNumberOfContexts);
task.done();
});
});
audit.run();
</script>
</body>
</html>