Commit 877280b1 authored by Ulan Degenbaev's avatar Ulan Degenbaev Committed by Commit Bot

[heap] Use specialized IterateBodyFast in evacuator and scavenger.

Currently they are using a generic IterateBody(ObjectVisit*), which has
an overhead of virtual table lookup for each visited pointer.

Change-Id: I97268bf7fe63f8c99834d5fc31b4ce18a0fa5655
Reviewed-on: https://chromium-review.googlesource.com/979437
Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#52220}
parent a39f4452
...@@ -1686,7 +1686,7 @@ class EvacuateRecordOnlyVisitor final : public HeapObjectVisitor { ...@@ -1686,7 +1686,7 @@ class EvacuateRecordOnlyVisitor final : public HeapObjectVisitor {
inline bool Visit(HeapObject* object, int size) { inline bool Visit(HeapObject* object, int size) {
RecordMigratedSlotVisitor visitor(heap_->mark_compact_collector()); RecordMigratedSlotVisitor visitor(heap_->mark_compact_collector());
object->IterateBody(&visitor); object->IterateBodyFast(&visitor);
return true; return true;
} }
...@@ -3715,7 +3715,7 @@ class ToSpaceUpdatingItem : public UpdatingItem { ...@@ -3715,7 +3715,7 @@ class ToSpaceUpdatingItem : public UpdatingItem {
HeapObject* object = HeapObject::FromAddress(cur); HeapObject* object = HeapObject::FromAddress(cur);
Map* map = object->map(); Map* map = object->map();
int size = object->SizeFromMap(map); int size = object->SizeFromMap(map);
object->IterateBody(map, size, &visitor); object->IterateBodyFast(map, size, &visitor);
cur += size; cur += size;
} }
} }
......
...@@ -103,7 +103,7 @@ void Scavenger::IterateAndScavengePromotedObject(HeapObject* target, int size) { ...@@ -103,7 +103,7 @@ void Scavenger::IterateAndScavengePromotedObject(HeapObject* target, int size) {
is_compacting_ && is_compacting_ &&
heap()->incremental_marking()->atomic_marking_state()->IsBlack(target); heap()->incremental_marking()->atomic_marking_state()->IsBlack(target);
IterateAndScavengePromotedObjectsVisitor visitor(heap(), this, record_slots); IterateAndScavengePromotedObjectsVisitor visitor(heap(), this, record_slots);
target->IterateBody(target->map(), size, &visitor); target->IterateBodyFast(target->map(), size, &visitor);
} }
void Scavenger::AddPageToSweeperIfNecessary(MemoryChunk* page) { void Scavenger::AddPageToSweeperIfNecessary(MemoryChunk* page) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment