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

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, 6 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') | Source/platform/heap/Visitor.h » ('j') | 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 b3f0aa7aef5d34aff5c7c8f16fcf1377c92ee7d5..70a2ca016ea320e778995f7431f196d1e368d668 100644
--- a/Source/platform/heap/ThreadState.cpp
+++ b/Source/platform/heap/ThreadState.cpp
@@ -853,6 +853,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());
@@ -885,9 +892,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;
+ }
}
void ThreadState::preSweep()
@@ -1297,6 +1318,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') | Source/platform/heap/Visitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698