[vm, gc] Avoid duplicate pointer visiting functions when compressed pointers are disabled.
This reduces code size ~10k, but more importantly it is easier to read profiling results without duplicate entries.
TEST=ci
Change-Id: I14c4a0d78d856242c5493df6de629ce048753c38
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/294440
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index 108e40fb..d5a6b57 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -159,19 +159,21 @@
}
private:
- void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
+ void VisitPointers(ObjectPtr* from, ObjectPtr* to) override {
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
VisitObject(*ptr);
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
- CompressedObjectPtr* to) {
+ CompressedObjectPtr* to) override {
for (CompressedObjectPtr* ptr = from; ptr <= to; ptr++) {
VisitObject(ptr->Decompress(heap_base));
}
}
+#endif
WeakTable* visited_;
MallocGrowableArray<ObjectPtr>* const working_set_;
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index f9af930..600ff15 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1499,7 +1499,7 @@
return old_to_new_cids_[cid];
}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsClass()) {
ClassPtr cls = Class::RawCast(obj);
const classid_t old_cid = cls->untag()->id_;
@@ -1621,7 +1621,7 @@
record_type_(RecordType::Handle(zone)),
type_args_(TypeArguments::Handle(zone)) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsTypeParameter()) {
type_param_ ^= obj;
type_param_.SetHash(0);
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index c791baf..ee68e94 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -1297,7 +1297,7 @@
precompiler_(precompiler),
subinstance_(Object::Handle()) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* current = first; current <= last; current++) {
subinstance_ = *current;
if (subinstance_.IsInstance()) {
@@ -1307,9 +1307,10 @@
subinstance_ = Object::null();
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
for (CompressedObjectPtr* current = first; current <= last; current++) {
subinstance_ = current->Decompress(heap_base);
if (subinstance_.IsInstance()) {
@@ -1318,6 +1319,7 @@
}
subinstance_ = Object::null();
}
+#endif
private:
Precompiler* precompiler_;
@@ -2399,7 +2401,7 @@
GrowableHandlePtrArray<const AbstractType>* types)
: type_(AbstractType::Handle(zone)), types_(types) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->GetClassId() == kTypeCid ||
obj->GetClassId() == kFunctionTypeCid ||
obj->GetClassId() == kRecordTypeCid ||
@@ -3313,7 +3315,7 @@
GrowableHandlePtrArray<const Script>* scripts)
: script_(Script::Handle(zone)), scripts_(scripts) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->GetClassId() == kScriptCid) {
script_ ^= obj;
scripts_->Add(Script::Cast(script_));
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index c3bea3c..5e3ffdf 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -119,7 +119,7 @@
funcHandle_(Function::Handle(thread->zone())),
typeHandle_(AbstractType::Handle(thread->zone())) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsFunction()) {
funcHandle_ ^= obj;
classHandle_ ^= funcHandle_.Owner();
diff --git a/runtime/vm/gdb_helpers.cc b/runtime/vm/gdb_helpers.cc
index 0dfa825..1cb17b5 100644
--- a/runtime/vm/gdb_helpers.cc
+++ b/runtime/vm/gdb_helpers.cc
@@ -58,21 +58,23 @@
PrintObjectPointersVisitor()
: ObjectPointerVisitor(IsolateGroup::Current()) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* p = first; p <= last; p++) {
Object& obj = Object::Handle(*p);
OS::PrintErr("%p: %s\n", p, obj.ToCString());
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
for (CompressedObjectPtr* p = first; p <= last; p++) {
Object& obj = Object::Handle(p->Decompress(heap_base));
OS::PrintErr("%p: %s\n", p, obj.ToCString());
}
}
+#endif
};
DART_EXPORT
diff --git a/runtime/vm/heap/become.cc b/runtime/vm/heap/become.cc
index e7d112b..543dbeb 100644
--- a/runtime/vm/heap/become.cc
+++ b/runtime/vm/heap/become.cc
@@ -83,7 +83,7 @@
thread_(thread),
visiting_object_(nullptr) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* p = first; p <= last; p++) {
ObjectPtr old_target = *p;
ObjectPtr new_target;
@@ -107,9 +107,10 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
for (CompressedObjectPtr* p = first; p <= last; p++) {
ObjectPtr old_target = p->Decompress(heap_base);
ObjectPtr new_target;
@@ -134,6 +135,7 @@
}
}
}
+#endif
void VisitingObject(ObjectPtr obj) {
visiting_object_ = obj;
@@ -159,7 +161,7 @@
explicit ForwardHeapPointersVisitor(ForwardPointersVisitor* pointer_visitor)
: pointer_visitor_(pointer_visitor) {}
- virtual void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
pointer_visitor_->VisitingObject(obj);
obj->untag()->VisitPointers(pointer_visitor_);
}
@@ -175,7 +177,7 @@
explicit ForwardHeapPointersHandleVisitor(Thread* thread)
: HandleVisitor(thread) {}
- virtual void VisitHandle(uword addr) {
+ void VisitHandle(uword addr) override {
FinalizablePersistentHandle* handle =
reinterpret_cast<FinalizablePersistentHandle*>(addr);
if (IsForwardingObject(handle->ptr())) {
diff --git a/runtime/vm/heap/compactor.cc b/runtime/vm/heap/compactor.cc
index 5f59ad2..e863ade4 100644
--- a/runtime/vm/heap/compactor.cc
+++ b/runtime/vm/heap/compactor.cc
@@ -744,6 +744,7 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void GCCompactor::VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
CompressedObjectPtr* last) {
@@ -751,6 +752,7 @@
ForwardCompressedPointer(heap_base, ptr);
}
}
+#endif
bool GCCompactor::CanVisitSuspendStatePointers(SuspendStatePtr suspend_state) {
if ((suspend_state->untag()->pc() != 0) && !can_visit_stack_frames_) {
diff --git a/runtime/vm/heap/compactor.h b/runtime/vm/heap/compactor.h
index 7b65ccd..518c12d 100644
--- a/runtime/vm/heap/compactor.h
+++ b/runtime/vm/heap/compactor.h
@@ -43,9 +43,11 @@
CompressedObjectPtr* first,
CompressedObjectPtr* last) override;
void VisitPointers(ObjectPtr* first, ObjectPtr* last) override;
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
CompressedObjectPtr* last) override;
+#endif
bool CanVisitSuspendStatePointers(SuspendStatePtr suspend_state) override;
void VisitHandle(uword addr) override;
diff --git a/runtime/vm/heap/marker.cc b/runtime/vm/heap/marker.cc
index 9bbba90..5cb2c41 100644
--- a/runtime/vm/heap/marker.cc
+++ b/runtime/vm/heap/marker.cc
@@ -179,20 +179,22 @@
return *ptr;
}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* current = first; current <= last; current++) {
MarkObject(LoadPointerIgnoreRace(current));
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
for (CompressedObjectPtr* current = first; current <= last; current++) {
MarkObject(
LoadCompressedPointerIgnoreRace(current).Decompress(heap_base));
}
}
+#endif
intptr_t ProcessWeakProperty(WeakPropertyPtr raw_weak) {
// The fate of the weak property is determined by its key.
@@ -473,7 +475,7 @@
public:
explicit MarkingWeakVisitor(Thread* thread) : HandleVisitor(thread) {}
- void VisitHandle(uword addr) {
+ void VisitHandle(uword addr) override {
FinalizablePersistentHandle* handle =
reinterpret_cast<FinalizablePersistentHandle*>(addr);
ObjectPtr raw_obj = handle->ptr();
@@ -659,7 +661,7 @@
explicit ObjectIdRingClearPointerVisitor(IsolateGroup* isolate_group)
: ObjectPointerVisitor(isolate_group) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* current = first; current <= last; current++) {
ObjectPtr raw_obj = *current;
ASSERT(raw_obj->IsHeapObject());
@@ -670,11 +672,13 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
UNREACHABLE(); // ObjectIdRing is not compressed.
}
+#endif
};
void GCMarker::ProcessObjectIdTable(Thread* thread) {
@@ -1022,13 +1026,13 @@
VerifyAfterMarkingVisitor()
: ObjectVisitor(), ObjectPointerVisitor(IsolateGroup::Current()) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsNewObject() || obj->untag()->IsMarked()) {
obj->untag()->VisitPointers(this);
}
}
- void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
+ void VisitPointers(ObjectPtr* from, ObjectPtr* to) override {
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr obj = *ptr;
if (obj->IsHeapObject() && obj->IsOldObject() &&
@@ -1039,9 +1043,10 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
- CompressedObjectPtr* to) {
+ CompressedObjectPtr* to) override {
for (CompressedObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr obj = ptr->Decompress(heap_base);
if (obj->IsHeapObject() && obj->IsOldObject() &&
@@ -1051,6 +1056,7 @@
}
}
}
+#endif
};
void GCMarker::MarkObjects(PageSpace* page_space) {
diff --git a/runtime/vm/heap/pages.cc b/runtime/vm/heap/pages.cc
index fb19322..e055dc1 100644
--- a/runtime/vm/heap/pages.cc
+++ b/runtime/vm/heap/pages.cc
@@ -744,7 +744,7 @@
class HeapMapAsJSONVisitor : public ObjectVisitor {
public:
explicit HeapMapAsJSONVisitor(JSONArray* array) : array_(array) {}
- virtual void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
array_->AddValue(obj->untag()->HeapSize() / kObjectAlignment);
array_->AddValue(obj->GetClassId());
}
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index 3dec815..526fb5a 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -149,9 +149,9 @@
constexpr static const char* const kName = "Scavenger";
#endif
- virtual void VisitTypedDataViewPointers(TypedDataViewPtr view,
- CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ void VisitTypedDataViewPointers(TypedDataViewPtr view,
+ CompressedObjectPtr* first,
+ CompressedObjectPtr* last) override {
// TypedDataViews require extra processing to update their
// PointerBase::data_ pointer. If the underlying typed data is external, no
// update is needed. If the underlying typed data is internal, the pointer
@@ -218,7 +218,7 @@
view->untag()->RecomputeDataFieldForInternalTypedData();
}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
ASSERT(Utils::IsAligned(first, sizeof(*first)));
ASSERT(Utils::IsAligned(last, sizeof(*last)));
for (ObjectPtr* current = first; current <= last; current++) {
@@ -226,15 +226,17 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
ASSERT(Utils::IsAligned(first, sizeof(*first)));
ASSERT(Utils::IsAligned(last, sizeof(*last)));
for (CompressedObjectPtr* current = first; current <= last; current++) {
ScavengeCompressedPointer(heap_base, current);
}
}
+#endif
void VisitingOldObject(ObjectPtr obj) {
ASSERT((obj == nullptr) || obj->IsOldObject());
@@ -584,7 +586,7 @@
public:
explicit ScavengerWeakVisitor(Thread* thread) : HandleVisitor(thread) {}
- void VisitHandle(uword addr) {
+ void VisitHandle(uword addr) override {
FinalizablePersistentHandle* handle =
reinterpret_cast<FinalizablePersistentHandle*>(addr);
ObjectPtr* p = handle->ptr_addr();
@@ -820,7 +822,7 @@
: ObjectPointerVisitor(IsolateGroup::Current()),
in_store_buffer_(in_store_buffer) {}
- void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
+ void VisitPointers(ObjectPtr* from, ObjectPtr* to) override {
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr raw_obj = *ptr;
RELEASE_ASSERT(raw_obj->untag()->IsRemembered());
@@ -836,11 +838,13 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
- CompressedObjectPtr* to) {
+ CompressedObjectPtr* to) override {
UNREACHABLE(); // Store buffer blocks are not compressed.
}
+#endif
private:
ObjectSet* const in_store_buffer_;
@@ -855,7 +859,7 @@
in_store_buffer_(in_store_buffer),
to_(to) {}
- void VisitObject(ObjectPtr raw_obj) {
+ void VisitObject(ObjectPtr raw_obj) override {
if (raw_obj->IsPseudoObject()) return;
RELEASE_ASSERT(raw_obj->IsOldObject());
@@ -871,7 +875,7 @@
raw_obj->untag()->VisitPointers(this);
}
- void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
+ void VisitPointers(ObjectPtr* from, ObjectPtr* to) override {
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr raw_obj = *ptr;
if (raw_obj->IsHeapObject() && raw_obj->IsNewObject()) {
@@ -900,9 +904,10 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
- CompressedObjectPtr* to) {
+ CompressedObjectPtr* to) override {
for (CompressedObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr raw_obj = ptr->Decompress(heap_base);
if (raw_obj->IsHeapObject() && raw_obj->IsNewObject()) {
@@ -930,6 +935,7 @@
}
}
}
+#endif
private:
const ObjectSet* const in_store_buffer_;
@@ -1868,7 +1874,7 @@
TIMELINE_FUNCTION_GC_DURATION(thread, "ReverseScavenge");
class ReverseFromForwardingVisitor : public ObjectVisitor {
- void VisitObject(ObjectPtr from_obj) {
+ void VisitObject(ObjectPtr from_obj) override {
uword from_header = ReadHeaderRelaxed(from_obj);
if (IsForwarding(from_header)) {
ObjectPtr to_obj = ForwardedObj(from_header);
diff --git a/runtime/vm/heap/scavenger_test.cc b/runtime/vm/heap/scavenger_test.cc
index 61e5fbc..53b3ae3 100644
--- a/runtime/vm/heap/scavenger_test.cc
+++ b/runtime/vm/heap/scavenger_test.cc
@@ -13,19 +13,23 @@
class FailingObjectVisitor : public ObjectVisitor {
public:
FailingObjectVisitor() {}
- virtual void VisitObject(ObjectPtr obj) { EXPECT(false); }
+ void VisitObject(ObjectPtr obj) override { EXPECT(false); }
};
// Expects to visit no objects (since the space should be empty).
class FailingObjectPointerVisitor : public ObjectPointerVisitor {
public:
FailingObjectPointerVisitor() : ObjectPointerVisitor(nullptr) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) { EXPECT(false); }
- void VisitCompressedPointers(uword heap_base,
- CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
EXPECT(false);
}
+#if defined(DART_COMPRESSED_POINTERS)
+ void VisitCompressedPointers(uword heap_base,
+ CompressedObjectPtr* first,
+ CompressedObjectPtr* last) override {
+ EXPECT(false);
+ }
+#endif
};
// Expects to visit no objects (since the space should be empty).
diff --git a/runtime/vm/heap/verifier.cc b/runtime/vm/heap/verifier.cc
index 516a663..aacc1cf 100644
--- a/runtime/vm/heap/verifier.cc
+++ b/runtime/vm/heap/verifier.cc
@@ -59,6 +59,7 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VerifyPointersVisitor::VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
CompressedObjectPtr* to) {
@@ -76,6 +77,7 @@
}
}
}
+#endif
void VerifyWeakPointersVisitor::VisitHandle(uword addr) {
FinalizablePersistentHandle* handle =
diff --git a/runtime/vm/heap/verifier.h b/runtime/vm/heap/verifier.h
index 0b490cd..63a853d 100644
--- a/runtime/vm/heap/verifier.h
+++ b/runtime/vm/heap/verifier.h
@@ -29,7 +29,7 @@
allocated_set_(allocated_set),
mark_expectation_(mark_expectation) {}
- virtual void VisitObject(ObjectPtr obj);
+ void VisitObject(ObjectPtr obj) override;
private:
IsolateGroup* isolate_group_;
@@ -47,10 +47,12 @@
ObjectSet* allocated_set)
: ObjectPointerVisitor(isolate_group), allocated_set_(allocated_set) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last);
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override;
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last);
+ CompressedObjectPtr* last) override;
+#endif
static void VerifyPointers(MarkExpectation mark_expectation = kForbidMarked);
@@ -65,7 +67,7 @@
explicit VerifyWeakPointersVisitor(VerifyPointersVisitor* visitor)
: HandleVisitor(Thread::Current()), visitor_(visitor) {}
- virtual void VisitHandle(uword addr);
+ void VisitHandle(uword addr) override;
private:
ObjectPointerVisitor* visitor_;
@@ -79,7 +81,7 @@
class VerifyCanonicalVisitor : public ObjectVisitor {
public:
explicit VerifyCanonicalVisitor(Thread* thread);
- virtual void VisitObject(ObjectPtr obj);
+ void VisitObject(ObjectPtr obj) override;
private:
Thread* thread_;
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 2818dc6..dfd616d 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -262,7 +262,7 @@
explicit FinalizeWeakPersistentHandlesVisitor(IsolateGroup* isolate_group)
: HandleVisitor(Thread::Current()), isolate_group_(isolate_group) {}
- void VisitHandle(uword addr) {
+ void VisitHandle(uword addr) override {
auto handle = reinterpret_cast<FinalizablePersistentHandle*>(addr);
handle->UpdateUnreachable(isolate_group_);
}
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index af15f18..3cfb5cb 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -73,7 +73,7 @@
explicit ObjectLocator(IsolateGroupReloadContext* context)
: context_(context), count_(0) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
InstanceMorpher* morpher =
context_->instance_morpher_by_cid_.LookupValue(obj->GetClassId());
if (morpher != nullptr) {
@@ -2045,7 +2045,7 @@
instances_(instances) {}
virtual ~InvalidationCollector() {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
intptr_t cid = obj->GetClassId();
if (cid == kFunctionCid) {
const Function& func =
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 111c6db..10464a7 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -2861,7 +2861,7 @@
ASSERT(old_obj_->IsOldObject());
}
- void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
+ void VisitPointers(ObjectPtr* from, ObjectPtr* to) override {
if (old_obj_->IsArray()) {
for (ObjectPtr* slot = from; slot <= to; ++slot) {
ObjectPtr value = *slot;
@@ -2879,9 +2879,10 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
- CompressedObjectPtr* to) {
+ CompressedObjectPtr* to) override {
if (old_obj_->IsArray()) {
for (CompressedObjectPtr* slot = from; slot <= to; ++slot) {
ObjectPtr value = slot->Decompress(heap_base);
@@ -2898,6 +2899,7 @@
}
}
}
+#endif
private:
Thread* thread_;
@@ -19963,19 +19965,21 @@
bool has_pointers() const { return has_pointers_; }
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
if (last >= first) {
has_pointers_ = true;
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
if (last >= first) {
has_pointers_ = true;
}
}
+#endif
private:
bool has_pointers_;
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index 026c2a8..dc764b9 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -181,24 +181,26 @@
object_ids_ = nullptr;
}
- virtual bool trace_values_through_fields() const { return true; }
+ bool trace_values_through_fields() const override { return true; }
// Marks and pushes. Used to initialize this stack with roots.
// We can use ObjectIdTable normally used by serializers because it
// won't be in use while handling a service request (ObjectGraph's only use).
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* current = first; current <= last; ++current) {
Visit(current, *current);
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
for (CompressedObjectPtr* current = first; current <= last; ++current) {
Visit(current, current->Decompress(heap_base));
}
}
+#endif
void Visit(void* ptr, ObjectPtr obj) {
if (obj->IsHeapObject() && !obj->untag()->InVMIsolateHeap() &&
@@ -244,7 +246,7 @@
}
}
- virtual bool visit_weak_persistent_handles() const {
+ bool visit_weak_persistent_handles() const override {
return visit_weak_persistent_handles_;
}
@@ -399,7 +401,7 @@
InstanceAccumulator(ObjectGraph::Stack* stack, intptr_t class_id)
: stack_(stack), class_id_(class_id) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->GetClassId() == class_id_) {
ObjectPtr rawobj = obj;
stack_->VisitPointer(&rawobj);
@@ -617,16 +619,16 @@
ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0);
}
- virtual bool trace_values_through_fields() const { return true; }
+ bool trace_values_through_fields() const override { return true; }
intptr_t length() const { return length_; }
- virtual void VisitObject(ObjectPtr raw_obj) {
+ void VisitObject(ObjectPtr raw_obj) override {
source_ = raw_obj;
raw_obj->untag()->VisitPointers(this);
}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* current_ptr = first; current_ptr <= last; current_ptr++) {
ObjectPtr current_obj = *current_ptr;
if (current_obj == target_) {
@@ -656,9 +658,10 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
for (CompressedObjectPtr* current_ptr = first; current_ptr <= last;
current_ptr++) {
ObjectPtr current_obj = current_ptr->Decompress(heap_base);
@@ -688,6 +691,7 @@
}
}
}
+#endif
private:
ObjectPtr source_;
@@ -939,7 +943,7 @@
writer_(writer),
object_slots_(object_slots) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsPseudoObject()) return;
writer_->AssignObjectId(obj);
@@ -960,7 +964,7 @@
}
}
- void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
+ void VisitPointers(ObjectPtr* from, ObjectPtr* to) override {
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr obj = *ptr;
if (!obj->IsHeapObject()) {
@@ -970,9 +974,10 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
- CompressedObjectPtr* to) {
+ CompressedObjectPtr* to) override {
for (CompressedObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr obj = ptr->Decompress(heap_base);
if (!obj->IsHeapObject()) {
@@ -981,8 +986,9 @@
writer_->CountReferences(1);
}
}
+#endif
- void VisitHandle(uword addr) {
+ void VisitHandle(uword addr) override {
FinalizablePersistentHandle* weak_persistent_handle =
reinterpret_cast<FinalizablePersistentHandle*>(addr);
if (!weak_persistent_handle->ptr()->IsHeapObject()) {
@@ -1003,7 +1009,7 @@
public:
CountImagePageRefs() : ObjectVisitor() {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsPseudoObject()) return;
count_++;
}
@@ -1020,7 +1026,7 @@
explicit WriteImagePageRefs(HeapSnapshotWriter* writer)
: ObjectVisitor(), writer_(writer) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsPseudoObject()) return;
#if defined(DEBUG)
count_++;
@@ -1073,7 +1079,7 @@
writer_(writer),
object_slots_(object_slots) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsPseudoObject()) return;
intptr_t cid = obj->GetClassId();
@@ -1258,7 +1264,7 @@
writer_->WriteUnsigned(counted_);
}
- void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
+ void VisitPointers(ObjectPtr* from, ObjectPtr* to) override {
if (writing_) {
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr target = *ptr;
@@ -1273,9 +1279,10 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
- CompressedObjectPtr* to) {
+ CompressedObjectPtr* to) override {
if (writing_) {
for (CompressedObjectPtr* ptr = from; ptr <= to; ptr++) {
ObjectPtr target = ptr->Decompress(heap_base);
@@ -1289,8 +1296,9 @@
counted_ += count;
}
}
+#endif
- void VisitHandle(uword addr) {
+ void VisitHandle(uword addr) override {
FinalizablePersistentHandle* weak_persistent_handle =
reinterpret_cast<FinalizablePersistentHandle*>(addr);
if (!weak_persistent_handle->ptr()->IsHeapObject()) {
@@ -1336,7 +1344,7 @@
explicit Pass3Visitor(HeapSnapshotWriter* writer)
: ObjectVisitor(), thread_(Thread::Current()), writer_(writer) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsPseudoObject()) {
return;
}
@@ -1360,7 +1368,7 @@
field_table_names_(field_table_names),
field_(Field::Handle()) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsField()) {
field_ ^= obj;
if (field_.is_static()) {
diff --git a/runtime/vm/object_graph.h b/runtime/vm/object_graph.h
index 5e22637..0761993 100644
--- a/runtime/vm/object_graph.h
+++ b/runtime/vm/object_graph.h
@@ -282,8 +282,8 @@
CountObjectsVisitor(Thread* thread, intptr_t class_count);
~CountObjectsVisitor() {}
- void VisitObject(ObjectPtr obj);
- void VisitHandle(uword addr);
+ void VisitObject(ObjectPtr obj) override;
+ void VisitHandle(uword addr) override;
std::unique_ptr<intptr_t[]> new_count_;
std::unique_ptr<intptr_t[]> new_size_;
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index 113a864..6fbd142 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -915,6 +915,7 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* from,
CompressedObjectPtr* to) override {
@@ -922,6 +923,7 @@
VisitObject(ptr->Decompress(heap_base));
}
}
+#endif
RetainingPath* retaining_path_;
MallocGrowableArray<ObjectPtr>* const working_list_;
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index f3efdf2..916ba2e 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -1444,7 +1444,7 @@
~CodeLookupTableBuilder() {}
- void VisitObject(ObjectPtr raw_obj) {
+ void VisitObject(ObjectPtr raw_obj) override {
if (raw_obj->IsCode() && !Code::IsUnknownDartCode(Code::RawCast(raw_obj))) {
table_->Add(Code::Handle(Code::RawCast(raw_obj)));
}
diff --git a/runtime/vm/program_visitor.cc b/runtime/vm/program_visitor.cc
index 6429479..1cfbe30 100644
--- a/runtime/vm/program_visitor.cc
+++ b/runtime/vm/program_visitor.cc
@@ -1242,13 +1242,13 @@
}
}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (!obj->IsInstructions()) return;
instructions_ = Instructions::RawCast(obj);
AddCanonical(instructions_);
}
- void VisitFunction(const Function& function) {
+ void VisitFunction(const Function& function) override {
if (!function.HasCode()) return;
code_ = function.CurrentCode();
// This causes the code to be visited once here and once directly in the
@@ -1258,7 +1258,7 @@
function.SetInstructionsSafe(code_); // Update cached entry point.
}
- void VisitCode(const Code& code) {
+ void VisitCode(const Code& code) override {
instructions_ = code.instructions();
instructions_ = Dedup(instructions_);
code.set_instructions(instructions_);
@@ -1447,7 +1447,7 @@
unit_(LoadingUnit::Handle(zone)),
obj_(Object::Handle(zone)) {}
- void VisitObject(ObjectPtr obj) {
+ void VisitObject(ObjectPtr obj) override {
if (obj->IsCode()) {
code_ ^= obj;
VisitCode(code_);
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 4aeda83..5eb3fe4 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -4797,7 +4797,7 @@
}
protected:
- virtual void VisitHandle(uword addr) {
+ void VisitHandle(uword addr) override {
T* handle = reinterpret_cast<T*>(addr);
Append(handle);
}
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 3ee9276..e33912f 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -666,7 +666,7 @@
current_(Thread::Current()),
op_(op) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (; first != last + 1; first++) {
ObjectPtr obj = *first;
// Stores into new-space objects don't need a write barrier.
@@ -712,11 +712,13 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
UNREACHABLE(); // Stack slots are not compressed.
}
+#endif
private:
Thread* const thread_;
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index a69d258..582af1e 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -83,7 +83,7 @@
explicit ObjectCounter(IsolateGroup* isolate_group, const Object* obj)
: ObjectPointerVisitor(isolate_group), obj_(obj), count_(0) {}
- void VisitPointers(ObjectPtr* first, ObjectPtr* last) {
+ void VisitPointers(ObjectPtr* first, ObjectPtr* last) override {
for (ObjectPtr* current = first; current <= last; ++current) {
if (*current == obj_->ptr()) {
++count_;
@@ -91,15 +91,17 @@
}
}
+#if defined(DART_COMPRESSED_POINTERS)
void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
- CompressedObjectPtr* last) {
+ CompressedObjectPtr* last) override {
for (CompressedObjectPtr* current = first; current <= last; ++current) {
if (current->Decompress(heap_base) == obj_->ptr()) {
++count_;
}
}
}
+#endif
intptr_t count() const { return count_; }
diff --git a/runtime/vm/visitor.h b/runtime/vm/visitor.h
index 5aafc64..cf2cb63 100644
--- a/runtime/vm/visitor.h
+++ b/runtime/vm/visitor.h
@@ -35,9 +35,17 @@
// Range of pointers to visit 'first' <= pointer <= 'last'.
virtual void VisitPointers(ObjectPtr* first, ObjectPtr* last) = 0;
+#if defined(DART_COMPRESSED_POINTERS)
virtual void VisitCompressedPointers(uword heap_base,
CompressedObjectPtr* first,
CompressedObjectPtr* last) = 0;
+#else
+ void VisitCompressedPointers(uword heap_base,
+ CompressedObjectPtr* first,
+ CompressedObjectPtr* last) {
+ VisitPointers(first, last);
+ }
+#endif
// len argument is the number of pointers to visit starting from 'p'.
void VisitPointers(ObjectPtr* p, intptr_t len) {