diff options
author | Ian Rogers <irogers@google.com> | 2013-06-07 15:16:10 -0700 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2013-06-07 15:16:10 -0700 |
commit | 6fe568e16cea80dfe9ccb856c138a75da5f2a90d (patch) | |
tree | 91d17826bcd6de30d253d9cfd86ee8089e6e374d /src/compiler/driver/compiler_driver.cc | |
parent | 16e3d2cee40f3305f29f3ce0d2857ecc815e57bc (diff) | |
download | android_art-6fe568e16cea80dfe9ccb856c138a75da5f2a90d.tar.gz android_art-6fe568e16cea80dfe9ccb856c138a75da5f2a90d.tar.bz2 android_art-6fe568e16cea80dfe9ccb856c138a75da5f2a90d.zip |
Simplify CanAssumeTypeIsPresentInDexCache.
Only use ScopedObjectAccess to check correct dex cache semantics.
Change-Id: Ia4d3475368f92736c8a705b1b9a13175fc0af413
Diffstat (limited to 'src/compiler/driver/compiler_driver.cc')
-rw-r--r-- | src/compiler/driver/compiler_driver.cc | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/src/compiler/driver/compiler_driver.cc b/src/compiler/driver/compiler_driver.cc index 1b8f87d51f..3917295fe1 100644 --- a/src/compiler/driver/compiler_driver.cc +++ b/src/compiler/driver/compiler_driver.cc @@ -536,24 +536,19 @@ void CompilerDriver::RecordClassStatus(ClassReference ref, CompiledClass* compil bool CompilerDriver::CanAssumeTypeIsPresentInDexCache(const DexFile& dex_file, uint32_t type_idx) { - ScopedObjectAccess soa(Thread::Current()); - mirror::DexCache* dex_cache = Runtime::Current()->GetClassLinker()->FindDexCache(dex_file); - if (!IsImage()) { - stats_->TypeNotInDexCache(); - return false; - } - mirror::Class* resolved_class = dex_cache->GetResolvedType(type_idx); - if (resolved_class == NULL) { - stats_->TypeNotInDexCache(); - return false; - } - bool result = IsImageClass(ClassHelper(resolved_class).GetDescriptor()); - if (result) { + if (IsImage() && IsImageClass(dex_file.GetTypeDescriptor(dex_file.GetTypeId(type_idx)))) { + if (kIsDebugBuild) { + ScopedObjectAccess soa(Thread::Current()); + mirror::DexCache* dex_cache = Runtime::Current()->GetClassLinker()->FindDexCache(dex_file); + mirror::Class* resolved_class = dex_cache->GetResolvedType(type_idx); + CHECK(resolved_class != NULL); + } stats_->TypeInDexCache(); + return true; } else { stats_->TypeNotInDexCache(); + return false; } - return result; } bool CompilerDriver::CanAssumeStringIsPresentInDexCache(const DexFile& dex_file, |