diff options
Diffstat (limited to 'runtime/jit/jit.cc')
| -rw-r--r-- | runtime/jit/jit.cc | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/runtime/jit/jit.cc b/runtime/jit/jit.cc index 4c1006360b..dac2e60987 100644 --- a/runtime/jit/jit.cc +++ b/runtime/jit/jit.cc @@ -114,7 +114,7 @@ JitOptions* JitOptions::CreateFromRuntimeArguments(const RuntimeArgumentMap& opt } else { jit_options->invoke_transition_weight_ = std::max( jit_options->warmup_threshold_ / Jit::kDefaultInvokeTransitionWeightRatio, - static_cast<size_t>(1));; + static_cast<size_t>(1)); } return jit_options; @@ -274,6 +274,15 @@ bool Jit::CompileMethod(ArtMethod* method, Thread* self, bool osr) { << ArtMethod::PrettyMethod(method_to_compile) << " osr=" << std::boolalpha << osr; } + if (kIsDebugBuild) { + if (self->IsExceptionPending()) { + mirror::Throwable* exception = self->GetException(); + LOG(FATAL) << "No pending exception expected after compiling " + << ArtMethod::PrettyMethod(method) + << ": " + << exception->Dump(); + } + } return success; } @@ -701,5 +710,24 @@ void Jit::WaitForCompilationToFinish(Thread* self) { } } +ScopedJitSuspend::ScopedJitSuspend() { + jit::Jit* jit = Runtime::Current()->GetJit(); + was_on_ = (jit != nullptr) && (jit->GetThreadPool() != nullptr); + if (was_on_) { + Thread* self = Thread::Current(); + jit->WaitForCompilationToFinish(self); + jit->GetThreadPool()->StopWorkers(self); + jit->WaitForCompilationToFinish(self); + } +} + +ScopedJitSuspend::~ScopedJitSuspend() { + if (was_on_) { + DCHECK(Runtime::Current()->GetJit() != nullptr); + DCHECK(Runtime::Current()->GetJit()->GetThreadPool() != nullptr); + Runtime::Current()->GetJit()->GetThreadPool()->StartWorkers(Thread::Current()); + } +} + } // namespace jit } // namespace art |