diff options
| -rw-r--r-- | test/988-method-trace/expected.txt | 82 | ||||
| -rw-r--r-- | test/988-method-trace/src/art/Test988.java | 10 | ||||
| -rw-r--r-- | test/988-method-trace/trace_fib.cc | 41 | ||||
| -rw-r--r-- | test/Android.bp | 1 |
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", |