aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/scavenger.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/scavenger.cc')
-rw-r--r--deps/v8/src/heap/scavenger.cc30
1 files changed, 14 insertions, 16 deletions
diff --git a/deps/v8/src/heap/scavenger.cc b/deps/v8/src/heap/scavenger.cc
index 7a8e55fd19..e211388729 100644
--- a/deps/v8/src/heap/scavenger.cc
+++ b/deps/v8/src/heap/scavenger.cc
@@ -36,7 +36,7 @@ class ScavengingVisitor : public StaticVisitorBase {
table_.Register(kVisitByteArray, &EvacuateByteArray);
table_.Register(kVisitFixedArray, &EvacuateFixedArray);
table_.Register(kVisitFixedDoubleArray, &EvacuateFixedDoubleArray);
- table_.Register(kVisitFixedTypedArray, &EvacuateFixedTypedArray);
+ table_.Register(kVisitFixedTypedArrayBase, &EvacuateFixedTypedArray);
table_.Register(kVisitFixedFloat64Array, &EvacuateFixedFloat64Array);
table_.Register(kVisitJSArrayBuffer,
&ObjectEvacuationStrategy<POINTER_OBJECT>::Visit);
@@ -148,7 +148,7 @@ class ScavengingVisitor : public StaticVisitorBase {
}
if (marks_handling == TRANSFER_MARKS) {
- IncrementalMarking::TransferColor(source, target);
+ heap->incremental_marking()->TransferColor(source, target);
}
}
@@ -191,6 +191,8 @@ class ScavengingVisitor : public StaticVisitorBase {
HeapObject* target = NULL; // Initialization to please compiler.
if (allocation.To(&target)) {
+ DCHECK(ObjectMarking::IsWhite(
+ target, heap->mark_compact_collector()->marking_state(target)));
MigrateObject(heap, object, target, object_size);
// Update slot to new target using CAS. A concurrent sweeper thread my
@@ -201,10 +203,7 @@ class ScavengingVisitor : public StaticVisitorBase {
reinterpret_cast<base::AtomicWord>(target));
if (object_contents == POINTER_OBJECT) {
- // TODO(mlippautz): Query collector for marking state.
- heap->promotion_queue()->insert(
- target, object_size,
- ObjectMarking::IsBlack(object, MarkingState::Internal(object)));
+ heap->promotion_queue()->insert(target, object_size);
}
heap->IncrementPromotedObjectsSize(object_size);
return true;
@@ -446,11 +445,10 @@ void Scavenger::SelectScavengingVisitorsTable() {
// can't be evacuated into evacuation candidate but
// short-circuiting violates this assumption.
scavenging_visitors_table_.Register(
- StaticVisitorBase::kVisitShortcutCandidate,
- scavenging_visitors_table_.GetVisitorById(
- StaticVisitorBase::kVisitConsString));
+ kVisitShortcutCandidate,
+ scavenging_visitors_table_.GetVisitorById(kVisitConsString));
scavenging_visitors_table_.Register(
- StaticVisitorBase::kVisitThinString,
+ kVisitThinString,
&ScavengingVisitor<TRANSFER_MARKS, LOGGING_AND_PROFILING_DISABLED>::
EvacuateThinStringNoShortcut);
}
@@ -460,17 +458,17 @@ void Scavenger::SelectScavengingVisitorsTable() {
Isolate* Scavenger::isolate() { return heap()->isolate(); }
+void RootScavengeVisitor::VisitRootPointer(Root root, Object** p) {
+ ScavengePointer(p);
+}
-void ScavengeVisitor::VisitPointer(Object** p) { ScavengePointer(p); }
-
-
-void ScavengeVisitor::VisitPointers(Object** start, Object** end) {
+void RootScavengeVisitor::VisitRootPointers(Root root, Object** start,
+ Object** end) {
// Copy all HeapObject pointers in [start, end)
for (Object** p = start; p < end; p++) ScavengePointer(p);
}
-
-void ScavengeVisitor::ScavengePointer(Object** p) {
+void RootScavengeVisitor::ScavengePointer(Object** p) {
Object* object = *p;
if (!heap_->InNewSpace(object)) return;