diff options
| author | 2016-12-12 18:49:33 -0800 | |
|---|---|---|
| committer | 2016-12-12 18:51:26 -0800 | |
| commit | ceafe3551374f87d78650c90ee7e2957d82fa3fa (patch) | |
| tree | d354e19d3473b15568ce1ec31f39e8b15cfb652e | |
| parent | 7c73bf3518eea7544406eadfed6946411c54a267 (diff) | |
ART: Rewrite test 911 stack trace reporting
Return an array of arrays, which is easier to extend and doesn't
have the tight coupling of a collapsed array.
Bug: 31684812
Test: m test-art-host-run-test-911-get-stack-trace
Change-Id: I4221ef8135c7b76a50c1af25f6328f447cf40ab2
| -rw-r--r-- | test/911-get-stack-trace/expected.txt | 4 | ||||
| -rw-r--r-- | test/911-get-stack-trace/src/Main.java | 15 | ||||
| -rw-r--r-- | test/911-get-stack-trace/stack_trace.cc | 27 |
3 files changed, 27 insertions, 19 deletions
diff --git a/test/911-get-stack-trace/expected.txt b/test/911-get-stack-trace/expected.txt index 20bab7814e..409c318058 100644 --- a/test/911-get-stack-trace/expected.txt +++ b/test/911-get-stack-trace/expected.txt @@ -3,7 +3,7 @@ ################### From top --------- - getStackTrace (Ljava/lang/Thread;II)[Ljava/lang/String; + getStackTrace (Ljava/lang/Thread;II)[[Ljava/lang/String; print (Ljava/lang/Thread;II)V printOrWait (IILMain$ControlData;)V baz (IIILMain$ControlData;)Ljava/lang/Object; @@ -44,7 +44,7 @@ From top doTest ()V main ([Ljava/lang/String;)V --------- - getStackTrace (Ljava/lang/Thread;II)[Ljava/lang/String; + getStackTrace (Ljava/lang/Thread;II)[[Ljava/lang/String; print (Ljava/lang/Thread;II)V printOrWait (IILMain$ControlData;)V baz (IIILMain$ControlData;)Ljava/lang/Object; diff --git a/test/911-get-stack-trace/src/Main.java b/test/911-get-stack-trace/src/Main.java index df4501d338..722bee8056 100644 --- a/test/911-get-stack-trace/src/Main.java +++ b/test/911-get-stack-trace/src/Main.java @@ -109,13 +109,14 @@ public class Main { t.join(); } - public static void print(String[] stack) { + public static void print(String[][] stack) { System.out.println("---------"); - for (int i = 0; i < stack.length; i += 2) { - System.out.print(' '); - System.out.print(stack[i]); - System.out.print(' '); - System.out.println(stack[i + 1]); + for (String[] stackElement : stack) { + for (String part : stackElement) { + System.out.print(' '); + System.out.print(part); + } + System.out.println(); } } @@ -174,5 +175,5 @@ public class Main { volatile boolean stop = false; } - public static native String[] getStackTrace(Thread thread, int start, int max); + public static native String[][] getStackTrace(Thread thread, int start, int max); } diff --git a/test/911-get-stack-trace/stack_trace.cc b/test/911-get-stack-trace/stack_trace.cc index e7d9380469..d5627531c9 100644 --- a/test/911-get-stack-trace/stack_trace.cc +++ b/test/911-get-stack-trace/stack_trace.cc @@ -20,6 +20,7 @@ #include <stdio.h> #include "base/logging.h" +#include "base/macros.h" #include "jni.h" #include "openjdkjvmti/jvmti.h" #include "ScopedLocalRef.h" @@ -44,8 +45,7 @@ extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getStackTrace( } } - auto callback = [&](jint i) -> jstring { - size_t method_index = static_cast<size_t>(i) / 2; + auto callback = [&](jint method_index) -> jobjectArray { char* name; char* sig; char* gen; @@ -58,12 +58,18 @@ extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getStackTrace( return nullptr; } } - jstring callback_result; - if (i % 2 == 0) { - callback_result = name == nullptr ? nullptr : env->NewStringUTF(name); - } else { - callback_result = sig == nullptr ? nullptr : env->NewStringUTF(sig); - } + + auto inner_callback = [&](jint component_index) -> jstring { + switch (component_index) { + case 0: + return (name == nullptr) ? nullptr : env->NewStringUTF(name); + case 1: + return (sig == nullptr) ? nullptr : env->NewStringUTF(sig); + } + LOG(FATAL) << "Unreachable"; + UNREACHABLE(); + }; + jobjectArray inner_array = CreateObjectArray(env, 2, "java/lang/String", inner_callback); if (name != nullptr) { jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(name)); @@ -74,9 +80,10 @@ extern "C" JNIEXPORT jobjectArray JNICALL Java_Main_getStackTrace( if (gen != nullptr) { jvmti_env->Deallocate(reinterpret_cast<unsigned char*>(gen)); } - return callback_result; + + return inner_array; }; - return CreateObjectArray(env, 2 * count, "java/lang/String", callback); + return CreateObjectArray(env, count, "[Ljava/lang/String;", callback); } // Don't do anything |