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

Unified Diff: Source/platform/heap/ThreadState.h

Issue 802593004: WebAudio: Fix AudioNode leak in a case that AudioNode is not disconnected from the graph explicitly. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebase Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/platform/heap/HeapTest.cpp ('k') | Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/heap/ThreadState.h
diff --git a/Source/platform/heap/ThreadState.h b/Source/platform/heap/ThreadState.h
index a2428428e52eb5fb9229509dee82db3436e9dfc5..91183774f9c10c9ea4f3777273cc76961abaa85a 100644
--- a/Source/platform/heap/ThreadState.h
+++ b/Source/platform/heap/ThreadState.h
@@ -476,6 +476,20 @@ public:
m_endOfStack = endOfStack;
}
+ // MarkingTask functions are called before and after marking live objects.
+ // They might be called on threads other than the thread associated to this
+ // ThreadState.
+ class MarkingTask {
+ public:
+ virtual ~MarkingTask() { }
+ virtual void willStartMarking(ThreadState&) { }
+ virtual void didFinishMarking(ThreadState&) { }
+ };
+ // A caller is responsible to call removeMarkingTask before deleting the
+ // specified task.
+ void addMarkingTask(MarkingTask*);
+ void removeMarkingTask(MarkingTask*);
+
// Get one of the heap structures for this thread.
//
// The heap is split into multiple heap parts based on object
@@ -488,7 +502,7 @@ public:
// address ranges for the Blink heap. If the address is in the Blink
// heap the containing heap page is returned.
BasePage* findPageFromAddress(Address);
- BasePage* findPageFromAddress(void* pointer) { return findPageFromAddress(reinterpret_cast<Address>(pointer)); }
+ BasePage* findPageFromAddress(const void* pointer) { return findPageFromAddress(reinterpret_cast<Address>(const_cast<void*>(pointer))); }
#endif
// List of persistent roots allocated on the given thread.
@@ -582,6 +596,16 @@ public:
unregisterPreFinalizerInternal(&target);
}
+ // Mark an on-heap object as a zombie. The object won't be swept until
+ // purifyZombies(). It's ok to call markAsZombie() during weak processing.
+ // The specified object must not have references to objects owned by other
+ // threads.
+ // Do not use this function. This feature is a temporal workaround for
tkent 2015/02/17 08:24:39 Clarified "temporal workaround"
+ // WebAudio, and will be removed soon.
+ void markAsZombie(void*);
+ // Purify all of zombie objects marked before calling purifyZombies().
+ void purifyZombies();
+
Vector<PageMemoryRegion*>& allocatedRegionsSinceLastGC() { return m_allocatedRegionsSinceLastGC; }
void shouldFlushHeapDoesNotContainCache() { m_shouldFlushHeapDoesNotContainCache = true; }
@@ -633,6 +657,8 @@ private:
void unregisterPreFinalizerInternal(void*);
void invokePreFinalizers(Visitor&);
+ void invokePreMarkingTasks();
+ void invokePostMarkingTasks();
#if ENABLE(GC_PROFILING)
void snapshotFreeList();
@@ -670,6 +696,7 @@ private:
Vector<OwnPtr<CleanupTask>> m_cleanupTasks;
bool m_isTerminating;
+ Vector<MarkingTask*> m_markingTasks;
bool m_shouldFlushHeapDoesNotContainCache;
double m_collectionRate;
@@ -677,7 +704,7 @@ private:
CallbackStack* m_weakCallbackStack;
HashMap<void*, bool (*)(void*, Visitor&)> m_preFinalizers;
-
+ HashSet<void*> m_zombies;
haraken 2015/02/17 08:37:03 Another idea (that will reduce the complexity you
tkent 2015/02/17 23:43:56 Your idea would be much complex. - ThreadState ne
v8::Isolate* m_isolate;
void (*m_traceDOMWrappers)(v8::Isolate*, Visitor*);
« no previous file with comments | « Source/platform/heap/HeapTest.cpp ('k') | Source/platform/heap/ThreadState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698