summaryrefslogtreecommitdiff
path: root/runtime/interpreter/interpreter.h
diff options
context:
space:
mode:
author Aart Bik <ajcbik@google.com> 2016-05-05 15:10:42 -0700
committer Aart Bik <ajcbik@google.com> 2016-05-10 10:05:55 -0700
commit0122320f86ae004aa195d76814c52564d84ee632 (patch)
tree0284342034932f022a520aea87a86701cd0d4ffd /runtime/interpreter/interpreter.h
parentb0fca360a081eff1a44c6f055c628e2dba44c003 (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.h5
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.