Revert "Make the JIT zygote memory shared."
This reverts commit 05f87217ddc9b4b9186710c0135b918f456c5aef.
Bug: 119800099
Bug: 136110523
Reason for revert: testWebview flaking
Change-Id: I96afa6bc9c56c4aaf5ed72ae370f6f69c096c559
diff --git a/runtime/jit/jit_code_cache.cc b/runtime/jit/jit_code_cache.cc
index d227cec..dd1dbea 100644
--- a/runtime/jit/jit_code_cache.cc
+++ b/runtime/jit/jit_code_cache.cc
@@ -206,10 +206,8 @@
if (is_zygote) {
// Zygote should never collect code to share the memory with the children.
jit_code_cache->garbage_collect_code_ = false;
- jit_code_cache->shared_region_ = std::move(region);
- } else {
- jit_code_cache->private_region_ = std::move(region);
}
+ jit_code_cache->private_region_ = std::move(region);
VLOG(jit) << "Created jit code cache: initial capacity="
<< PrettySize(initial_capacity)
@@ -385,8 +383,7 @@
return reinterpret_cast<const uint32_t*>(stack_map)[-1];
}
-static void DCheckRootsAreValid(const std::vector<Handle<mirror::Object>>& roots,
- bool is_shared_region)
+static void DCheckRootsAreValid(const std::vector<Handle<mirror::Object>>& roots)
REQUIRES(!Locks::intern_table_lock_) REQUIRES_SHARED(Locks::mutator_lock_) {
if (!kIsDebugBuild) {
return;
@@ -399,10 +396,6 @@
ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
CHECK(class_linker->GetInternTable()->LookupStrong(Thread::Current(), str) != nullptr);
}
- // Ensure that we don't put movable objects in the shared region.
- if (is_shared_region) {
- CHECK(!Runtime::Current()->GetHeap()->IsMovableObject(object.Get()));
- }
}
}
@@ -671,7 +664,7 @@
if (!method->IsNative()) {
// We need to do this before grabbing the lock_ because it needs to be able to see the string
// InternTable. Native methods do not have roots.
- DCheckRootsAreValid(roots, IsSharedRegion(*region));
+ DCheckRootsAreValid(roots);
}
size_t root_table_size = ComputeRootTableSize(roots.size());
@@ -1408,13 +1401,6 @@
bool retry_allocation)
// No thread safety analysis as we are using TryLock/Unlock explicitly.
NO_THREAD_SAFETY_ANALYSIS {
- // If we don't have a private region, we cannot allocate a profiling info.
- // A shared region doesn't support in general GC objects, which a profiling info
- // can reference.
- if (!private_region_.IsValid()) {
- return nullptr;
- }
-
ProfilingInfo* info = nullptr;
if (!retry_allocation) {
// If we are allocating for the interpreter, just try to lock, to avoid
@@ -1468,9 +1454,7 @@
}
void* JitCodeCache::MoreCore(const void* mspace, intptr_t increment) {
- return shared_region_.OwnsSpace(mspace)
- ? shared_region_.MoreCore(mspace, increment)
- : private_region_.MoreCore(mspace, increment);
+ return private_region_.MoreCore(mspace, increment);
}
void JitCodeCache::GetProfiledMethods(const std::set<std::string>& dex_base_locations,
@@ -1562,11 +1546,7 @@
return osr_code_map_.find(method) != osr_code_map_.end();
}
-bool JitCodeCache::NotifyCompilationOf(ArtMethod* method,
- Thread* self,
- bool osr,
- bool prejit,
- JitMemoryRegion* region) {
+bool JitCodeCache::NotifyCompilationOf(ArtMethod* method, Thread* self, bool osr, bool prejit) {
if (!osr && ContainsPc(method->GetEntryPointFromQuickCompiledCode())) {
return false;
}
@@ -1628,7 +1608,7 @@
ProfilingInfo* info = method->GetProfilingInfo(kRuntimePointerSize);
if (info == nullptr) {
// When prejitting, we don't allocate a profiling info.
- if (!prejit && !IsSharedRegion(*region)) {
+ if (!prejit) {
VLOG(jit) << method->PrettyMethod() << " needs a ProfilingInfo to be compiled";
// Because the counter is not atomic, there are some rare cases where we may not hit the
// threshold for creating the ProfilingInfo. Reset the counter now to "correct" this.
@@ -1737,19 +1717,13 @@
void JitCodeCache::PostForkChildAction(bool is_system_server, bool is_zygote) {
if (is_zygote) {
- // Don't create a private region for a child zygote. Regions are usually map shared
- // (to satisfy dual-view), and we don't want children of a child zygote to inherit it.
+ // Don't transition if this is for a child zygote.
return;
}
-
- if (private_region_.IsValid()) {
- // In case the zygote was running with its own private region (happens for
- // unit tests), move the region to the shared one.
- CHECK(!shared_region_.IsValid());
- std::swap(shared_region_, private_region_);
- }
MutexLock mu(Thread::Current(), *Locks::jit_lock_);
+ shared_region_ = std::move(private_region_);
+
// Reset all statistics to be specific to this process.
number_of_compilations_ = 0;
number_of_osr_compilations_ = 0;
@@ -1767,9 +1741,5 @@
}
}
-JitMemoryRegion* JitCodeCache::GetCurrentRegion() {
- return Runtime::Current()->IsZygote() ? &shared_region_ : &private_region_;
-}
-
} // namespace jit
} // namespace art