From 1b868498a176705b867e2572cc1bcbd58dbd62d6 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Wed, 16 Nov 2016 16:22:37 -0800 Subject: Use type lookup tables in compiler This recently regressed and stopped happening, the fix creates fake OatDexFiles so that the compiler uses the type lookup tables instead of slow FindClassDef and FindTypeId. Perf on host compile Facebook: Before: 2.49%: art::DexFile::FindClassDef(unsigned short) const 1.59%: art::DexFile::FindTypeId(char const*) const After: 0.42%: art::OatDexFile::FindClassDef(art::DexFile const&, char const*, unsigned long) 0%: art::DexFile::FindTypeId(char const*) const 0%: art::DexFile::FindClassDef(unsigned short) const Average install (N6P 960 mhz average of 40 samples): 38.2s -> 35.64s Bug: 32641252 Test: test-art-host, adb install. Change-Id: I34df21dc2c155bc2579c5cafdd91f9cb0fead1a9 --- runtime/class_table.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'runtime/class_table.cc') diff --git a/runtime/class_table.cc b/runtime/class_table.cc index b44104e299..0fcce6b307 100644 --- a/runtime/class_table.cc +++ b/runtime/class_table.cc @@ -170,7 +170,7 @@ bool ClassTable::InsertStrongRoot(ObjPtr obj) { const DexFile* dex_file = ObjPtr::DownCast(obj)->GetDexFile(); if (dex_file != nullptr && dex_file->GetOatDexFile() != nullptr) { const OatFile* oat_file = dex_file->GetOatDexFile()->GetOatFile(); - if (!oat_file->GetBssGcRoots().empty()) { + if (oat_file != nullptr && !oat_file->GetBssGcRoots().empty()) { InsertOatFileLocked(oat_file); // Ignore return value. } } -- cgit v1.2.3-59-g8ed1b