|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <head> |
|
4 <title>Test AudioBufferSourceNode when an AudioBuffer's getChanneData array is neutered</title> |
|
5 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
6 <script type="text/javascript" src="webaudio.js"></script> |
|
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> |
|
8 </head> |
|
9 <body> |
|
10 <pre id="test"> |
|
11 <script class="testbody" type="text/javascript"> |
|
12 |
|
13 function createGarbage() { |
|
14 var s = []; |
|
15 for (var i = 0; i < 10000000; ++i) { |
|
16 s.push(i); |
|
17 } |
|
18 var sum = 0; |
|
19 for (var i = 0; i < s.length; ++i) { |
|
20 sum += s[i]; |
|
21 } |
|
22 return sum; |
|
23 } |
|
24 |
|
25 var worker = new Worker("audioBufferSourceNodeNeutered_worker.js"); |
|
26 |
|
27 var gTest = { |
|
28 length: 2048, |
|
29 numberOfChannels: 1, |
|
30 createGraph: function(context) { |
|
31 var buffer = context.createBuffer(1, 10000000, context.sampleRate); |
|
32 var data = buffer.getChannelData(0); |
|
33 for (var i = 0; i < data.length; ++i) { |
|
34 data[i] = (i%100)/100 - 0.5; |
|
35 } |
|
36 |
|
37 // Neuter the buffer now |
|
38 var data = buffer.getChannelData(0).buffer; |
|
39 worker.postMessage(data, [data]); |
|
40 // Create garbage and GC to replace the buffer data with garbage |
|
41 SpecialPowers.gc(); |
|
42 createGarbage(); |
|
43 SpecialPowers.gc(); |
|
44 |
|
45 var source = context.createBufferSource(); |
|
46 source.buffer = buffer; |
|
47 source.start(); |
|
48 // This should play silence |
|
49 return source; |
|
50 }, |
|
51 }; |
|
52 |
|
53 runTest(); |
|
54 |
|
55 </script> |
|
56 </pre> |
|
57 </body> |
|
58 </html> |