Update test to not trace thread start / join

Thread start / join produce slightly non-deterministic output depending
on the thread execution order. Calls to Thread.wait and Thread.isAlive
were missing in some traces occasionally. This CL splits the tracing
into two phases so that we can avoid tracing thread start / join for
more deterministic output

Bug: 259258187
Test: art/test.py -t 2246
Change-Id: I8c34832841293bec2921190229aa0a9aa1d7ba3f
diff --git a/test/2246-trace-stream/expected-stdout.txt b/test/2246-trace-stream/expected-stdout.txt
index d6ad93c..02139f3 100644
--- a/test/2246-trace-stream/expected-stdout.txt
+++ b/test/2246-trace-stream/expected-stdout.txt
@@ -1,7 +1,15 @@
 ***** streaming test *******
 .>> TestThread2246 java.lang.Thread run ()V Thread.java
 ..>> TestThread2246 Main$$ExternalSyntheticLambda0 run ()V D8$$SyntheticClass
-...>> TestThread2246 Main lambda$testTracing$0 ()V Main.java
+...>> TestThread2246 Main lambda$testTracing$0 (Ljava/io/FileOutputStream;ZLBaseTraceParser;I)V Main.java
+....>> TestThread2246 Main$VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V Main.java
+.....>> TestThread2246 java.lang.reflect.Method invoke (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; Method.java
+......>> TestThread2246 dalvik.system.VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V VMDebug.java
+.......>> TestThread2246 dalvik.system.VMDebug startMethodTracingFd (Ljava/lang/String;IIIZIZ)V VMDebug.java
+.......<< TestThread2246 dalvik.system.VMDebug startMethodTracingFd (Ljava/lang/String;IIIZIZ)V VMDebug.java
+......<< TestThread2246 dalvik.system.VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V VMDebug.java
+.....<< TestThread2246 java.lang.reflect.Method invoke (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; Method.java
+....<< TestThread2246 Main$VMDebug startMethodTracing (Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V Main.java
 ....>> TestThread2246 Main <init> ()V Main.java
 .....>> TestThread2246 java.lang.Object <init> ()V Object.java
 .....<< TestThread2246 java.lang.Object <init> ()V Object.java
@@ -14,9 +22,13 @@
 .....>> TestThread2246 Main callLeafFunction ()V Main.java
 .....<< TestThread2246 Main callLeafFunction ()V Main.java
 ....<< TestThread2246 Main $noinline$doSomeWork ()V Main.java
-...<< TestThread2246 Main lambda$testTracing$0 ()V Main.java
-..<< TestThread2246 Main$$ExternalSyntheticLambda0 run ()V D8$$SyntheticClass
-.<< TestThread2246 java.lang.Thread run ()V Thread.java
+....>> TestThread2246 Main$VMDebug $noinline$stopMethodTracing ()V Main.java
+.>> main Main main ([Ljava/lang/String;)V Main.java
+..>> main Main testTracing (ZLBaseTraceParser;I)V Main.java
+...>> main java.lang.Thread join ()V Thread.java
+....>> main java.lang.Thread join (J)V Thread.java
+.....>> main java.lang.Object wait (J)V Object.java
+......>> main java.lang.Object wait (JI)V Object.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
@@ -27,26 +39,6 @@
 .....<< 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
-.....<< main java.lang.Thread isAlive ()Z Thread.java
-....<< main java.lang.Thread join (J)V Thread.java
-...<< main java.lang.Thread join ()V Thread.java
 ...>> main Main $noinline$doSomeWork ()V Main.java
 ....>> main Main callOuterFunction ()V Main.java
 .....>> main Main callLeafFunction ()V Main.java
@@ -75,7 +67,15 @@
 ***** non streaming test *******
 .>> TestThread2246 java.lang.Thread	run	()V	Thread.java
 ..>> TestThread2246 Main$$ExternalSyntheticLambda0	run	()V	D8$$SyntheticClass
-...>> TestThread2246 Main	lambda$testTracing$0	()V	Main.java
+...>> TestThread2246 Main	lambda$testTracing$0	(Ljava/io/FileOutputStream;ZLBaseTraceParser;I)V	Main.java
+....>> TestThread2246 Main$VMDebug	startMethodTracing	(Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V	Main.java
+.....>> TestThread2246 java.lang.reflect.Method	invoke	(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;	Method.java
+......>> TestThread2246 dalvik.system.VMDebug	startMethodTracing	(Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V	VMDebug.java
+.......>> TestThread2246 dalvik.system.VMDebug	startMethodTracingFd	(Ljava/lang/String;IIIZIZ)V	VMDebug.java
+.......<< TestThread2246 dalvik.system.VMDebug	startMethodTracingFd	(Ljava/lang/String;IIIZIZ)V	VMDebug.java
+......<< TestThread2246 dalvik.system.VMDebug	startMethodTracing	(Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V	VMDebug.java
+.....<< TestThread2246 java.lang.reflect.Method	invoke	(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;	Method.java
+....<< TestThread2246 Main$VMDebug	startMethodTracing	(Ljava/lang/String;Ljava/io/FileDescriptor;IIZIZ)V	Main.java
 ....>> TestThread2246 Main	<init>	()V	Main.java
 .....>> TestThread2246 java.lang.Object	<init>	()V	Object.java
 .....<< TestThread2246 java.lang.Object	<init>	()V	Object.java
@@ -88,15 +88,15 @@
 .....>> TestThread2246 Main	callLeafFunction	()V	Main.java
 .....<< TestThread2246 Main	callLeafFunction	()V	Main.java
 ....<< TestThread2246 Main	$noinline$doSomeWork	()V	Main.java
-...<< TestThread2246 Main	lambda$testTracing$0	()V	Main.java
-..<< TestThread2246 Main$$ExternalSyntheticLambda0	run	()V	D8$$SyntheticClass
-.<< TestThread2246 java.lang.Thread	run	()V	Thread.java
-.>> TestThread2246 java.lang.ThreadGroup	threadTerminated	(Ljava/lang/Thread;)V	ThreadGroup.java
-..>> TestThread2246 java.lang.ThreadGroup	remove	(Ljava/lang/Thread;)V	ThreadGroup.java
-...>> TestThread2246 java.lang.System	arraycopy	(Ljava/lang/Object;ILjava/lang/Object;II)V	System.java
-...<< 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
+....>> TestThread2246 Main$VMDebug	$noinline$stopMethodTracing	()V	Main.java
+.....>> TestThread2246 java.lang.reflect.Method	invoke	(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;	Method.java
+......>> TestThread2246 dalvik.system.VMDebug	stopMethodTracing	()V	VMDebug.java
+.>> main Main	main	([Ljava/lang/String;)V	Main.java
+..>> main Main	testTracing	(ZLBaseTraceParser;I)V	Main.java
+...>> main java.lang.Thread	join	()V	Thread.java
+....>> main java.lang.Thread	join	(J)V	Thread.java
+.....>> main java.lang.Object	wait	(J)V	Object.java
+......>> main java.lang.Object	wait	(JI)V	Object.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
@@ -107,26 +107,6 @@
 .....<< 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
-.....<< main java.lang.Thread	isAlive	()Z	Thread.java
-....<< main java.lang.Thread	join	(J)V	Thread.java
-...<< main java.lang.Thread	join	()V	Thread.java
 ...>> main Main	$noinline$doSomeWork	()V	Main.java
 ....>> main Main	callOuterFunction	()V	Main.java
 .....>> main Main	callLeafFunction	()V	Main.java
diff --git a/test/2246-trace-stream/src/Main.java b/test/2246-trace-stream/src/Main.java
index daada7d..e76f1bd 100644
--- a/test/2246-trace-stream/src/Main.java
+++ b/test/2246-trace-stream/src/Main.java
@@ -47,22 +47,38 @@
         FileOutputStream out_file = new FileOutputStream(file);
         Main m = new Main();
         Thread t = new Thread(() -> {
-            Main m1 = new Main();
-            m1.$noinline$doSomeWork();
+            try {
+                VMDebug.startMethodTracing(
+                        file.getPath(), out_file.getFD(), 0, 0, false, 0, streaming);
+                Main m1 = new Main();
+                m1.$noinline$doSomeWork();
+                VMDebug.$noinline$stopMethodTracing();
+                out_file.close();
+                parser.CheckTraceFileFormat(file, expected_version);
+                file.delete();
+            } catch (Exception e) {
+                System.out.println("Exception in thread " + e);
+                e.printStackTrace();
+            }
         }, "TestThread2246");
         try {
             if (VMDebug.getMethodTracingMode() != 0) {
                 VMDebug.$noinline$stopMethodTracing();
             }
 
-            VMDebug.startMethodTracing(file.getPath(), out_file.getFD(), 0, 0, false, 0, streaming);
             t.start();
             t.join();
+
+            file = createTempFile();
+            FileOutputStream main_out_file = new FileOutputStream(file);
+            VMDebug.startMethodTracing(
+                    file.getPath(), main_out_file.getFD(), 0, 0, false, 0, streaming);
             m.$noinline$doSomeWork();
             m.doSomeWorkThrow();
             VMDebug.$noinline$stopMethodTracing();
-            out_file.close();
+            main_out_file.close();
             parser.CheckTraceFileFormat(file, expected_version);
+            file.delete();
         } finally {
             if (out_file != null) {
                 out_file.close();