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

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

Issue 1159773004: Oilpan: Implement a GC to take a heap snapshot (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 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/ThreadState.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/heap/ThreadState.cpp
diff --git a/Source/platform/heap/ThreadState.cpp b/Source/platform/heap/ThreadState.cpp
index 47d9c817abe92f99d5994400413fcd7d15f2993e..1ef1d11ab3cad926f2f4719da4ec47ae1f4aa177 100644
--- a/Source/platform/heap/ThreadState.cpp
+++ b/Source/platform/heap/ThreadState.cpp
@@ -850,6 +850,13 @@ void ThreadState::makeConsistentForGC()
m_heaps[i]->makeConsistentForGC();
}
+void ThreadState::makeConsistentForMutator()
+{
+ ASSERT(isInGC());
+ for (int i = 0; i < NumberOfHeaps; ++i)
+ m_heaps[i]->makeConsistentForMutator();
+}
+
void ThreadState::preGC()
{
ASSERT(!isInGC());
@@ -882,9 +889,23 @@ void ThreadState::postGC(GCType gcType)
}
#endif
- setGCState(gcType == GCWithSweep ? EagerSweepScheduled : LazySweepScheduled);
for (int i = 0; i < NumberOfHeaps; i++)
m_heaps[i]->prepareForSweep();
+
+ if (gcType == GCWithSweep) {
+ setGCState(EagerSweepScheduled);
+ } else if (gcType == GCWithoutSweep) {
+ setGCState(LazySweepScheduled);
+ } else {
+ takeSnapshot();
+
+ // This unmarks all marked objects and marks all unmarked objects dead.
+ makeConsistentForMutator();
+
+ // Force setting NoGCScheduled to circumvent checkThread()
+ // in setGCState().
+ m_gcState = NoGCScheduled;
sof 2015/05/28 12:15:13 Why are you doing this (way)?
haraken 2015/05/28 12:33:36 As commented above, if we call setGCState(NoGCSche
+ }
}
void ThreadState::preSweep()
@@ -1269,6 +1290,12 @@ void ThreadState::promptlyFreed(size_t gcInfoIndex)
m_likelyToBePromptlyFreed[entryIndex] += 3;
}
+void ThreadState::takeSnapshot()
+{
+ ASSERT(isInGC());
+ // TODO(ssid): Implement this.
+}
+
#if ENABLE(GC_PROFILING)
const GCInfo* ThreadState::findGCInfoFromAllThreads(Address address)
{
« no previous file with comments | « Source/platform/heap/ThreadState.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698