summaryrefslogtreecommitdiffstats
path: root/runtime/verifier
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2014-11-06 16:35:45 -0800
committerMathieu Chartier <mathieuc@google.com>2014-11-07 11:45:06 -0800
commite7c9a8c2b8481aafbc6af4ce6229bd361ba24742 (patch)
treef6d8fe8fd7aeae117a6547dc4f012cd4085cb4e8 /runtime/verifier
parent00b2da5c02339c36ffa4006f731f55203b09265d (diff)
downloadart-e7c9a8c2b8481aafbc6af4ce6229bd361ba24742.zip
art-e7c9a8c2b8481aafbc6af4ce6229bd361ba24742.tar.gz
art-e7c9a8c2b8481aafbc6af4ce6229bd361ba24742.tar.bz2
Add hash map, reduce excessive hashing
Changed the class def index to use a HashMap instead of unordered_map so that we can use FindWithHash to reduce how often we need to compute hashes. Fixed a bug in ClassLinker::UpdateClass where we didn't properly handle classes with the same descriptor but different class loaders. Introduced by previous CL. Before (fb launch): 1.74% art::ComputeModifiedUtf8Hash(char const*) After: 0.95% art::ComputeModifiedUtf8Hash(char const*) Bug: 18054905 Bug: 16828525 Change-Id: Iba2ee37c9837289e0ea187800ba4af322225a994 (cherry picked from commit 564ff985184737977aa26c485d0c1a413e530705)
Diffstat (limited to 'runtime/verifier')
-rw-r--r--runtime/verifier/reg_type_cache.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/runtime/verifier/reg_type_cache.cc b/runtime/verifier/reg_type_cache.cc
index 7c40945..1dfbe51 100644
--- a/runtime/verifier/reg_type_cache.cc
+++ b/runtime/verifier/reg_type_cache.cc
@@ -148,7 +148,8 @@ mirror::Class* RegTypeCache::ResolveClass(const char* descriptor, mirror::ClassL
if (can_load_classes_) {
klass = class_linker->FindClass(self, descriptor, class_loader);
} else {
- klass = class_linker->LookupClass(self, descriptor, loader);
+ klass = class_linker->LookupClass(self, descriptor, ComputeModifiedUtf8Hash(descriptor),
+ loader);
if (klass != nullptr && !klass->IsLoaded()) {
// We found the class but without it being loaded its not safe for use.
klass = nullptr;