[vm] Cleanup reload debugging code.
TEST=ci Change-Id: I840fc1a614186e0f330f4b2313a6706452af6998 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/388665 Reviewed-by: Alexander Aprelev <aam@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
committed by
Commit Queue
parent
fa75e88591
commit
0ab55451f4
@@ -228,12 +228,9 @@ Become::~Become() {
|
||||
Thread::Current()->isolate_group()->set_become(nullptr);
|
||||
}
|
||||
|
||||
void Become::Add(const Object& before,
|
||||
const Object& after,
|
||||
const char* whence) {
|
||||
void Become::Add(const Object& before, const Object& after) {
|
||||
pointers_.Add(before.ptr());
|
||||
pointers_.Add(after.ptr());
|
||||
whence_.Add(whence);
|
||||
}
|
||||
|
||||
void Become::VisitObjectPointers(ObjectPointerVisitor* visitor) {
|
||||
@@ -296,56 +293,6 @@ void Become::Forward() {
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
intptr_t conflicts = 0;
|
||||
MallocDirectChainedHashMap<PtrIntTrait> map(pointers_.length() / 2);
|
||||
for (intptr_t i = 0; i < pointers_.length(); i += 2) {
|
||||
ObjectPtr before = pointers_[i];
|
||||
auto* pair = map.Lookup(before);
|
||||
if (pair == nullptr) {
|
||||
map.Insert({before, i + 1}); // 0 value is sentinel.
|
||||
} else {
|
||||
intptr_t j = pair->value - 1; // 0 value is sentinel.
|
||||
ObjectPtr before1 = pointers_[j];
|
||||
ObjectPtr after1 = pointers_[j + 1];
|
||||
ObjectPtr before2 = pointers_[i];
|
||||
ObjectPtr after2 = pointers_[i + 1];
|
||||
const char* whence1 = whence_[j / 2];
|
||||
const char* whence2 = whence_[i / 2];
|
||||
|
||||
OS::PrintErr("become conflict:\n");
|
||||
OS::PrintErr("whence1 = %s\n", whence1);
|
||||
OS::PrintErr("whence2 = %s\n", whence2);
|
||||
|
||||
OS::PrintErr("before1 cid = %" Pd "\n", before1.GetClassId());
|
||||
OS::PrintErr(" after1 cid = %" Pd "\n", after1.GetClassId());
|
||||
OS::PrintErr("before2 cid = %" Pd "\n", before2.GetClassId());
|
||||
OS::PrintErr(" after2 cid = %" Pd "\n", after2.GetClassId());
|
||||
|
||||
OS::PrintErr("before1 size = %" Pd "\n", before1.untag()->HeapSize());
|
||||
OS::PrintErr(" after1 size = %" Pd "\n", after1.untag()->HeapSize());
|
||||
OS::PrintErr("before2 size = %" Pd "\n", before2.untag()->HeapSize());
|
||||
OS::PrintErr(" after2 size = %" Pd "\n", after2.untag()->HeapSize());
|
||||
|
||||
#ifndef PRODUCT
|
||||
ClassTable* class_table = IsolateGroup::Current()->class_table();
|
||||
OS::PrintErr("before1 cls = %s\n",
|
||||
class_table->UserVisibleNameFor(before1.GetClassId()));
|
||||
OS::PrintErr(" after1 cls = %s\n",
|
||||
class_table->UserVisibleNameFor(after1.GetClassId()));
|
||||
OS::PrintErr("before2 cls = %s\n",
|
||||
class_table->UserVisibleNameFor(before2.GetClassId()));
|
||||
OS::PrintErr(" after2 cls = %s\n",
|
||||
class_table->UserVisibleNameFor(after2.GetClassId()));
|
||||
#endif
|
||||
conflicts++;
|
||||
}
|
||||
}
|
||||
if (conflicts != 0) {
|
||||
FATAL("%" Pd " become conflicts", conflicts);
|
||||
}
|
||||
}
|
||||
|
||||
Thread* thread = Thread::Current();
|
||||
auto heap = thread->isolate_group()->heap();
|
||||
|
||||
@@ -394,7 +341,6 @@ void Become::Forward() {
|
||||
}
|
||||
#endif
|
||||
pointers_.Clear();
|
||||
whence_.Clear();
|
||||
}
|
||||
|
||||
void Become::FollowForwardingPointers(Thread* thread) {
|
||||
|
||||
@@ -98,7 +98,8 @@ class Become {
|
||||
Become();
|
||||
~Become();
|
||||
|
||||
void Add(const Object& before, const Object& after, const char* whence);
|
||||
void Add(const Object& before, const Object& after);
|
||||
|
||||
void Forward();
|
||||
void Exchange() { UNIMPLEMENTED(); }
|
||||
|
||||
@@ -115,7 +116,6 @@ class Become {
|
||||
|
||||
private:
|
||||
MallocGrowableArray<ObjectPtr> pointers_;
|
||||
MallocGrowableArray<const char*> whence_;
|
||||
DISALLOW_COPY_AND_ASSIGN(Become);
|
||||
};
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ void TestBecomeForward(Heap::Space before_space, Heap::Space after_space) {
|
||||
EXPECT(before_obj.ptr() != after_obj.ptr());
|
||||
|
||||
Become become;
|
||||
become.Add(before_obj, after_obj, "test");
|
||||
become.Add(before_obj, after_obj);
|
||||
become.Forward();
|
||||
|
||||
EXPECT(before_obj.ptr() == after_obj.ptr());
|
||||
@@ -64,7 +64,7 @@ ISOLATE_UNIT_TEST_CASE(BecomeForwardPeer) {
|
||||
EXPECT_EQ(no_peer, heap->GetPeer(after_obj.ptr()));
|
||||
|
||||
Become become;
|
||||
become.Add(before_obj, after_obj, "test");
|
||||
become.Add(before_obj, after_obj);
|
||||
become.Forward();
|
||||
|
||||
EXPECT(before_obj.ptr() == after_obj.ptr());
|
||||
@@ -86,7 +86,7 @@ ISOLATE_UNIT_TEST_CASE(BecomeForwardObjectId) {
|
||||
EXPECT_EQ(no_id, heap->GetObjectId(after_obj.ptr()));
|
||||
|
||||
Become become;
|
||||
become.Add(before_obj, after_obj, "test");
|
||||
become.Add(before_obj, after_obj);
|
||||
become.Forward();
|
||||
|
||||
EXPECT(before_obj.ptr() == after_obj.ptr());
|
||||
@@ -112,7 +112,7 @@ ISOLATE_UNIT_TEST_CASE(BecomeForwardMessageId) {
|
||||
isolate->forward_table_old()->GetValueExclusive(after_obj.ptr()));
|
||||
|
||||
Become become;
|
||||
become.Add(before_obj, after_obj, "test");
|
||||
become.Add(before_obj, after_obj);
|
||||
become.Forward();
|
||||
|
||||
EXPECT(before_obj.ptr() == after_obj.ptr());
|
||||
@@ -138,7 +138,7 @@ ISOLATE_UNIT_TEST_CASE(BecomeForwardRememberedObject) {
|
||||
EXPECT(before_obj.ptr() != after_obj.ptr());
|
||||
|
||||
Become become;
|
||||
become.Add(before_obj, after_obj, "test");
|
||||
become.Add(before_obj, after_obj);
|
||||
become.Forward();
|
||||
|
||||
EXPECT(before_obj.ptr() == after_obj.ptr());
|
||||
@@ -167,7 +167,7 @@ ISOLATE_UNIT_TEST_CASE(BecomeForwardRememberedCards) {
|
||||
}
|
||||
|
||||
Become become;
|
||||
become.Add(old_element, new_element, "test");
|
||||
become.Add(old_element, new_element);
|
||||
become.Forward();
|
||||
|
||||
EXPECT(old_element.ptr() == new_element.ptr());
|
||||
|
||||
@@ -992,7 +992,7 @@ void IsolateGroup::RehashConstants(Become* become) {
|
||||
}
|
||||
|
||||
if (old_value.ptr() != new_value.ptr()) {
|
||||
become->Add(old_value, new_value, "enum forwarding");
|
||||
become->Add(old_value, new_value);
|
||||
}
|
||||
if (new_value.IsCanonical()) {
|
||||
cls.InsertCanonicalConstant(zone, new_value);
|
||||
@@ -1013,7 +1013,7 @@ void IsolateGroup::RehashConstants(Become* become) {
|
||||
} else {
|
||||
new_value = old_value.Canonicalize(thread);
|
||||
if (old_value.ptr() != new_value.ptr()) {
|
||||
become->Add(old_value, new_value, "constant forwarding");
|
||||
become->Add(old_value, new_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -357,9 +357,7 @@ void InstanceMorpher::CreateMorphedCopies(Become* become) {
|
||||
// instances of any class with the old size.
|
||||
Become::MakeDummyObject(before);
|
||||
|
||||
become->Add(
|
||||
before, after,
|
||||
is_canonical ? "instance morphing canonical" : "instance morphing");
|
||||
become->Add(before, after);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1281,7 +1279,7 @@ void ProgramReloadContext::RegisterClass(const Class& new_cls) {
|
||||
IG->class_table()->SetAt(old_cls.id(), new_cls.ptr());
|
||||
new_cls.CopyCanonicalConstants(old_cls);
|
||||
new_cls.CopyDeclarationType(old_cls);
|
||||
AddBecomeMapping(old_cls, new_cls, "class forwarding");
|
||||
AddBecomeMapping(old_cls, new_cls);
|
||||
AddClassMapping(new_cls, old_cls);
|
||||
}
|
||||
|
||||
@@ -1627,6 +1625,7 @@ void ProgramReloadContext::RollbackLibraries() {
|
||||
}
|
||||
|
||||
void ProgramReloadContext::VerifyMaps() {
|
||||
#if defined(DEBUG)
|
||||
TIMELINE_SCOPE(VerifyMaps);
|
||||
|
||||
// Verify that two old classes aren't both mapped to the same new
|
||||
@@ -1686,6 +1685,7 @@ void ProgramReloadContext::VerifyMaps() {
|
||||
}
|
||||
library_map.Release();
|
||||
reverse_library_map.Release();
|
||||
#endif // defined(DEBUG)
|
||||
}
|
||||
|
||||
void ProgramReloadContext::CommitBeforeInstanceMorphing() {
|
||||
@@ -2589,7 +2589,7 @@ void ProgramReloadContext::BuildLibraryMapping() {
|
||||
// Replaced class.
|
||||
AddLibraryMapping(replacement_or_new, old);
|
||||
|
||||
AddBecomeMapping(old, replacement_or_new, "library forwarding");
|
||||
AddBecomeMapping(old, replacement_or_new);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2698,13 +2698,12 @@ void ProgramReloadContext::AddStaticFieldMapping(const Field& old_field,
|
||||
const Field& new_field) {
|
||||
ASSERT(old_field.is_static());
|
||||
ASSERT(new_field.is_static());
|
||||
AddBecomeMapping(old_field, new_field, "static field");
|
||||
AddBecomeMapping(old_field, new_field);
|
||||
}
|
||||
|
||||
void ProgramReloadContext::AddBecomeMapping(const Object& old,
|
||||
const Object& neu,
|
||||
const char* whence) {
|
||||
become_.Add(old, neu, whence);
|
||||
const Object& neu) {
|
||||
become_.Add(old, neu);
|
||||
}
|
||||
|
||||
void ProgramReloadContext::RestoreClassHierarchyInvariants() {
|
||||
|
||||
@@ -379,9 +379,7 @@ class ProgramReloadContext {
|
||||
void AddLibraryMapping(const Library& replacement_or_new,
|
||||
const Library& original);
|
||||
void AddStaticFieldMapping(const Field& old_field, const Field& new_field);
|
||||
void AddBecomeMapping(const Object& old,
|
||||
const Object& neu,
|
||||
const char* whence);
|
||||
void AddBecomeMapping(const Object& old, const Object& neu);
|
||||
void RestoreClassHierarchyInvariants();
|
||||
|
||||
Become become_;
|
||||
|
||||
@@ -338,7 +338,7 @@ void Class::MigrateImplicitStaticClosures(ProgramReloadContext* irc,
|
||||
if (old_closure.IsCanonical()) {
|
||||
new_closure.SetCanonical();
|
||||
}
|
||||
irc->AddBecomeMapping(old_closure, new_closure, "static tear-off");
|
||||
irc->AddBecomeMapping(old_closure, new_closure);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -758,7 +758,7 @@ void Library::CheckReload(const Library& replacement,
|
||||
// The replacement of the old prefix with the new prefix
|
||||
// in Isolate::loaded_prefixes_set_ implicitly carried
|
||||
// the loaded state over to the new prefix.
|
||||
context->AddBecomeMapping(original_prefix, prefix, "library prefix");
|
||||
context->AddBecomeMapping(original_prefix, prefix);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user