From 38b8b25b7deff92627586405c80182a19e7c18f9 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Tue, 2 Jan 2018 19:07:06 +0000 Subject: ART: Faster type check bitstring initialization. Reuse depth from recursive call instead of calculating it repeatedly at every level of recursion. Pass pointers by value instead of reference. Test: m test-art-host-gtest Test: testrunner.py --host --jit Bug: 70734806 Change-Id: Idd405a2c3b04adbfd544639358dc562b32e4c34f --- runtime/class_linker.cc | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'runtime/class_linker.cc') diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index 192517fc5d..727dd14d6a 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -462,10 +462,8 @@ bool ClassLinker::InitWithoutImage(std::vector> b // // We take the lock here to avoid using NO_THREAD_SAFETY_ANALYSIS. MutexLock subtype_check_lock(Thread::Current(), *Locks::subtype_check_lock_); - mirror::Class* java_lang_Object_ptr = java_lang_Object.Get(); - SubtypeCheck::EnsureInitialized(java_lang_Object_ptr); - mirror::Class* java_lang_Class_ptr = java_lang_Class.Get(); - SubtypeCheck::EnsureInitialized(java_lang_Class_ptr); + SubtypeCheck>::EnsureInitialized(java_lang_Object.Get()); + SubtypeCheck>::EnsureInitialized(java_lang_Class.Get()); } // Object[] next to hold class roots. @@ -1872,8 +1870,7 @@ bool ClassLinker::AddImageSpace( ScopedTrace trace("Recalculate app image SubtypeCheck bitstrings"); MutexLock subtype_check_lock(Thread::Current(), *Locks::subtype_check_lock_); for (const ClassTable::TableSlot& root : temp_set) { - mirror::Class* root_klass = root.Read(); - SubtypeCheck::EnsureInitialized(root_klass); + SubtypeCheck>::EnsureInitialized(root.Read()); } } } @@ -5220,8 +5217,7 @@ bool ClassLinker::EnsureInitialized(Thread* self, // or Overflowed (can be used as a source for IsSubClass check). { MutexLock subtype_check_lock(Thread::Current(), *Locks::subtype_check_lock_); - ObjPtr c_ptr(c.Get()); - SubtypeCheck>::EnsureInitialized(c_ptr); + SubtypeCheck>::EnsureInitialized(c.Get()); // TODO: Avoid taking subtype_check_lock_ if SubtypeCheck is already initialized. } const bool success = InitializeClass(self, c, can_init_fields, can_init_parents); -- cgit v1.2.3-59-g8ed1b