diff options
author | 2016-12-09 10:20:54 +0000 | |
---|---|---|
committer | 2016-12-09 13:02:40 +0000 | |
commit | c5798bf82fc0ccd0bb90e0813d8e63df4d0576cc (patch) | |
tree | 89c94659ad977b66f4d2a90981ed7c63c0af636a /runtime/class_table.cc | |
parent | aea9ffece7eb32f3884a4ad0553e1df4d90fd9e4 (diff) |
Revert^8 "Make sure that const-class linkage is preserved."
Replaced two ReaderMutexLocks with WriterMutexLocks.
Removed some unnecessary debugging output.
Test: m test-art-host
Bug: 30627598
Original-Change-Id: Ie9b721464b4e9a5dcce8df8095548e983bba1fe8
This reverts commit 2c8c6b63da6ecb2ac701cc30f9b4fa4a8eea5cc8.
Change-Id: I3a1aeecf64e4b202cef61cceb248d48106a2f4a6
Diffstat (limited to 'runtime/class_table.cc')
-rw-r--r-- | runtime/class_table.cc | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/runtime/class_table.cc b/runtime/class_table.cc index 6eb74967e5..ec33e5ef80 100644 --- a/runtime/class_table.cc +++ b/runtime/class_table.cc @@ -84,18 +84,29 @@ mirror::Class* ClassTable::UpdateClass(const char* descriptor, mirror::Class* kl #pragma clang diagnostic pop // http://b/31104323 -size_t ClassTable::NumZygoteClasses() const { +size_t ClassTable::CountDefiningLoaderClasses(ObjPtr<mirror::ClassLoader> defining_loader, + const ClassSet& set) const { + size_t count = 0; + for (const TableSlot& root : set) { + if (root.Read()->GetClassLoader() == defining_loader) { + ++count; + } + } + return count; +} + +size_t ClassTable::NumZygoteClasses(ObjPtr<mirror::ClassLoader> defining_loader) const { ReaderMutexLock mu(Thread::Current(), lock_); size_t sum = 0; for (size_t i = 0; i < classes_.size() - 1; ++i) { - sum += classes_[i].Size(); + sum += CountDefiningLoaderClasses(defining_loader, classes_[i]); } return sum; } -size_t ClassTable::NumNonZygoteClasses() const { +size_t ClassTable::NumNonZygoteClasses(ObjPtr<mirror::ClassLoader> defining_loader) const { ReaderMutexLock mu(Thread::Current(), lock_); - return classes_.back().Size(); + return CountDefiningLoaderClasses(defining_loader, classes_.back()); } mirror::Class* ClassTable::Lookup(const char* descriptor, size_t hash) { @@ -104,7 +115,7 @@ mirror::Class* ClassTable::Lookup(const char* descriptor, size_t hash) { for (ClassSet& class_set : classes_) { auto it = class_set.FindWithHash(pair, hash); if (it != class_set.end()) { - return it->Read(); + return it->Read(); } } return nullptr; @@ -150,7 +161,6 @@ bool ClassTable::ClassDescriptorHashEquals::operator()(const TableSlot& a, DCHECK(!a.Read()->DescriptorEquals(b.Read()->GetDescriptor(&temp))); return false; } - DCHECK_EQ(a.Read()->GetClassLoader(), b.Read()->GetClassLoader()); std::string temp; return a.Read()->DescriptorEquals(b.Read()->GetDescriptor(&temp)); } |