Fix test to not expect ordering of events across threads
2246-trace-stream tests for events on main and a test thread. There can
be some non-determinism in the order of events across threads. Fix the
test to print events corresponding to the test thread followed by main
thread.
Bug: 275117853
Test: art/test.py -t 2246
Change-Id: Ifaf91693c91301dab03c213c227df2866318961d
diff --git a/test/2246-trace-stream/expected-stdout.txt b/test/2246-trace-stream/expected-stdout.txt
index 90706b5..d6ad93c 100644
--- a/test/2246-trace-stream/expected-stdout.txt
+++ b/test/2246-trace-stream/expected-stdout.txt
@@ -73,30 +73,6 @@
...<< main Main doSomeWorkThrow ()V Main.java
...>> main Main$VMDebug $noinline$stopMethodTracing ()V Main.java
***** non streaming test *******
-.>> main Main main ([Ljava/lang/String;)V Main.java
-..>> main Main testTracing (ZLBaseTraceParser;I)V Main.java
-...>> main Main$VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V Main.java
-....>> main java.lang.reflect.Method invoke (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; Method.java
-.....>> main dalvik.system.VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V VMDebug.java
-......>> main dalvik.system.VMDebug startMethodTracingFd (Ljava/lang/String;IIIZIZ)V VMDebug.java
-......<< main dalvik.system.VMDebug startMethodTracingFd (Ljava/lang/String;IIIZIZ)V VMDebug.java
-.....<< main dalvik.system.VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V VMDebug.java
-....<< main java.lang.reflect.Method invoke (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; Method.java
-...<< main Main$VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V Main.java
-...>> main java.lang.Thread start ()V Thread.java
-....>> main java.lang.ThreadGroup add (Ljava/lang/Thread;)V ThreadGroup.java
-....<< main java.lang.ThreadGroup add (Ljava/lang/Thread;)V ThreadGroup.java
-....>> main java.lang.Thread nativeCreate (Ljava/lang/Thread;JZ)V Thread.java
-....<< main java.lang.Thread nativeCreate (Ljava/lang/Thread;JZ)V Thread.java
-...<< main java.lang.Thread start ()V Thread.java
-...>> main java.lang.Thread join ()V Thread.java
-....>> main java.lang.Thread join (J)V Thread.java
-.....>> main java.lang.System currentTimeMillis ()J System.java
-.....<< main java.lang.System currentTimeMillis ()J System.java
-.....>> main java.lang.Thread isAlive ()Z Thread.java
-.....<< main java.lang.Thread isAlive ()Z Thread.java
-.....>> main java.lang.Object wait (J)V Object.java
-......>> main java.lang.Object wait (JI)V Object.java
.>> TestThread2246 java.lang.Thread run ()V Thread.java
..>> TestThread2246 Main$$ExternalSyntheticLambda0 run ()V D8$$SyntheticClass
...>> TestThread2246 Main lambda$testTracing$0 ()V Main.java
@@ -121,6 +97,30 @@
...<< TestThread2246 java.lang.System arraycopy (Ljava/lang/Object;ILjava/lang/Object;II)V System.java
..<< TestThread2246 java.lang.ThreadGroup remove (Ljava/lang/Thread;)V ThreadGroup.java
.<< TestThread2246 java.lang.ThreadGroup threadTerminated (Ljava/lang/Thread;)V ThreadGroup.java
+.>> main Main main ([Ljava/lang/String;)V Main.java
+..>> main Main testTracing (ZLBaseTraceParser;I)V Main.java
+...>> main Main$VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V Main.java
+....>> main java.lang.reflect.Method invoke (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; Method.java
+.....>> main dalvik.system.VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V VMDebug.java
+......>> main dalvik.system.VMDebug startMethodTracingFd (Ljava/lang/String;IIIZIZ)V VMDebug.java
+......<< main dalvik.system.VMDebug startMethodTracingFd (Ljava/lang/String;IIIZIZ)V VMDebug.java
+.....<< main dalvik.system.VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V VMDebug.java
+....<< main java.lang.reflect.Method invoke (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; Method.java
+...<< main Main$VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V Main.java
+...>> main java.lang.Thread start ()V Thread.java
+....>> main java.lang.ThreadGroup add (Ljava/lang/Thread;)V ThreadGroup.java
+....<< main java.lang.ThreadGroup add (Ljava/lang/Thread;)V ThreadGroup.java
+....>> main java.lang.Thread nativeCreate (Ljava/lang/Thread;JZ)V Thread.java
+....<< main java.lang.Thread nativeCreate (Ljava/lang/Thread;JZ)V Thread.java
+...<< main java.lang.Thread start ()V Thread.java
+...>> main java.lang.Thread join ()V Thread.java
+....>> main java.lang.Thread join (J)V Thread.java
+.....>> main java.lang.System currentTimeMillis ()J System.java
+.....<< main java.lang.System currentTimeMillis ()J System.java
+.....>> main java.lang.Thread isAlive ()Z Thread.java
+.....<< main java.lang.Thread isAlive ()Z Thread.java
+.....>> main java.lang.Object wait (J)V Object.java
+......>> main java.lang.Object wait (JI)V Object.java
......<< main java.lang.Object wait (JI)V Object.java
.....<< main java.lang.Object wait (J)V Object.java
.....>> main java.lang.Thread isAlive ()Z Thread.java
diff --git a/test/2246-trace-stream/src/BaseTraceParser.java b/test/2246-trace-stream/src/BaseTraceParser.java
index 6c739d3..c4b14aa 100644
--- a/test/2246-trace-stream/src/BaseTraceParser.java
+++ b/test/2246-trace-stream/src/BaseTraceParser.java
@@ -35,6 +35,7 @@
methodIdMap = new HashMap<Integer, String>();
threadIdMap = new HashMap<Integer, String>();
nestingLevelMap = new HashMap<Integer, Integer>();
+ threadEventsMap = new HashMap<String, String>();
}
public void closeFile() throws IOException {
@@ -186,6 +187,15 @@
return str;
}
+ public void UpdateThreadEvents(int threadId, String entry) {
+ String threadName = threadIdMap.get(threadId);
+ if (!threadEventsMap.containsKey(threadName)) {
+ threadEventsMap.put(threadName, entry);
+ return;
+ }
+ threadEventsMap.put(threadName, threadEventsMap.get(threadName) + "\n" + entry);
+ }
+
public abstract void CheckTraceFileFormat(File traceFile, int expectedVersion)
throws Exception;
@@ -193,6 +203,7 @@
HashMap<Integer, String> methodIdMap;
HashMap<Integer, String> threadIdMap;
HashMap<Integer, Integer> nestingLevelMap;
+ HashMap<String, String> threadEventsMap;
int recordSize = 0;
int traceFormatVersion = 0;
}
diff --git a/test/2246-trace-stream/src/NonStreamTraceParser.java b/test/2246-trace-stream/src/NonStreamTraceParser.java
index db0450f..7763c9c 100644
--- a/test/2246-trace-stream/src/NonStreamTraceParser.java
+++ b/test/2246-trace-stream/src/NonStreamTraceParser.java
@@ -89,12 +89,17 @@
// Ignore events after method tracing was stopped. The code that is executed
// later could be non-deterministic.
if (!seenStopTracingMethod) {
- System.out.println(eventString);
+ UpdateThreadEvents(threadId, eventString);
}
if (eventString.contains("Main$VMDebug $noinline$stopMethodTracing")) {
seenStopTracingMethod = true;
}
}
closeFile();
+
+ // Printout the events.
+ for (String str : threadEventsMap.values()) {
+ System.out.println(str);
+ }
}
}
diff --git a/test/2246-trace-stream/src/StreamTraceParser.java b/test/2246-trace-stream/src/StreamTraceParser.java
index 32f86e3..c723d3c 100644
--- a/test/2246-trace-stream/src/StreamTraceParser.java
+++ b/test/2246-trace-stream/src/StreamTraceParser.java
@@ -39,14 +39,15 @@
hasEntries = false;
break;
default:
- String eventString = ProcessEventEntry(headerType);
- if (ShouldIgnoreThread(headerType)) {
+ int threadId = headerType;
+ String eventString = ProcessEventEntry(threadId);
+ if (ShouldIgnoreThread(threadId)) {
break;
}
// Ignore events after method tracing was stopped. The code that is executed
// later could be non-deterministic.
if (!seenStopTracingMethod) {
- System.out.println(eventString);
+ UpdateThreadEvents(threadId, eventString);
}
if (eventString.contains("Main$VMDebug $noinline$stopMethodTracing")) {
seenStopTracingMethod = true;
@@ -54,5 +55,10 @@
}
}
closeFile();
+
+ // Printout the events.
+ for (String str : threadEventsMap.values()) {
+ System.out.println(str);
+ }
}
}