| OLD | NEW |
| 1 function runLateStartTest(audit, context, node) { | 1 function runLateStartTest(audit, context, node) { |
| 2 | 2 |
| 3 // Set up a dummy signal path to keep the audio context running and spend | 3 // Set up a dummy signal path to keep the audio context running and spend |
| 4 // processing time before calling start(0). | 4 // processing time before calling start(0). |
| 5 var osc = context.createOscillator(); | 5 var osc = context.createOscillator(); |
| 6 var silent = context.createGain(); | 6 var silent = context.createGain(); |
| 7 | 7 |
| 8 osc.connect(silent); | 8 osc.connect(silent); |
| 9 silent.connect(context.destination); | 9 silent.connect(context.destination); |
| 10 silent.gain.setValueAtTime(0.0, 0); | 10 silent.gain.setValueAtTime(0.0, 0); |
| 11 osc.start(); | 11 osc.start(); |
| 12 | 12 |
| 13 node.connect(context.destination); | 13 node.connect(context.destination); |
| 14 | 14 |
| 15 // Task: define |onstatechange| and start rendering. | 15 // Task: schedule a suspend and start rendering. |
| 16 audit.defineTask('test-late-start', function (done) { | 16 audit.defineTask('test-late-start', function (done) { |
| 17 | 17 // The node's start time will be clamped to the render quantum boundary |
| 18 // Trigger playback at 0 second. The assumptions are: | 18 // >0.1 sec. Thus the rendered buffer will have non-zero frames. |
| 19 // | |
| 20 // 1) The specified timing of start() call is already passed in terms of | |
| 21 // the context time. So the argument |0| will be clamped to the current | |
| 22 // context time. | |
| 23 // 2) The |onstatechange| event will be fired later than the 0 second | |
| 24 // context time. | |
| 25 // | |
| 26 // See issue: crbug.com/462167 | 19 // See issue: crbug.com/462167 |
| 27 context.onstatechange = function () { | 20 context.suspend(0.1).then(() => { |
| 28 if (context.state === 'running') { | 21 node.start(0); |
| 29 node.start(0); | 22 context.resume(); |
| 30 } | 23 }); |
| 31 }; | |
| 32 | 24 |
| 33 // Start rendering and verify result: this verifies if 1) the rendered | 25 // Start rendering and verify result: this verifies if 1) the rendered |
| 34 // buffer contains at least one non-zero value and 2) the non-zero value is | 26 // buffer contains at least one non-zero value and 2) the non-zero value is |
| 35 // found later than the first output sample. | 27 // found later than the first output sample. |
| 36 context.startRendering().then(function (buffer) { | 28 context.startRendering().then(function (buffer) { |
| 37 | |
| 38 var nonZeroValueIndex = -1; | 29 var nonZeroValueIndex = -1; |
| 39 var channelData = buffer.getChannelData(0); | 30 var channelData = buffer.getChannelData(0); |
| 40 for (var i = 0; i < channelData.length; i++) { | 31 for (var i = 0; i < channelData.length; i++) { |
| 41 if (channelData[i] !== 0) { | 32 if (channelData[i] !== 0) { |
| 42 nonZeroValueIndex = i; | 33 nonZeroValueIndex = i; |
| 43 break; | 34 break; |
| 44 } | 35 } |
| 45 } | 36 } |
| 46 | 37 |
| 47 if (nonZeroValueIndex === -1) { | 38 var success = |
| 48 testFailed('The rendered buffer was all zeros.'); | 39 Should('The index of first non-zero value',nonZeroValueIndex) |
| 49 } else if (nonZeroValueIndex === 0) { | 40 .notBeEqualTo(-1); |
| 50 testFailed('The first sample was non-zero value. It should be zero.'); | 41 success = Should('The first sample value', channelData[0]) |
| 51 } else { | 42 .beEqualTo(0) && success; |
| 52 testPassed('The rendered buffer contains non-zero values after the first
sample.'); | 43 Should('The rendered buffer', success) |
| 53 } | 44 .summarize('contains non-zero values after the first sample', |
| 45 'was all zeros or has non-zero first sample.'); |
| 54 | 46 |
| 55 done(); | 47 done(); |
| 56 }); | 48 }); |
| 57 }); | 49 }); |
| 58 | 50 |
| 59 audit.defineTask('finish-test', function (done) { | 51 audit.defineTask('finish-test', function (done) { |
| 60 done(); | 52 done(); |
| 61 finishJSTest(); | 53 finishJSTest(); |
| 62 }); | 54 }); |
| 63 | 55 |
| 64 audit.runTasks( | 56 audit.runTasks( |
| 65 'test-late-start', | 57 'test-late-start', |
| 66 'finish-test' | 58 'finish-test' |
| 67 ); | 59 ); |
| 68 | 60 |
| 69 } | 61 } |
| OLD | NEW |