| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010, Google Inc. All rights reserved. | 2 * Copyright (C) 2010, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 AutoLocker locker(this); | 621 AutoLocker locker(this); |
| 622 | 622 |
| 623 if (isOfflineContext()) { | 623 if (isOfflineContext()) { |
| 624 return ScriptPromise::rejectWithDOMException( | 624 return ScriptPromise::rejectWithDOMException( |
| 625 scriptState, | 625 scriptState, |
| 626 DOMException::create( | 626 DOMException::create( |
| 627 InvalidStateError, | 627 InvalidStateError, |
| 628 "cannot suspend an OfflineAudioContext")); | 628 "cannot suspend an OfflineAudioContext")); |
| 629 } | 629 } |
| 630 | 630 |
| 631 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 631 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 632 ScriptPromise promise = resolver->promise(); | 632 ScriptPromise promise = resolver->promise(); |
| 633 | 633 |
| 634 // Save the resolver which will get resolved at the end of the rendering qua
ntum. | 634 // Save the resolver which will get resolved at the end of the rendering qua
ntum. |
| 635 m_suspendResolvers.append(resolver); | 635 m_suspendResolvers.append(resolver); |
| 636 | 636 |
| 637 return promise; | 637 return promise; |
| 638 } | 638 } |
| 639 | 639 |
| 640 ScriptPromise AudioContext::resumeContext(ScriptState* scriptState) | 640 ScriptPromise AudioContext::resumeContext(ScriptState* scriptState) |
| 641 { | 641 { |
| 642 ASSERT(isMainThread()); | 642 ASSERT(isMainThread()); |
| 643 AutoLocker locker(this); | 643 AutoLocker locker(this); |
| 644 | 644 |
| 645 if (isOfflineContext()) { | 645 if (isOfflineContext()) { |
| 646 return ScriptPromise::rejectWithDOMException( | 646 return ScriptPromise::rejectWithDOMException( |
| 647 scriptState, | 647 scriptState, |
| 648 DOMException::create( | 648 DOMException::create( |
| 649 InvalidStateError, | 649 InvalidStateError, |
| 650 "cannot resume an OfflineAudioContext")); | 650 "cannot resume an OfflineAudioContext")); |
| 651 } | 651 } |
| 652 | 652 |
| 653 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 653 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 654 ScriptPromise promise = resolver->promise(); | 654 ScriptPromise promise = resolver->promise(); |
| 655 | 655 |
| 656 // Restart the destination node to pull on the audio graph. | 656 // Restart the destination node to pull on the audio graph. |
| 657 if (m_destinationNode) | 657 if (m_destinationNode) |
| 658 startRendering(); | 658 startRendering(); |
| 659 | 659 |
| 660 // Save the resolver which will get resolved when the destination node start
s pulling on the | 660 // Save the resolver which will get resolved when the destination node start
s pulling on the |
| 661 // graph again. | 661 // graph again. |
| 662 m_resumeResolvers.append(resolver); | 662 m_resumeResolvers.append(resolver); |
| 663 | 663 |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 945 | 945 |
| 946 for (unsigned i = 0; i < m_renderingAutomaticPullNodes.size(); ++i) | 946 for (unsigned i = 0; i < m_renderingAutomaticPullNodes.size(); ++i) |
| 947 m_renderingAutomaticPullNodes[i]->processIfNecessary(framesToProcess); | 947 m_renderingAutomaticPullNodes[i]->processIfNecessary(framesToProcess); |
| 948 } | 948 } |
| 949 | 949 |
| 950 void AudioContext::resolvePromisesForResumeOnMainThread() | 950 void AudioContext::resolvePromisesForResumeOnMainThread() |
| 951 { | 951 { |
| 952 ASSERT(isMainThread()); | 952 ASSERT(isMainThread()); |
| 953 AutoLocker locker(this); | 953 AutoLocker locker(this); |
| 954 | 954 |
| 955 for (RefPtr<ScriptPromiseResolver> resolver : m_resumeResolvers) { | 955 for (auto& resolver : m_resumeResolvers) { |
| 956 if (m_contextState == Closed) { | 956 if (m_contextState == Closed) { |
| 957 resolver->reject( | 957 resolver->reject( |
| 958 DOMException::create(InvalidStateError, "Cannot resume a context
that has been closed")); | 958 DOMException::create(InvalidStateError, "Cannot resume a context
that has been closed")); |
| 959 } else { | 959 } else { |
| 960 resolver->resolve(); | 960 resolver->resolve(); |
| 961 } | 961 } |
| 962 } | 962 } |
| 963 | 963 |
| 964 m_resumeResolvers.clear(); | 964 m_resumeResolvers.clear(); |
| 965 m_isResolvingResumePromises = false; | 965 m_isResolvingResumePromises = false; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 982 | 982 |
| 983 void AudioContext::resolvePromisesForSuspendOnMainThread() | 983 void AudioContext::resolvePromisesForSuspendOnMainThread() |
| 984 { | 984 { |
| 985 ASSERT(isMainThread()); | 985 ASSERT(isMainThread()); |
| 986 AutoLocker locker(this); | 986 AutoLocker locker(this); |
| 987 | 987 |
| 988 // We can stop rendering now. | 988 // We can stop rendering now. |
| 989 if (m_destinationNode) | 989 if (m_destinationNode) |
| 990 stopRendering(); | 990 stopRendering(); |
| 991 | 991 |
| 992 for (RefPtr<ScriptPromiseResolver> resolver : m_suspendResolvers) { | 992 for (auto& resolver : m_suspendResolvers) { |
| 993 if (m_contextState == Closed) { | 993 if (m_contextState == Closed) { |
| 994 resolver->reject( | 994 resolver->reject( |
| 995 DOMException::create(InvalidStateError, "Cannot suspend a contex
t that has been closed")); | 995 DOMException::create(InvalidStateError, "Cannot suspend a contex
t that has been closed")); |
| 996 } else { | 996 } else { |
| 997 resolver->resolve(); | 997 resolver->resolve(); |
| 998 } | 998 } |
| 999 } | 999 } |
| 1000 | 1000 |
| 1001 m_suspendResolvers.clear(); | 1001 m_suspendResolvers.clear(); |
| 1002 } | 1002 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1013 | 1013 |
| 1014 } | 1014 } |
| 1015 | 1015 |
| 1016 void AudioContext::rejectPendingResolvers() | 1016 void AudioContext::rejectPendingResolvers() |
| 1017 { | 1017 { |
| 1018 ASSERT(isMainThread()); | 1018 ASSERT(isMainThread()); |
| 1019 | 1019 |
| 1020 // Audio context is closing down so reject any suspend or resume promises th
at are still | 1020 // Audio context is closing down so reject any suspend or resume promises th
at are still |
| 1021 // pending. | 1021 // pending. |
| 1022 | 1022 |
| 1023 for (RefPtr<ScriptPromiseResolver> resolver : m_suspendResolvers) { | 1023 for (auto& resolver : m_suspendResolvers) { |
| 1024 resolver->reject(DOMException::create(InvalidStateError, "Audio context
is going away")); | 1024 resolver->reject(DOMException::create(InvalidStateError, "Audio context
is going away")); |
| 1025 } | 1025 } |
| 1026 m_suspendResolvers.clear(); | 1026 m_suspendResolvers.clear(); |
| 1027 | 1027 |
| 1028 for (RefPtr<ScriptPromiseResolver> resolver : m_resumeResolvers) { | 1028 for (auto& resolver : m_resumeResolvers) { |
| 1029 resolver->reject(DOMException::create(InvalidStateError, "Audio context
is going away")); | 1029 resolver->reject(DOMException::create(InvalidStateError, "Audio context
is going away")); |
| 1030 } | 1030 } |
| 1031 m_resumeResolvers.clear(); | 1031 m_resumeResolvers.clear(); |
| 1032 m_isResolvingResumePromises = false; | 1032 m_isResolvingResumePromises = false; |
| 1033 } | 1033 } |
| 1034 | 1034 |
| 1035 const AtomicString& AudioContext::interfaceName() const | 1035 const AtomicString& AudioContext::interfaceName() const |
| 1036 { | 1036 { |
| 1037 return EventTargetNames::AudioContext; | 1037 return EventTargetNames::AudioContext; |
| 1038 } | 1038 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1093 visitor->trace(m_destinationNode); | 1093 visitor->trace(m_destinationNode); |
| 1094 visitor->trace(m_listener); | 1094 visitor->trace(m_listener); |
| 1095 // trace() can be called in AudioContext constructor, and | 1095 // trace() can be called in AudioContext constructor, and |
| 1096 // m_contextGraphMutex might be unavailable. | 1096 // m_contextGraphMutex might be unavailable. |
| 1097 if (m_didInitializeContextGraphMutex) { | 1097 if (m_didInitializeContextGraphMutex) { |
| 1098 AutoLocker lock(this); | 1098 AutoLocker lock(this); |
| 1099 visitor->trace(m_referencedNodes); | 1099 visitor->trace(m_referencedNodes); |
| 1100 } else { | 1100 } else { |
| 1101 visitor->trace(m_referencedNodes); | 1101 visitor->trace(m_referencedNodes); |
| 1102 } | 1102 } |
| 1103 visitor->trace(m_resumeResolvers); |
| 1104 visitor->trace(m_suspendResolvers); |
| 1103 visitor->trace(m_liveNodes); | 1105 visitor->trace(m_liveNodes); |
| 1104 visitor->trace(m_liveAudioSummingJunctions); | 1106 visitor->trace(m_liveAudioSummingJunctions); |
| 1105 EventTargetWithInlineData::trace(visitor); | 1107 EventTargetWithInlineData::trace(visitor); |
| 1106 } | 1108 } |
| 1107 | 1109 |
| 1108 void AudioContext::addChangedChannelCountMode(AudioNode* node) | 1110 void AudioContext::addChangedChannelCountMode(AudioNode* node) |
| 1109 { | 1111 { |
| 1110 ASSERT(isGraphOwner()); | 1112 ASSERT(isGraphOwner()); |
| 1111 ASSERT(isMainThread()); | 1113 ASSERT(isMainThread()); |
| 1112 m_deferredCountModeChange.add(node); | 1114 m_deferredCountModeChange.add(node); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1125 | 1127 |
| 1126 for (HashSet<AudioNode*>::iterator k = m_deferredCountModeChange.begin(); k
!= m_deferredCountModeChange.end(); ++k) | 1128 for (HashSet<AudioNode*>::iterator k = m_deferredCountModeChange.begin(); k
!= m_deferredCountModeChange.end(); ++k) |
| 1127 (*k)->updateChannelCountMode(); | 1129 (*k)->updateChannelCountMode(); |
| 1128 | 1130 |
| 1129 m_deferredCountModeChange.clear(); | 1131 m_deferredCountModeChange.clear(); |
| 1130 } | 1132 } |
| 1131 | 1133 |
| 1132 } // namespace blink | 1134 } // namespace blink |
| 1133 | 1135 |
| 1134 #endif // ENABLE(WEB_AUDIO) | 1136 #endif // ENABLE(WEB_AUDIO) |
| OLD | NEW |