summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andreas Gampe <agampe@google.com> 2016-12-12 18:49:33 -0800
committer Andreas Gampe <agampe@google.com> 2016-12-12 18:51:26 -0800
commitceafe3551374f87d78650c90ee7e2957d82fa3fa (patch)
treed354e19d3473b15568ce1ec31f39e8b15cfb652e
parent7c73bf3518eea7544406eadfed6946411c54a267 (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.txt4
-rw-r--r--test/911-get-stack-trace/src/Main.java15
-rw-r--r--test/911-get-stack-trace/stack_trace.cc27
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