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

Unified Diff: src/heap.cc

Issue 3615009: Parallelize marking phase of mark-sweep/compact collection cycle. (Closed)
Patch Set: Created 10 years, 2 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 | « src/heap.h ('k') | src/ia32/assembler-ia32-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index 23bfbd807d8d1430e4e38c3dc9044c41652dfe3f..51408a9dc0e7f72d9993f5e2695ef823d5a38b4f 100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -51,6 +51,7 @@
namespace v8 {
namespace internal {
+Atomic32 RootsPartitioner::partitions_state_[kNumberOfRootsPartitions];
String* Heap::hidden_symbol_;
Object* Heap::roots_[Heap::kRootListLength];
@@ -4039,6 +4040,69 @@ void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) {
}
+void Heap::ClaimAndIterateStrongRootsGroup(ObjectVisitor* v,
+ VisitMode mode,
+ RootsPartition partition) {
+ if (!RootsPartitioner::Claim(partition)) return;
+
+ switch (partition) {
+ case kStrongRootsList:
+ v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]);
+ v->VisitPointer(BitCast<Object**>(&hidden_symbol_));
+ break;
+
+ case kBootstrapperRoots:
+ Bootstrapper::Iterate(v);
+ break;
+
+ case kTopRoots:
+ Top::Iterate(v);
+ break;
+
+ case kRelocatableRoots:
+ Relocatable::Iterate(v);
+ break;
+
+#ifdef ENABLE_DEBUGGER_SUPPORT
+ case kDebugRoots:
+ Debug::Iterate(v);
+ break;
+#endif
+
+ case kCompilationCacheRoots:
+ CompilationCache::Iterate(v);
+ break;
+
+ case kHandleScopeRoots:
+ HandleScopeImplementer::Iterate(v);
+ break;
+
+ case kBuiltinsRoots:
+ if (mode != VISIT_ALL_IN_SCAVENGE) Builtins::IterateBuiltins(v);
+ break;
+
+ case kGlobalHandlesRoots:
+ if (mode == VISIT_ONLY_STRONG) {
+ GlobalHandles::IterateStrongRoots(v);
+ } else {
+ GlobalHandles::IterateAllRoots(v);
+ }
+ break;
+
+ case kThreadManagerRoots:
+ ThreadManager::Iterate(v);
+ break;
+
+ case kSerializerDeserializerRoots:
+ SerializerDeserializer::Iterate(v);
+ break;
+
+ default:
+ UNREACHABLE();
+ }
+}
+
+
// Flag is set when the heap has been configured. The heap can be repeatedly
// configured through the API until it is setup.
static bool heap_configured = false;
@@ -4773,14 +4837,15 @@ GCTracer::GCTracer()
gc_count_(0),
full_gc_count_(0),
is_compacting_(false),
+#ifdef DEBUG
marked_count_(0),
+#endif
allocated_since_last_gc_(0),
spent_in_mutator_(0),
promoted_objects_size_(0) {
// These two fields reflect the state of the previous full collection.
// Set them before they are changed by the collector.
previous_has_compacted_ = MarkCompactCollector::HasCompacted();
- previous_marked_count_ = MarkCompactCollector::previous_marked_count();
if (!FLAG_trace_gc && !FLAG_print_cumulative_gc_stat) return;
start_time_ = OS::TimeCurrentMillis();
start_size_ = Heap::SizeOfObjects();
« no previous file with comments | « src/heap.h ('k') | src/ia32/assembler-ia32-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698