Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(344)

Side by Side Diff: Source/modules/webaudio/AbstractAudioContext.cpp

Issue 1140723003: Implement suspend() and resume() for OfflineAudioContext (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Adapting CL to AbstractAudioContext Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 808 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 // This is called for both online and offline contexts. 819 // This is called for both online and offline contexts.
820 ASSERT(isMainThread()); 820 ASSERT(isMainThread());
821 ASSERT(m_destinationNode); 821 ASSERT(m_destinationNode);
822 822
823 if (m_contextState == Suspended) { 823 if (m_contextState == Suspended) {
824 destination()->audioDestinationHandler().startRendering(); 824 destination()->audioDestinationHandler().startRendering();
825 setContextState(Running); 825 setContextState(Running);
826 } 826 }
827 } 827 }
828 828
829 void AbstractAudioContext::fireCompletionEvent()
830 {
831 ASSERT(isMainThread());
832 if (!isMainThread())
833 return;
834
835 AudioBuffer* renderedBuffer = m_renderTarget.get();
836
837 // For an offline context, we set the state to closed here so that the oncom plete handler sees
838 // that the context has been closed.
839 setContextState(Closed);
840
841 ASSERT(renderedBuffer);
842 if (!renderedBuffer)
843 return;
844
845 // Avoid firing the event if the document has already gone away.
846 if (executionContext()) {
847 // Call the offline rendering completion event listener and resolve the promise too.
848 dispatchEvent(OfflineAudioCompletionEvent::create(renderedBuffer));
849 m_offlineResolver->resolve(renderedBuffer);
850 }
851 }
852
853 DEFINE_TRACE(AbstractAudioContext) 829 DEFINE_TRACE(AbstractAudioContext)
854 { 830 {
855 visitor->trace(m_offlineResolver);
856 visitor->trace(m_renderTarget); 831 visitor->trace(m_renderTarget);
857 visitor->trace(m_destinationNode); 832 visitor->trace(m_destinationNode);
858 visitor->trace(m_listener); 833 visitor->trace(m_listener);
859 // trace() can be called in AbstractAudioContext constructor, and 834 // trace() can be called in AbstractAudioContext constructor, and
860 // m_contextGraphMutex might be unavailable. 835 // m_contextGraphMutex might be unavailable.
861 if (m_didInitializeContextGraphMutex) { 836 if (m_didInitializeContextGraphMutex) {
862 AutoLocker lock(this); 837 AutoLocker lock(this);
863 visitor->trace(m_activeSourceNodes); 838 visitor->trace(m_activeSourceNodes);
864 } else { 839 } else {
865 visitor->trace(m_activeSourceNodes); 840 visitor->trace(m_activeSourceNodes);
866 } 841 }
867 visitor->trace(m_resumeResolvers); 842 visitor->trace(m_resumeResolvers);
868 RefCountedGarbageCollectedEventTargetWithInlineData<AbstractAudioContext>::t race(visitor); 843 RefCountedGarbageCollectedEventTargetWithInlineData<AbstractAudioContext>::t race(visitor);
869 ActiveDOMObject::trace(visitor); 844 ActiveDOMObject::trace(visitor);
870 } 845 }
871 846
872 SecurityOrigin* AbstractAudioContext::securityOrigin() const 847 SecurityOrigin* AbstractAudioContext::securityOrigin() const
873 { 848 {
874 if (executionContext()) 849 if (executionContext())
875 return executionContext()->securityOrigin(); 850 return executionContext()->securityOrigin();
876 851
877 return nullptr; 852 return nullptr;
878 } 853 }
879 854
880 } // namespace blink 855 } // namespace blink
881 856
882 #endif // ENABLE(WEB_AUDIO) 857 #endif // ENABLE(WEB_AUDIO)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698