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

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

Issue 393133003: Oilpan: WebAudio: Apply the weak HashMap pattern to remove an entry from AudioContext::m_dirtyAudio… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add a comment, etc. Created 6 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 | Annotate | Revision Log
« no previous file with comments | « Source/modules/webaudio/AudioContext.h ('k') | Source/modules/webaudio/AudioSummingJunction.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 m_destinationNode->startRendering(); 184 m_destinationNode->startRendering();
185 ++s_hardwareContextCount; 185 ++s_hardwareContextCount;
186 } 186 }
187 187
188 m_isInitialized = true; 188 m_isInitialized = true;
189 } 189 }
190 } 190 }
191 191
192 void AudioContext::clear() 192 void AudioContext::clear()
193 { 193 {
194 #if ENABLE(OILPAN)
195 // We need to run disposers before destructing m_contextGraphMutex.
196 m_liveAudioSummingJunctions.clear();
197 #endif
198
194 // We have to release our reference to the destination node before the conte xt will ever be deleted since the destination node holds a reference to the cont ext. 199 // We have to release our reference to the destination node before the conte xt will ever be deleted since the destination node holds a reference to the cont ext.
195 if (m_destinationNode) 200 if (m_destinationNode)
196 m_destinationNode.clear(); 201 m_destinationNode.clear();
197 202
198 // Audio thread is dead. Nobody will schedule node deletion action. Let's do it ourselves. 203 // Audio thread is dead. Nobody will schedule node deletion action. Let's do it ourselves.
199 do { 204 do {
200 m_nodesToDelete.appendVector(m_nodesMarkedForDeletion); 205 m_nodesToDelete.appendVector(m_nodesMarkedForDeletion);
201 m_nodesMarkedForDeletion.clear(); 206 m_nodesMarkedForDeletion.clear();
202 deleteMarkedNodes(); 207 deleteMarkedNodes();
203 } while (m_nodesToDelete.size()); 208 } while (m_nodesToDelete.size());
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 754
750 for (unsigned i = 0; i < m_deferredBreakConnectionList.size(); ++i) 755 for (unsigned i = 0; i < m_deferredBreakConnectionList.size(); ++i)
751 m_deferredBreakConnectionList[i]->breakConnectionWithLock(); 756 m_deferredBreakConnectionList[i]->breakConnectionWithLock();
752 m_deferredBreakConnectionList.clear(); 757 m_deferredBreakConnectionList.clear();
753 758
754 for (unsigned i = 0; i < m_deferredFinishDerefList.size(); ++i) 759 for (unsigned i = 0; i < m_deferredFinishDerefList.size(); ++i)
755 m_deferredFinishDerefList[i]->finishDeref(); 760 m_deferredFinishDerefList[i]->finishDeref();
756 m_deferredFinishDerefList.clear(); 761 m_deferredFinishDerefList.clear();
757 } 762 }
758 763
764 #if ENABLE(OILPAN)
765 void AudioContext::registerLiveAudioSummingJunction(AudioSummingJunction& juncti on)
766 {
767 ASSERT(isMainThread());
768 m_liveAudioSummingJunctions.add(&junction, adoptPtr(new AudioSummingJunction Disposer(junction)));
769 }
770
771 AudioContext::AudioSummingJunctionDisposer::~AudioSummingJunctionDisposer()
772 {
773 ASSERT(isMainThread());
774 m_junction.context()->removeMarkedSummingJunction(&m_junction);
775 }
776 #endif
777
759 void AudioContext::markForDeletion(AudioNode* node) 778 void AudioContext::markForDeletion(AudioNode* node)
760 { 779 {
761 ASSERT(isGraphOwner()); 780 ASSERT(isGraphOwner());
762 781
763 if (!isInitialized()) 782 if (!isInitialized())
764 m_nodesToDelete.append(node); 783 m_nodesToDelete.append(node);
765 else 784 else
766 m_nodesMarkedForDeletion.append(node); 785 m_nodesMarkedForDeletion.append(node);
767 786
768 // This is probably the best time for us to remove the node from automatic p ull list, 787 // This is probably the best time for us to remove the node from automatic p ull list,
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 // Call the offline rendering completion event listener. 977 // Call the offline rendering completion event listener.
959 dispatchEvent(OfflineAudioCompletionEvent::create(renderedBuffer)); 978 dispatchEvent(OfflineAudioCompletionEvent::create(renderedBuffer));
960 } 979 }
961 } 980 }
962 981
963 void AudioContext::trace(Visitor* visitor) 982 void AudioContext::trace(Visitor* visitor)
964 { 983 {
965 visitor->trace(m_renderTarget); 984 visitor->trace(m_renderTarget);
966 visitor->trace(m_destinationNode); 985 visitor->trace(m_destinationNode);
967 visitor->trace(m_listener); 986 visitor->trace(m_listener);
987 #if ENABLE(OILPAN)
988 visitor->trace(m_liveAudioSummingJunctions);
989 #endif
968 EventTargetWithInlineData::trace(visitor); 990 EventTargetWithInlineData::trace(visitor);
969 } 991 }
970 992
971 } // namespace blink 993 } // namespace blink
972 994
973 #endif // ENABLE(WEB_AUDIO) 995 #endif // ENABLE(WEB_AUDIO)
OLDNEW
« no previous file with comments | « Source/modules/webaudio/AudioContext.h ('k') | Source/modules/webaudio/AudioSummingJunction.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698