mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 10:18:13 +00:00
[vm, gc] Remove dead code from weak handle visitors.
TEST=ci Change-Id: I10619b7970de19047c9af77fc82dc9d3009f34f2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274801 Commit-Queue: Ryan Macnak <rmacnak@google.com> Reviewed-by: Siva Annamalai <asiva@google.com>
This commit is contained in:
parent
d9482e35ce
commit
a429d2ff91
|
@ -442,13 +442,7 @@ typedef MarkingVisitorBase<false> UnsyncMarkingVisitor;
|
||||||
typedef MarkingVisitorBase<true> SyncMarkingVisitor;
|
typedef MarkingVisitorBase<true> SyncMarkingVisitor;
|
||||||
|
|
||||||
static bool IsUnreachable(const ObjectPtr raw_obj) {
|
static bool IsUnreachable(const ObjectPtr raw_obj) {
|
||||||
if (!raw_obj->IsHeapObject()) {
|
if (raw_obj->IsSmiOrNewObject()) {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (raw_obj == Object::null()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (!raw_obj->IsOldObject()) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return !raw_obj->untag()->IsMarked();
|
return !raw_obj->untag()->IsMarked();
|
||||||
|
@ -456,9 +450,7 @@ static bool IsUnreachable(const ObjectPtr raw_obj) {
|
||||||
|
|
||||||
class MarkingWeakVisitor : public HandleVisitor {
|
class MarkingWeakVisitor : public HandleVisitor {
|
||||||
public:
|
public:
|
||||||
explicit MarkingWeakVisitor(Thread* thread)
|
explicit MarkingWeakVisitor(Thread* thread) : HandleVisitor(thread) {}
|
||||||
: HandleVisitor(thread),
|
|
||||||
class_table_(thread->isolate_group()->class_table()) {}
|
|
||||||
|
|
||||||
void VisitHandle(uword addr) {
|
void VisitHandle(uword addr) {
|
||||||
FinalizablePersistentHandle* handle =
|
FinalizablePersistentHandle* handle =
|
||||||
|
@ -470,8 +462,6 @@ class MarkingWeakVisitor : public HandleVisitor {
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ClassTable* class_table_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(MarkingWeakVisitor);
|
DISALLOW_COPY_AND_ASSIGN(MarkingWeakVisitor);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -564,20 +564,29 @@ class ScavengerVisitorBase : public ObjectPointerVisitor {
|
||||||
typedef ScavengerVisitorBase<false> SerialScavengerVisitor;
|
typedef ScavengerVisitorBase<false> SerialScavengerVisitor;
|
||||||
typedef ScavengerVisitorBase<true> ParallelScavengerVisitor;
|
typedef ScavengerVisitorBase<true> ParallelScavengerVisitor;
|
||||||
|
|
||||||
|
static bool IsUnreachable(ObjectPtr* ptr) {
|
||||||
|
ObjectPtr raw_obj = *ptr;
|
||||||
|
if (raw_obj->IsSmiOrOldObject()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
uword raw_addr = UntaggedObject::ToAddr(raw_obj);
|
||||||
|
uword header = *reinterpret_cast<uword*>(raw_addr);
|
||||||
|
if (IsForwarding(header)) {
|
||||||
|
*ptr = ForwardedObj(header);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
class ScavengerWeakVisitor : public HandleVisitor {
|
class ScavengerWeakVisitor : public HandleVisitor {
|
||||||
public:
|
public:
|
||||||
ScavengerWeakVisitor(Thread* thread, Scavenger* scavenger)
|
explicit ScavengerWeakVisitor(Thread* thread) : HandleVisitor(thread) {}
|
||||||
: HandleVisitor(thread),
|
|
||||||
scavenger_(scavenger),
|
|
||||||
class_table_(thread->isolate_group()->class_table()) {
|
|
||||||
ASSERT(scavenger->heap_->isolate_group() == thread->isolate_group());
|
|
||||||
}
|
|
||||||
|
|
||||||
void VisitHandle(uword addr) {
|
void VisitHandle(uword addr) {
|
||||||
FinalizablePersistentHandle* handle =
|
FinalizablePersistentHandle* handle =
|
||||||
reinterpret_cast<FinalizablePersistentHandle*>(addr);
|
reinterpret_cast<FinalizablePersistentHandle*>(addr);
|
||||||
ObjectPtr* p = handle->ptr_addr();
|
ObjectPtr* p = handle->ptr_addr();
|
||||||
if (scavenger_->IsUnreachable(p)) {
|
if (IsUnreachable(p)) {
|
||||||
handle->UpdateUnreachable(thread()->isolate_group());
|
handle->UpdateUnreachable(thread()->isolate_group());
|
||||||
} else {
|
} else {
|
||||||
handle->UpdateRelocated(thread()->isolate_group());
|
handle->UpdateRelocated(thread()->isolate_group());
|
||||||
|
@ -585,9 +594,6 @@ class ScavengerWeakVisitor : public HandleVisitor {
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Scavenger* scavenger_;
|
|
||||||
ClassTable* class_table_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(ScavengerWeakVisitor);
|
DISALLOW_COPY_AND_ASSIGN(ScavengerWeakVisitor);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1195,27 +1201,10 @@ void Scavenger::IterateRoots(ScavengerVisitorBase<parallel>* visitor) {
|
||||||
IterateRememberedCards(visitor);
|
IterateRememberedCards(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Scavenger::IsUnreachable(ObjectPtr* p) {
|
|
||||||
ObjectPtr raw_obj = *p;
|
|
||||||
if (!raw_obj->IsHeapObject()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!raw_obj->IsNewObject()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
uword raw_addr = UntaggedObject::ToAddr(raw_obj);
|
|
||||||
uword header = *reinterpret_cast<uword*>(raw_addr);
|
|
||||||
if (IsForwarding(header)) {
|
|
||||||
*p = ForwardedObj(header);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scavenger::MournWeakHandles() {
|
void Scavenger::MournWeakHandles() {
|
||||||
Thread* thread = Thread::Current();
|
Thread* thread = Thread::Current();
|
||||||
TIMELINE_FUNCTION_GC_DURATION(thread, "MournWeakHandles");
|
TIMELINE_FUNCTION_GC_DURATION(thread, "MournWeakHandles");
|
||||||
ScavengerWeakVisitor weak_visitor(thread, this);
|
ScavengerWeakVisitor weak_visitor(thread);
|
||||||
heap_->isolate_group()->VisitWeakPersistentHandles(&weak_visitor);
|
heap_->isolate_group()->VisitWeakPersistentHandles(&weak_visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -278,8 +278,6 @@ class Scavenger {
|
||||||
void MournWeakHandles();
|
void MournWeakHandles();
|
||||||
void Epilogue(SemiSpace* from);
|
void Epilogue(SemiSpace* from);
|
||||||
|
|
||||||
bool IsUnreachable(ObjectPtr* p);
|
|
||||||
|
|
||||||
void VerifyStoreBuffers();
|
void VerifyStoreBuffers();
|
||||||
|
|
||||||
void UpdateMaxHeapCapacity();
|
void UpdateMaxHeapCapacity();
|
||||||
|
|
Loading…
Reference in a new issue