Index: third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp |
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp b/third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp |
index a76bd7beb6c200d93fd7d62602ea9445a5f9a5b9..c77c42d90fbbe305b38752bb70831b6b54d12878 100644 |
--- a/third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp |
+++ b/third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp |
@@ -40,15 +40,23 @@ class AudioContextTestPlatform : public TestingPlatformSupport { |
const WebString& deviceId, |
const WebSecurityOrigin&) override { |
double bufferSize = 0; |
+ const double interactiveSize = audioHardwareBufferSize(); |
+ const double balancedSize = audioHardwareBufferSize() * 2; |
+ const double playbackSize = audioHardwareBufferSize() * 4; |
switch (latencyHint.category()) { |
case WebAudioLatencyHint::kCategoryInteractive: |
- bufferSize = audioHardwareBufferSize(); |
+ bufferSize = interactiveSize; |
break; |
case WebAudioLatencyHint::kCategoryBalanced: |
- bufferSize = audioHardwareBufferSize() * 2; |
+ bufferSize = balancedSize; |
break; |
case WebAudioLatencyHint::kCategoryPlayback: |
- bufferSize = audioHardwareBufferSize() * 4; |
+ bufferSize = playbackSize; |
+ break; |
+ case WebAudioLatencyHint::kCategoryExact: |
+ bufferSize = clampTo(latencyHint.seconds() * audioHardwareSampleRate(), |
+ static_cast<double>(audioHardwareBufferSize()), |
+ static_cast<double>(playbackSize)); |
break; |
default: |
NOTREACHED(); |
@@ -99,6 +107,32 @@ TEST_F(AudioContextTest, AudioContextOptions_WebAudioLatencyHint) { |
AudioContext* playbackContext = |
AudioContext::create(document(), playbackOptions, ASSERT_NO_EXCEPTION); |
EXPECT_GT(playbackContext->baseLatency(), balancedContext->baseLatency()); |
+ |
+ AudioContextOptions exactTooSmallOptions; |
+ exactTooSmallOptions.setLatencyHint( |
+ AudioContextLatencyCategoryOrDouble::fromDouble( |
+ interactiveContext->baseLatency() / 4)); |
+ AudioContext* exactTooSmallContext = AudioContext::create( |
+ document(), exactTooSmallOptions, ASSERT_NO_EXCEPTION); |
+ EXPECT_EQ(exactTooSmallContext->baseLatency(), |
+ interactiveContext->baseLatency()); |
+ |
+ const double exactLatencySec = |
+ (interactiveContext->baseLatency() + playbackContext->baseLatency()) / 4; |
+ AudioContextOptions exactOkOptions; |
+ exactOkOptions.setLatencyHint( |
+ AudioContextLatencyCategoryOrDouble::fromDouble(exactLatencySec)); |
+ AudioContext* exactOkContext = |
+ AudioContext::create(document(), exactOkOptions, ASSERT_NO_EXCEPTION); |
+ EXPECT_EQ(exactOkContext->baseLatency(), exactLatencySec * 2); |
+ |
+ AudioContextOptions exactTooBigOptions; |
+ exactTooBigOptions.setLatencyHint( |
+ AudioContextLatencyCategoryOrDouble::fromDouble( |
+ playbackContext->baseLatency() * 2)); |
+ AudioContext* exactTooBigContext = |
+ AudioContext::create(document(), exactTooBigOptions, ASSERT_NO_EXCEPTION); |
+ EXPECT_EQ(exactTooBigContext->baseLatency(), playbackContext->baseLatency()); |
} |
} // namespace blink |