diff options
| author | 2016-05-05 15:10:42 -0700 | |
|---|---|---|
| committer | 2016-05-10 10:05:55 -0700 | |
| commit | 0122320f86ae004aa195d76814c52564d84ee632 (patch) | |
| tree | 0284342034932f022a520aea87a86701cd0d4ffd /runtime/interpreter/interpreter.h | |
| parent | b0fca360a081eff1a44c6f055c628e2dba44c003 (diff) | |
Break the debug cycle!
Rationale:
When entering the path that implements method invocation,
it is possible for the interpreter and JIT to cycle around
trying to interpret or compile a method, never making a
decision. This bug fix avoids such cycling with a minimum
of extra runtime overhead.
BUG=28537292
Change-Id: If805b7bc0279019d0ebf322ddd17cb57a9e884eb
Diffstat (limited to 'runtime/interpreter/interpreter.h')
| -rw-r--r-- | runtime/interpreter/interpreter.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/runtime/interpreter/interpreter.h b/runtime/interpreter/interpreter.h index 6353a9b7bf..bf4bcff856 100644 --- a/runtime/interpreter/interpreter.h +++ b/runtime/interpreter/interpreter.h @@ -33,8 +33,11 @@ class Thread; namespace interpreter { // Called by ArtMethod::Invoke, shadow frames arguments are taken from the args array. +// The optional stay_in_interpreter parameter (false by default) can be used by clients to +// explicitly force interpretation in the remaining path that implements method invocation. extern void EnterInterpreterFromInvoke(Thread* self, ArtMethod* method, - mirror::Object* receiver, uint32_t* args, JValue* result) + mirror::Object* receiver, uint32_t* args, JValue* result, + bool stay_in_interpreter = false) SHARED_REQUIRES(Locks::mutator_lock_); // 'from_code' denotes whether the deoptimization was explicitly triggered by compiled code. |