summaryrefslogtreecommitdiff
path: root/runtime/class_table.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2016-11-30 15:31:13 +0000
committer Vladimir Marko <vmarko@google.com> 2016-12-01 10:13:19 +0000
commitcb5ab35980a86b05586c402924d2e7ca9df25758 (patch)
treeacf33ce7ac7627682aaf822489247ca1804b60d0 /runtime/class_table.cc
parent07e6a7947f3279f66f14f7af045065b5297294c2 (diff)
Make sure that const-class linkage is preserved, try again.
This CL causes occasional test failures on the build servers which we were not able to reproduce locally. So we add some some additional debug output to help pinpoint the cause. Bug: 30627598 Bug: 33231647 Test: m test-art-host This reverts commit 171cf811a1cdf8b1cbc5151505d8630741ce4cf3. Change-Id: Id56a3f0e86e8212fd547e09c61794401bff47fb0
Diffstat (limited to 'runtime/class_table.cc')
-rw-r--r--runtime/class_table.cc22
1 files changed, 16 insertions, 6 deletions
diff --git a/runtime/class_table.cc b/runtime/class_table.cc
index 0fcce6b307..81cdce57a8 100644
--- a/runtime/class_table.cc
+++ b/runtime/class_table.cc
@@ -83,18 +83,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 GcRoot<mirror::Class>& klass : set) {
+ if (klass.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) {
@@ -102,7 +113,7 @@ mirror::Class* ClassTable::Lookup(const char* descriptor, size_t hash) {
for (ClassSet& class_set : classes_) {
auto it = class_set.FindWithHash(descriptor, hash);
if (it != class_set.end()) {
- return it->Read();
+ return it->Read();
}
}
return nullptr;
@@ -142,7 +153,6 @@ uint32_t ClassTable::ClassDescriptorHashEquals::operator()(const GcRoot<mirror::
bool ClassTable::ClassDescriptorHashEquals::operator()(const GcRoot<mirror::Class>& a,
const GcRoot<mirror::Class>& b) const {
- DCHECK_EQ(a.Read()->GetClassLoader(), b.Read()->GetClassLoader());
std::string temp;
return a.Read()->DescriptorEquals(b.Read()->GetDescriptor(&temp));
}