Skip to content

Commit 01ade1a

Browse files
committed
Flag to run and exit AW test
1 parent 5858c64 commit 01ade1a

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

test/webaudio/audioworklet.c

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,17 @@
2222
begin to fire.
2323
*/
2424

25-
// REPORT_RESULT is defined when running in Emscripten test harness. You can
26-
// strip these out in your own project.
27-
#ifdef REPORT_RESULT
25+
// TEST_AND_EXIT is defined when running in Emscripten test harness. You can
26+
// strip these out in your own project (otherwise playback will end quickly).
27+
#ifdef TEST_AND_EXIT
2828
_Thread_local int testTlsVariable = 1;
2929
int lastTlsVariableValueInAudioThread = 1;
3030
#endif
3131

3232
// This function will be called for every fixed-size buffer of audio samples to be processed.
3333
bool ProcessAudio(int numInputs, const AudioSampleFrame *inputs, int numOutputs, AudioSampleFrame *outputs, int numParams, const AudioParamFrame *params, void *userData) {
34-
#ifdef REPORT_RESULT
34+
#ifdef TEST_AND_EXIT
35+
// Only running in the test harness, see main_thread_tls_access()
3536
assert(testTlsVariable == lastTlsVariableValueInAudioThread);
3637
++testTlsVariable;
3738
lastTlsVariableValueInAudioThread = testTlsVariable;
@@ -63,14 +64,15 @@ EM_JS(void, InitHtmlUi, (EMSCRIPTEN_WEBAUDIO_T audioContext), {
6364
};
6465
});
6566

66-
#ifdef REPORT_RESULT
67+
#ifdef TEST_AND_EXIT
6768
bool main_thread_tls_access(double time, void *userData) {
6869
// Try to mess the TLS variable on the main thread, with the expectation that
69-
// it should not change the TLS value on the AudioWorklet thread.
70+
// it should not change the TLS value on the AudioWorklet thread, asserted in
71+
// ProcessAudio().
7072
testTlsVariable = (int)time;
73+
// Exit to the test harness after enough calls to ProcessAudio()
7174
if (lastTlsVariableValueInAudioThread >= 100) {
72-
REPORT_RESULT(0);
73-
return false;
75+
emscripten_force_exit(EXIT_SUCCESS);
7476
}
7577
return true;
7678
}
@@ -79,7 +81,11 @@ bool main_thread_tls_access(double time, void *userData) {
7981
// This callback will fire after the Audio Worklet Processor has finished being
8082
// added to the Worklet global scope.
8183
void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool success, void *userData) {
82-
if (!success) return;
84+
if (!success) {
85+
emscripten_out("Stopped in AudioWorkletProcessorCreated");
86+
assert(0);
87+
return;
88+
}
8389

8490
// Specify the input and output node configurations for the Wasm Audio
8591
// Worklet. A simple setup with single mono output channel here, and no
@@ -97,7 +103,8 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
97103
// Connect the audio worklet node to the graph.
98104
emscripten_audio_node_connect(wasmAudioWorklet, audioContext, 0, 0);
99105

100-
#ifdef REPORT_RESULT
106+
#ifdef TEST_AND_EXIT
107+
// Schedule this to exit after ProcessAudio() has been called 100 times
101108
emscripten_set_timeout_loop(main_thread_tls_access, 10, 0);
102109
#endif
103110

@@ -108,7 +115,11 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
108115
// AudioWorklet global scope, and is now ready to begin adding Audio Worklet
109116
// Processors.
110117
void WebAudioWorkletThreadInitialized(EMSCRIPTEN_WEBAUDIO_T audioContext, bool success, void *userData) {
111-
if (!success) return;
118+
if (!success) {
119+
emscripten_out("Stopped in WebAudioWorkletThreadInitialized");
120+
assert(0);
121+
return;
122+
}
112123

113124
WebAudioWorkletProcessorCreateOptions opts = {
114125
.name = "noise-generator",
@@ -132,4 +143,9 @@ int main() {
132143
// and kick off Audio Worklet scope initialization, which shares the Wasm
133144
// Module and Memory to the AudioWorklet scope and initializes its stack.
134145
emscripten_start_wasm_audio_worklet_thread_async(context, wasmAudioWorkletStack, sizeof(wasmAudioWorkletStack), WebAudioWorkletThreadInitialized, 0);
146+
147+
#ifdef TEST_AND_EXIT
148+
// We're in the test harness and exiting is via main_thread_tls_access()
149+
emscripten_exit_with_live_runtime();
150+
#endif
135151
}

0 commit comments

Comments
 (0)