Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1196)

Unified Diff: runtime/vm/isolate_reload.cc

Issue 2115713002: Reduce (debug-only) VerifyMaps from O(n^2) to O(n). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: tls Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/isolate_reload.cc
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 515d60ce9f2570fa7f71989dd9abfb599fd368c8..d6f1f4c861cf35cc50a1cd562ab9f19c84fbd71b 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -215,7 +215,7 @@ void IsolateReloadContext::ReportError(const Error& error) {
if (FLAG_trace_reload) {
THR_Print("ISO-RELOAD: Error: %s\n", error.ToErrorCString());
}
- ServiceEvent service_event(Isolate::Current(), ServiceEvent::kIsolateReload);
+ ServiceEvent service_event(I, ServiceEvent::kIsolateReload);
service_event.set_reload_error(&error);
Service::HandleEvent(&service_event);
}
@@ -227,7 +227,7 @@ void IsolateReloadContext::ReportError(const String& error_msg) {
void IsolateReloadContext::ReportSuccess() {
- ServiceEvent service_event(Isolate::Current(), ServiceEvent::kIsolateReload);
+ ServiceEvent service_event(I, ServiceEvent::kIsolateReload);
Service::HandleEvent(&service_event);
}
@@ -278,7 +278,7 @@ void IsolateReloadContext::StartReload() {
void IsolateReloadContext::RegisterClass(const Class& new_cls) {
const Class& old_cls = Class::Handle(OldClassOrNull(new_cls));
if (old_cls.IsNull()) {
- Isolate::Current()->class_table()->Register(new_cls);
+ I->class_table()->Register(new_cls);
if (FLAG_identity_reload) {
TIR_Print("Could not find replacement class for %s\n",
@@ -597,7 +597,7 @@ void IsolateReloadContext::RollbackLibraries() {
}
// Reset the registered libraries to the filtered array.
- Library::RegisterLibraries(Thread::Current(), saved_libs);
+ Library::RegisterLibraries(thread, saved_libs);
}
Library& saved_root_lib = Library::Handle(Z, saved_root_library());
@@ -624,36 +624,32 @@ void IsolateReloadContext::VerifyMaps() {
Class& cls = Class::Handle();
Class& new_cls = Class::Handle();
Class& cls2 = Class::Handle();
- Class& new_cls2 = Class::Handle();
// Verify that two old classes aren't both mapped to the same new
- // class. This could happen is the IsSameClass function is broken.
+ // class. This could happen is the IsSameClass function is broken.
UnorderedHashMap<ClassMapTraits> class_map(class_map_storage_);
+ UnorderedHashMap<ClassMapTraits> reverse_class_map(
+ HashTables::New<UnorderedHashMap<ClassMapTraits> >(
+ class_map.NumOccupied()));
{
UnorderedHashMap<ClassMapTraits>::Iterator it(&class_map);
while (it.MoveNext()) {
const intptr_t entry = it.Current();
new_cls = Class::RawCast(class_map.GetKey(entry));
cls = Class::RawCast(class_map.GetPayload(entry, 0));
- if (new_cls.raw() != cls.raw()) {
- UnorderedHashMap<ClassMapTraits>::Iterator it2(&class_map);
- while (it2.MoveNext()) {
- new_cls2 = Class::RawCast(class_map.GetKey(entry));
- if (new_cls.raw() == new_cls2.raw()) {
- cls2 = Class::RawCast(class_map.GetPayload(entry, 0));
- if (cls.raw() != cls2.raw()) {
- OS::PrintErr(
- "Classes '%s' and '%s' are distinct classes but both map to "
- "class '%s'\n",
- cls.ToCString(), cls2.ToCString(), new_cls.ToCString());
- UNREACHABLE();
- }
- }
- }
+ cls2 ^= reverse_class_map.GetOrNull(new_cls);
+ if (!cls2.IsNull()) {
+ OS::PrintErr("Classes '%s' and '%s' are distinct classes but both map "
+ " to class '%s'\n",
+ cls.ToCString(), cls2.ToCString(), new_cls.ToCString());
+ UNREACHABLE();
}
+ bool update = reverse_class_map.UpdateOrInsert(cls, new_cls);
+ ASSERT(!update);
}
}
class_map.Release();
+ reverse_class_map.Release();
}
#endif
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698