| <!DOCTYPE html> |
| <html> |
| <head> |
| <title> |
| Test performance of AudioParamTimeline::InsertEvent. |
| </title> |
| <script src="../resources/runner.js"></script> |
| </head> |
| <body> |
| <script> |
| // Number of events to insert. |
| let numberOfEvents = 10000; |
| let sampleRate = 44100; |
| let gainNode = null; |
| let timeInterval = .03; |
| let initialValue = 1; |
| let startingValueDelta = initialValue / numberOfEvents; |
| |
| // Convert time (in seconds) to sample frames. |
| function timeToSampleFrame(time, sampleRate) { |
| return Math.floor(0.5 + time * sampleRate); |
| } |
| |
| function renderLength(numberOfEvents) { |
| return timeToSampleFrame((numberOfEvents + 1) * timeInterval, sampleRate); |
| } |
| |
| PerfTestRunner.measureTime({ |
| description: "Measures performance of 10k InsertEvents using calls to setValueAtTime.", |
| |
| setup: function () { |
| let context = |
| new OfflineAudioContext(2, renderLength(numberOfEvents), sampleRate); |
| gainNode = context.createGain(); |
| }, |
| |
| run: function() { |
| let value = initialValue; |
| for (let k = 0; k < numberOfEvents; ++k) { |
| let startTime = k * timeInterval; |
| gainNode.gain.setValueAtTime(value, startTime); |
| value -= startingValueDelta; |
| } |
| }, |
| iterationCount: 5, |
| warmUpCount: 2, |
| tracingCategories: 'disabled-by-default-webaudio.audionode', |
| traceEventsToMeasure: ['AudioParamTimeline::InsertEvent'], |
| }); |
| </script> |
| </body> |
| </html> |