• hongchan's avatar
    Implement suspend() and resume() for OfflineAudioContext · cdc0e15e
    hongchan authored
    NOTE: This is the second attempt of https://crrev.com/1140723003/
    
    TODO:
    1. Edit core/frame/UseCounter.h accordingly.
    2. Add UMA metric in OfflineAudioContext.idl.
    
    Adds suspend() and resume() feature in OfflineAudioContext to support the
    synchronous graph manipulation with the render block precision (k-rate) in the
    non-realtime audio rendering.
    
    The benefit of being able to suspend/resume the context with the render block
    precision is:
    
    1) The audio graph can be modified in a time-accurate way, independent of the
       hardware. Without this, setTimeout, completion events, or state change events
       are needed to manipulate the graph, and the results depend on when the events
       are fired and on how fast the hardware is.
    
    2) Makes an OfflineAudioContext more symmetrical to the AudioContext, which
       already supports suspend/resume. (There are minor difference required by the
       difference between offline and online contexts.)
    
    This feature also can be used in Blink layout tests to verify the behavior of
    audio rendering. With this feature in the implementation, several flaky web
    audio layout tests can be fixed.
    
    http://webaudio.github.io/web-audio-api/#the-offlineaudiocontext-interface
    
    https://github.com/WebAudio/web-audio-api/issues/302#issuecomment-106101885
    
    BUG=497933, 545686
    TEST=
    webaudio/offlineaudiocontext-suspend-resume-basic.html
    webaudio/offlineaudiocontext-suspend-resume-eventhandler.html
    webaudio/offlineaudiocontext-suspend-resume-graph-manipulation.html
    webaudio/offlineaudiocontext-suspend-resume-promise.html
    webaudio/offlineaudiocontext-suspend-resume-sequence.html
    
    Review URL: https://codereview.chromium.org/1405413004
    
    Cr-Commit-Position: refs/heads/master@{#361367}
    cdc0e15e
audiocontext-suspend-resume-expected.txt 1.22 KB