diff options
| -rw-r--r-- | test/911-get-stack-trace/expected.txt | 70 | ||||
| -rw-r--r-- | test/911-get-stack-trace/src/art/PrintThread.java | 22 | ||||
| -rw-r--r-- | test/911-get-stack-trace/src/art/Test911.java | 33 | ||||
| -rwxr-xr-x | test/testrunner/run_build_test_target.py | 6 | ||||
| -rw-r--r-- | test/valgrind-suppressions.txt | 6 | ||||
| -rw-r--r-- | test/valgrind-target-suppressions.txt | 7 |
6 files changed, 93 insertions, 51 deletions
diff --git a/test/911-get-stack-trace/expected.txt b/test/911-get-stack-trace/expected.txt index 2318414010..fb5f71bda2 100644 --- a/test/911-get-stack-trace/expected.txt +++ b/test/911-get-stack-trace/expected.txt @@ -4,7 +4,7 @@ From top --------- getStackTrace (Ljava/lang/Thread;II)[[Ljava/lang/String; -1 -2 - print (Ljava/lang/Thread;II)V 0 36 + print (Ljava/lang/Thread;II)V 0 38 printOrWait (IILart/ControlData;)V 6 41 baz (IIILart/ControlData;)Ljava/lang/Object; 2 32 bar (IIILart/ControlData;)J 0 26 @@ -22,10 +22,9 @@ From top bar (IIILart/ControlData;)J 0 26 foo (IIILart/ControlData;)I 0 21 doTest ()V 38 25 - run ()V 20 26 - main ([Ljava/lang/String;)V 0 19 + run ()V 0 30 --------- - print (Ljava/lang/Thread;II)V 0 36 + print (Ljava/lang/Thread;II)V 0 38 printOrWait (IILart/ControlData;)V 6 41 baz (IIILart/ControlData;)Ljava/lang/Object; 2 32 bar (IIILart/ControlData;)J 0 26 @@ -43,11 +42,10 @@ From top bar (IIILart/ControlData;)J 0 26 foo (IIILart/ControlData;)I 0 21 doTest ()V 42 26 - run ()V 20 26 - main ([Ljava/lang/String;)V 0 19 + run ()V 0 30 --------- getStackTrace (Ljava/lang/Thread;II)[[Ljava/lang/String; -1 -2 - print (Ljava/lang/Thread;II)V 0 36 + print (Ljava/lang/Thread;II)V 0 38 printOrWait (IILart/ControlData;)V 6 41 baz (IIILart/ControlData;)Ljava/lang/Object; 2 32 bar (IIILart/ControlData;)J 0 26 @@ -59,19 +57,19 @@ From top baz (IIILart/ControlData;)Ljava/lang/Object; 9 34 From bottom --------- - main ([Ljava/lang/String;)V 0 19 + run ()V 0 30 --------- + baz (IIILart/ControlData;)Ljava/lang/Object; 9 34 bar (IIILart/ControlData;)J 0 26 foo (IIILart/ControlData;)I 0 21 doTest ()V 65 32 - run ()V 20 26 - main ([Ljava/lang/String;)V 0 19 + run ()V 0 30 --------- + bar (IIILart/ControlData;)J 0 26 foo (IIILart/ControlData;)I 0 21 baz (IIILart/ControlData;)Ljava/lang/Object; 9 34 bar (IIILart/ControlData;)J 0 26 foo (IIILart/ControlData;)I 0 21 - doTest ()V 69 33 ################################ ### Other thread (suspended) ### @@ -258,9 +256,12 @@ ReferenceQueueDaemon Signal Catcher --------- -main +Test911 --------- +main +<not printed> +--------- AllTraces Thread 0 wait ()V -1 -2 printOrWait (IILart/ControlData;)V 24 47 @@ -356,14 +357,16 @@ ReferenceQueueDaemon Signal Catcher --------- -main +Test911 getAllStackTraces (I)[[Ljava/lang/Object; -1 -2 printAll (I)V 0 75 doTest ()V 128 59 - run ()V 44 38 - main ([Ljava/lang/String;)V 0 19 + run ()V 24 42 --------- +main +<not printed> +--------- AllTraces Thread 0 wait ()V -1 -2 printOrWait (IILart/ControlData;)V 24 47 @@ -589,18 +592,23 @@ ReferenceQueueDaemon Signal Catcher --------- -main +Test911 getAllStackTraces (I)[[Ljava/lang/Object; -1 -2 printAll (I)V 0 75 doTest ()V 133 61 - run ()V 44 38 - main ([Ljava/lang/String;)V 0 19 + run ()V 24 42 +--------- +main +<not printed> ######################################## ### Other select threads (suspended) ### ######################################## --------- +Test911 + +--------- ThreadListTraces Thread 0 --------- @@ -616,7 +624,11 @@ ThreadListTraces Thread 6 ThreadListTraces Thread 8 --------- -main +Test911 + getThreadListStackTraces ([Ljava/lang/Thread;I)[[Ljava/lang/Object; -1 -2 + printList ([Ljava/lang/Thread;I)V 0 68 + doTest ()V 116 54 + run ()V 32 46 --------- ThreadListTraces Thread 0 @@ -659,12 +671,11 @@ ThreadListTraces Thread 8 foo (IIILart/ControlData;)I 0 21 --------- -main +Test911 getThreadListStackTraces ([Ljava/lang/Thread;I)[[Ljava/lang/Object; -1 -2 printList ([Ljava/lang/Thread;I)V 0 68 - doTest ()V 116 54 - run ()V 52 42 - main ([Ljava/lang/String;)V 0 19 + doTest ()V 121 56 + run ()V 32 46 --------- ThreadListTraces Thread 0 @@ -771,25 +782,16 @@ ThreadListTraces Thread 8 foo (IIILart/ControlData;)I 0 21 run ()V 4 37 ---------- -main - getThreadListStackTraces ([Ljava/lang/Thread;I)[[Ljava/lang/Object; -1 -2 - printList ([Ljava/lang/Thread;I)V 0 68 - doTest ()V 121 56 - run ()V 52 42 - main ([Ljava/lang/String;)V 0 19 - ################### ### Same thread ### ################### -5 +4 JVMTI_ERROR_ILLEGAL_ARGUMENT [public static native java.lang.Object[] art.Frames.getFrameLocation(java.lang.Thread,int), ffffffff] [public static void art.Frames.doTestSameThread(), 38] [public static void art.Frames.doTest() throws java.lang.Exception, 0] -[public static void art.Test911.run() throws java.lang.Exception, 3c] -[public static void Main.main(java.lang.String[]) throws java.lang.Exception, 0] +[public void art.Test911$1.run(), 28] JVMTI_ERROR_NO_MORE_FRAMES ################################ diff --git a/test/911-get-stack-trace/src/art/PrintThread.java b/test/911-get-stack-trace/src/art/PrintThread.java index de1da9c8a6..f50a66b963 100644 --- a/test/911-get-stack-trace/src/art/PrintThread.java +++ b/test/911-get-stack-trace/src/art/PrintThread.java @@ -19,6 +19,8 @@ package art; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class PrintThread { public static void print(String[][] stack) { @@ -36,6 +38,20 @@ public class PrintThread { print(getStackTrace(t, start, max)); } + // We have to ignore some threads when printing all stack traces. These are threads that may or + // may not exist depending on the environment. + public final static String IGNORE_THREAD_NAME_REGEX = + "Binder:|RenderThread|hwuiTask|Jit thread pool worker|Instr:|JDWP|Profile Saver|main"; + public final static Matcher IGNORE_THREADS = + Pattern.compile(IGNORE_THREAD_NAME_REGEX).matcher(""); + + // We have to skip the stack of some threads when printing all stack traces. These are threads + // that may have a different call stack (e.g., when run as an app), or may be in a + // non-deterministic state. + public final static String CUT_STACK_THREAD_NAME_REGEX = "Daemon|main"; + public final static Matcher CUT_STACK_THREADS = + Pattern.compile(CUT_STACK_THREAD_NAME_REGEX).matcher(""); + public static void printAll(Object[][] stacks) { List<String> stringified = new ArrayList<String>(stacks.length); @@ -43,11 +59,11 @@ public class PrintThread { Thread t = (Thread)stackInfo[0]; String name = (t != null) ? t.getName() : "null"; String stackSerialization; - if (name.contains("Daemon")) { + if (CUT_STACK_THREADS.reset(name).find()) { // Do not print daemon stacks, as they're non-deterministic. stackSerialization = "<not printed>"; - } else if (name.startsWith("Jit thread pool worker")) { - // Skip JIT thread pool. It may or may not be there depending on configuration. + } else if (IGNORE_THREADS.reset(name).find()) { + // Skip IGNORE_THREADS. continue; } else { StringBuilder sb = new StringBuilder(); diff --git a/test/911-get-stack-trace/src/art/Test911.java b/test/911-get-stack-trace/src/art/Test911.java index 71a5196c22..ee5936823b 100644 --- a/test/911-get-stack-trace/src/art/Test911.java +++ b/test/911-get-stack-trace/src/art/Test911.java @@ -23,27 +23,38 @@ public class Test911 { Main.bindAgentJNIForClass(PrintThread.class); Main.bindAgentJNIForClass(ThreadListTraces.class); - SameThread.doTest(); + Thread t = new Thread("Test911") { + @Override + public void run() { + try { + SameThread.doTest(); - System.out.println(); + System.out.println(); - OtherThread.doTestOtherThreadWait(); + OtherThread.doTestOtherThreadWait(); - System.out.println(); + System.out.println(); - OtherThread.doTestOtherThreadBusyLoop(); + OtherThread.doTestOtherThreadBusyLoop(); - System.out.println(); + System.out.println(); - AllTraces.doTest(); + AllTraces.doTest(); - System.out.println(); + System.out.println(); - ThreadListTraces.doTest(); + ThreadListTraces.doTest(); - System.out.println(); + System.out.println(); - Frames.doTest(); + Frames.doTest(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }; + t.start(); + t.join(); System.out.println("Done"); } diff --git a/test/testrunner/run_build_test_target.py b/test/testrunner/run_build_test_target.py index 0ab50afa40..b1274c901a 100755 --- a/test/testrunner/run_build_test_target.py +++ b/test/testrunner/run_build_test_target.py @@ -62,7 +62,7 @@ custom_env['SOONG_ALLOW_MISSING_DEPENDENCIES'] = 'true' print custom_env os.environ.update(custom_env) -if target.get('make'): +if target.has_key('make'): build_command = 'make' build_command += ' -j' + str(n_threads) build_command += ' -C ' + env.ANDROID_BUILD_TOP @@ -74,7 +74,7 @@ if target.get('make'): if subprocess.call(build_command.split()): sys.exit(1) -if target.get('golem'): +if target.has_key('golem'): machine_type = target.get('golem') # use art-opt-cc by default since it mimics the default preopt config. default_golem_config = 'art-opt-cc' @@ -92,7 +92,7 @@ if target.get('golem'): if subprocess.call(cmd): sys.exit(1) -if target.get('run-test'): +if target.has_key('run-test'): run_test_command = [os.path.join(env.ANDROID_BUILD_TOP, 'art/test/testrunner/testrunner.py')] run_test_command += target.get('run-test', []) diff --git a/test/valgrind-suppressions.txt b/test/valgrind-suppressions.txt index c775f98b70..086a856f51 100644 --- a/test/valgrind-suppressions.txt +++ b/test/valgrind-suppressions.txt @@ -69,3 +69,9 @@ fun:_ZN12BacktraceMap6CreateEib } +{ + process_vm_readv + Memcheck:Param + process_vm_readv(lvec[...]) + fun:process_vm_readv +} diff --git a/test/valgrind-target-suppressions.txt b/test/valgrind-target-suppressions.txt index 452a17412a..0d63a1c7aa 100644 --- a/test/valgrind-target-suppressions.txt +++ b/test/valgrind-target-suppressions.txt @@ -67,3 +67,10 @@ fun:msync fun:_ZN3art6MemMap11MapInternalEPvmiiilb } + +{ + process_vm_readv + Memcheck:Param + process_vm_readv(lvec[...]) + fun:process_vm_readv +} |