22
22
begin to fire.
23
23
*/
24
24
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
28
28
_Thread_local int testTlsVariable = 1 ;
29
29
int lastTlsVariableValueInAudioThread = 1 ;
30
30
#endif
31
31
32
32
// This function will be called for every fixed-size buffer of audio samples to be processed.
33
33
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()
35
36
assert (testTlsVariable == lastTlsVariableValueInAudioThread );
36
37
++ testTlsVariable ;
37
38
lastTlsVariableValueInAudioThread = testTlsVariable ;
@@ -63,14 +64,15 @@ EM_JS(void, InitHtmlUi, (EMSCRIPTEN_WEBAUDIO_T audioContext), {
63
64
};
64
65
});
65
66
66
- #ifdef REPORT_RESULT
67
+ #ifdef TEST_AND_EXIT
67
68
bool main_thread_tls_access (double time , void * userData ) {
68
69
// 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().
70
72
testTlsVariable = (int )time ;
73
+ // Exit to the test harness after enough calls to ProcessAudio()
71
74
if (lastTlsVariableValueInAudioThread >= 100 ) {
72
- REPORT_RESULT (0 );
73
- return false;
75
+ emscripten_force_exit (EXIT_SUCCESS );
74
76
}
75
77
return true;
76
78
}
@@ -97,7 +99,8 @@ void AudioWorkletProcessorCreated(EMSCRIPTEN_WEBAUDIO_T audioContext, bool succe
97
99
// Connect the audio worklet node to the graph.
98
100
emscripten_audio_node_connect (wasmAudioWorklet , audioContext , 0 , 0 );
99
101
100
- #ifdef REPORT_RESULT
102
+ #ifdef TEST_AND_EXIT
103
+ // Schedule this to exit after ProcessAudio() has been called 100 times
101
104
emscripten_set_timeout_loop (main_thread_tls_access , 10 , 0 );
102
105
#endif
103
106
@@ -132,4 +135,9 @@ int main() {
132
135
// and kick off Audio Worklet scope initialization, which shares the Wasm
133
136
// Module and Memory to the AudioWorklet scope and initializes its stack.
134
137
emscripten_start_wasm_audio_worklet_thread_async (context , wasmAudioWorkletStack , sizeof (wasmAudioWorkletStack ), WebAudioWorkletThreadInitialized , 0 );
138
+
139
+ #ifdef TEST_AND_EXIT
140
+ // We're in the test harness and exiting is via main_thread_tls_access()
141
+ emscripten_exit_with_live_runtime ();
142
+ #endif
135
143
}
0 commit comments