Change ClassLinker::dex_caches_ from list to unordered_map.
Move the DexFile* pointer from struct field out to map key.
This makes it easy and fast to find DexCache from DexFile.
Add check that given DexFile* is registered only once.
Test: test.py -b -r --host --64
Test: generated images are identical as before
Change-Id: I84a6d6cbf963af2408abe5bb5e4c99d0ca11df78
diff --git a/runtime/class_linker_test.cc b/runtime/class_linker_test.cc
index e0f498d..035a9cb 100644
--- a/runtime/class_linker_test.cc
+++ b/runtime/class_linker_test.cc
@@ -1520,7 +1520,8 @@
MutableHandle<mirror::DexCache> dex_cache(hs.NewHandle<mirror::DexCache>(nullptr));
{
ReaderMutexLock mu(soa.Self(), *Locks::dex_lock_);
- for (const ClassLinker::DexCacheData& data : class_linker->GetDexCachesData()) {
+ for (const auto& entry : class_linker->GetDexCachesData()) {
+ const ClassLinker::DexCacheData& data = entry.second;
dex_cache.Assign(soa.Self()->DecodeJObject(data.weak_root)->AsDexCache());
if (dex_cache != nullptr) {
break;