summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/988-method-trace/expected.txt82
-rw-r--r--test/988-method-trace/src/art/Test988.java10
-rw-r--r--test/988-method-trace/trace_fib.cc41
-rw-r--r--test/Android.bp1
4 files changed, 126 insertions, 8 deletions
diff --git a/test/988-method-trace/expected.txt b/test/988-method-trace/expected.txt
index 75ee112c60..b263308573 100644
--- a/test/988-method-trace/expected.txt
+++ b/test/988-method-trace/expected.txt
@@ -70,6 +70,27 @@ fibonacci(30)=832040
fibonacci(5)=5
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
+=> art.Test988$NativeOp()
+.=> public java.lang.Object()
+.<= public java.lang.Object() -> <null: null>
+<= art.Test988$NativeOp() -> <null: null>
+=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
+.=> public int art.Test988$NativeOp.applyAsInt(int)
+..=> static int art.Test988.nativeFibonacci(int)
+..<= static int art.Test988.nativeFibonacci(int) -> <class java.lang.Integer: 5>
+.<= public int art.Test988$NativeOp.applyAsInt(int) -> <class java.lang.Integer: 5>
+.=> public art.Test988$FibResult(java.lang.String,int,int)
+..=> public java.lang.Object()
+..<= public java.lang.Object() -> <null: null>
+.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
+.=> public boolean java.util.ArrayList.add(java.lang.Object)
+..=> private void java.util.ArrayList.ensureCapacityInternal(int)
+...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
+...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
+..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
+fibonacci(5)=5
+.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
+<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$IterOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
@@ -147,8 +168,8 @@ fibonacci(5)=5
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
art.Test988.iter_fibonacci(Test988.java:255)
art.Test988$IterOp.applyAsInt(Test988.java:250)
- art.Test988.doFibTest(Test988.java:378)
- art.Test988.run(Test988.java:336)
+ art.Test988.doFibTest(Test988.java:388)
+ art.Test988.run(Test988.java:344)
<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
@@ -167,8 +188,8 @@ fibonacci(5)=5
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
art.Test988.iter_fibonacci(Test988.java:255)
art.Test988$IterOp.applyAsInt(Test988.java:250)
- art.Test988.doFibTest(Test988.java:378)
- art.Test988.run(Test988.java:336)
+ art.Test988.doFibTest(Test988.java:388)
+ art.Test988.run(Test988.java:344)
<additional hidden frames>
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
@@ -250,8 +271,8 @@ fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
art.Test988.fibonacci(Test988.java:277)
art.Test988$RecurOp.applyAsInt(Test988.java:272)
- art.Test988.doFibTest(Test988.java:378)
- art.Test988.run(Test988.java:337)
+ art.Test988.doFibTest(Test988.java:388)
+ art.Test988.run(Test988.java:345)
<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
@@ -270,8 +291,53 @@ fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
art.Test988.fibonacci(Test988.java:277)
art.Test988$RecurOp.applyAsInt(Test988.java:272)
- art.Test988.doFibTest(Test988.java:378)
- art.Test988.run(Test988.java:337)
+ art.Test988.doFibTest(Test988.java:388)
+ art.Test988.run(Test988.java:345)
+ <additional hidden frames>
+
+.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
+<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
+=> art.Test988$NativeOp()
+.=> public java.lang.Object()
+.<= public java.lang.Object() -> <null: null>
+<= art.Test988$NativeOp() -> <null: null>
+=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
+.=> public int art.Test988$NativeOp.applyAsInt(int)
+..=> static int art.Test988.nativeFibonacci(int)
+...=> public java.lang.Error(java.lang.String)
+....=> public java.lang.Throwable(java.lang.String)
+.....=> public java.lang.Object()
+.....<= public java.lang.Object() -> <null: null>
+.....=> public static final java.util.List java.util.Collections.emptyList()
+.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
+.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
+......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
+......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
+.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: bad argument
+ art.Test988.nativeFibonacci(Native Method)
+ art.Test988$NativeOp.applyAsInt(Test988.java:287)
+ art.Test988.doFibTest(Test988.java:388)
+ art.Test988.run(Test988.java:346)
+ <additional hidden frames>
+>
+....<= public java.lang.Throwable(java.lang.String) -> <null: null>
+...<= public java.lang.Error(java.lang.String) -> <null: null>
+..<= static int art.Test988.nativeFibonacci(int) EXCEPTION
+.<= public int art.Test988$NativeOp.applyAsInt(int) EXCEPTION
+.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
+..=> public java.lang.Object()
+..<= public java.lang.Object() -> <null: null>
+.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
+.=> public boolean java.util.ArrayList.add(java.lang.Object)
+..=> private void java.util.ArrayList.ensureCapacityInternal(int)
+...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
+...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
+..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
+fibonacci(-19) -> java.lang.Error: bad argument
+ art.Test988.nativeFibonacci(Native Method)
+ art.Test988$NativeOp.applyAsInt(Test988.java:287)
+ art.Test988.doFibTest(Test988.java:388)
+ art.Test988.run(Test988.java:346)
<additional hidden frames>
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
diff --git a/test/988-method-trace/src/art/Test988.java b/test/988-method-trace/src/art/Test988.java
index 5720d1d87d..075e075c0f 100644
--- a/test/988-method-trace/src/art/Test988.java
+++ b/test/988-method-trace/src/art/Test988.java
@@ -282,6 +282,13 @@ public class Test988 {
}
}
+ static final class NativeOp implements IntUnaryOperator {
+ public int applyAsInt(int x) {
+ return nativeFibonacci(x);
+ }
+ }
+ static native int nativeFibonacci(int n);
+
static final class TestRunnableInvokeHandler implements InvocationHandler {
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
return null;
@@ -333,8 +340,10 @@ public class Test988 {
Thread.currentThread());
doFibTest(30, new IterOp());
doFibTest(5, new RecurOp());
+ doFibTest(5, new NativeOp());
doFibTest(-19, new IterOp());
doFibTest(-19, new RecurOp());
+ doFibTest(-19, new NativeOp());
runnable.run();
@@ -358,6 +367,7 @@ public class Test988 {
ArrayList.class.toString();
RecurOp.class.toString();
IterOp.class.toString();
+ NativeOp.class.toString();
StringBuilder.class.toString();
Runnable.class.toString();
TestRunnableInvokeHandler.class.toString();
diff --git a/test/988-method-trace/trace_fib.cc b/test/988-method-trace/trace_fib.cc
new file mode 100644
index 0000000000..682f273ac1
--- /dev/null
+++ b/test/988-method-trace/trace_fib.cc
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <jni.h>
+
+namespace art {
+namespace Test988MethodTrace {
+
+extern "C" JNIEXPORT jint JNICALL Java_art_Test988_nativeFibonacci(JNIEnv* env, jclass, jint n) {
+ if (n < 0) {
+ env->ThrowNew(env->FindClass("java/lang/Error"), "bad argument");
+ return -1;
+ } else if (n == 0) {
+ return 0;
+ }
+ jint x = 1;
+ jint y = 1;
+ for (jint i = 3; i <= n; i++) {
+ jint z = x + y;
+ x = y;
+ y = z;
+ }
+ return y;
+}
+
+} // namespace Test988MethodTrace
+} // namespace art
+
diff --git a/test/Android.bp b/test/Android.bp
index a3de382059..e2656516ef 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -262,6 +262,7 @@ art_cc_defaults {
"984-obsolete-invoke/obsolete_invoke.cc",
"986-native-method-bind/native_bind.cc",
"987-agent-bind/agent_bind.cc",
+ "988-method-trace/trace_fib.cc",
"989-method-trace-throw/method_trace.cc",
"991-field-trace-2/field_trace.cc",
"992-source-data/source_file.cc",