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 d026540c47d147dc2e16d6f87e422ed128560208..ce29dc4ff142a0e5253712a313984fdfbffbc6ad 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() && |
@@ -134,7 +135,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(); |
@@ -705,7 +707,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 |
@@ -723,6 +726,9 @@ void BaseAudioContext::handlePreRenderTasks() { |
// Update the dirty state of the listener. |
listener()->updateState(); |
+ // Update output timestamp. |
+ m_outputPosition = outputPosition; |
+ |
unlock(); |
} |
} |
@@ -816,6 +822,12 @@ bool BaseAudioContext::isAllowedToStart() const { |
return false; |
} |
+AudioIOPosition BaseAudioContext::outputPosition() { |
+ DCHECK(isMainThread()); |
+ AutoLocker locker(this); |
+ return m_outputPosition; |
+} |
+ |
void BaseAudioContext::rejectPendingResolvers() { |
DCHECK(isMainThread()); |