Index: third_party/WebKit/Source/modules/webaudio/AudioContext.cpp |
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp |
index 3628954ddd8a663df1dbe95eec51cbc74a465e2a..e71b37d8df9c79727cbc063548293b95c4823a87 100644 |
--- a/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp |
+++ b/third_party/WebKit/Source/modules/webaudio/AudioContext.cpp |
@@ -14,9 +14,12 @@ |
#include "core/timing/DOMWindowPerformance.h" |
#include "core/timing/Performance.h" |
#include "modules/webaudio/AudioBufferCallback.h" |
+#include "modules/webaudio/AudioContextOptions.h" |
#include "modules/webaudio/AudioTimestamp.h" |
+#include "modules/webaudio/DefaultAudioDestinationNode.h" |
#include "platform/Histogram.h" |
#include "platform/audio/AudioUtilities.h" |
+#include "public/platform/WebAudioLatencyHint.h" |
#if DEBUG_AUDIONODE_REFERENCES |
#include <stdio.h> |
@@ -31,6 +34,7 @@ static unsigned s_hardwareContextCount = 0; |
static unsigned s_contextId = 0; |
AudioContext* AudioContext::create(Document& document, |
+ const AudioContextOptions& contextOptions, |
ExceptionState& exceptionState) { |
DCHECK(isMainThread()); |
@@ -45,7 +49,14 @@ AudioContext* AudioContext::create(Document& document, |
return nullptr; |
} |
- AudioContext* audioContext = new AudioContext(document); |
+ WebAudioLatencyHint latencyHint(WebAudioLatencyHint::kCategoryInteractive); |
+ if (contextOptions.latencyHint().isAudioContextLatencyCategory()) { |
+ latencyHint = WebAudioLatencyHint( |
+ contextOptions.latencyHint().getAsAudioContextLatencyCategory()); |
+ } |
+ // TODO: add support for latencyHint().isDouble() |
+ |
+ AudioContext* audioContext = new AudioContext(document, latencyHint); |
audioContext->suspendIfNeeded(); |
if (!AudioUtilities::isValidAudioBufferSampleRate( |
@@ -87,8 +98,12 @@ AudioContext* AudioContext::create(Document& document, |
return audioContext; |
} |
-AudioContext::AudioContext(Document& document) |
- : BaseAudioContext(&document), m_contextId(s_contextId++) {} |
+AudioContext::AudioContext(Document& document, |
+ const WebAudioLatencyHint& latencyHint) |
+ : BaseAudioContext(&document), m_contextId(s_contextId++) { |
+ m_destinationNode = DefaultAudioDestinationNode::create(this, latencyHint); |
+ initialize(); |
+} |
AudioContext::~AudioContext() { |
#if DEBUG_AUDIONODE_REFERENCES |
@@ -236,4 +251,8 @@ void AudioContext::stopRendering() { |
} |
} |
+double AudioContext::baseLatency() const { |
+ return framesPerBuffer() * 2 / static_cast<double>(sampleRate()); |
+} |
+ |
} // namespace blink |