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);
+        }
     }
 }