| Index: third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
|
| index 3481cdc6c21eab6ae831aea174c3e11593593f87..58da9127dde305d6c79b5b5261d1ccde133d8b10 100644
|
| --- a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
|
| +++ b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
|
| @@ -102,7 +102,8 @@ BaseAudioContext::BaseAudioContext(Document* document)
|
| m_periodicWaveSine(nullptr),
|
| m_periodicWaveSquare(nullptr),
|
| m_periodicWaveSawtooth(nullptr),
|
| - m_periodicWaveTriangle(nullptr) {
|
| + m_periodicWaveTriangle(nullptr),
|
| + m_outputPosition() {
|
| // If mediaPlaybackRequiresUserGesture is enabled, cross origin iframes will
|
| // require user gesture for the AudioContext to produce sound.
|
| if (document->settings() &&
|
| @@ -135,7 +136,8 @@ BaseAudioContext::BaseAudioContext(Document* document,
|
| m_periodicWaveSine(nullptr),
|
| m_periodicWaveSquare(nullptr),
|
| m_periodicWaveSawtooth(nullptr),
|
| - m_periodicWaveTriangle(nullptr) {}
|
| + m_periodicWaveTriangle(nullptr),
|
| + m_outputPosition() {}
|
|
|
| BaseAudioContext::~BaseAudioContext() {
|
| deferredTaskHandler().contextWillBeDestroyed();
|
| @@ -706,7 +708,8 @@ void BaseAudioContext::handleStoppableSourceNodes() {
|
| }
|
| }
|
|
|
| -void BaseAudioContext::handlePreRenderTasks() {
|
| +void BaseAudioContext::handlePreRenderTasks(
|
| + const AudioIOPosition& outputPosition) {
|
| DCHECK(isAudioThread());
|
|
|
| // At the beginning of every render quantum, try to update the internal
|
| @@ -724,6 +727,9 @@ void BaseAudioContext::handlePreRenderTasks() {
|
| // Update the dirty state of the listener.
|
| listener()->updateState();
|
|
|
| + // Update output timestamp.
|
| + m_outputPosition = outputPosition;
|
| +
|
| unlock();
|
| }
|
| }
|
| @@ -817,6 +823,12 @@ bool BaseAudioContext::isAllowedToStart() const {
|
| return false;
|
| }
|
|
|
| +AudioIOPosition BaseAudioContext::outputPosition() {
|
| + DCHECK(isMainThread());
|
| + AutoLocker locker(this);
|
| + return m_outputPosition;
|
| +}
|
| +
|
| void BaseAudioContext::rejectPendingResolvers() {
|
| DCHECK(isMainThread());
|
|
|
|
|