Add a test for method tracing using only wall clock time

Wall clock follows a slightly different path that uses timestamp
counters so also test for method tracing using only wall clock time.

Bug: 259258187
Test: art/test.py -t 2246
Change-Id: Ifd66267f2e48d9063eaaac91aa0ee2ccf28e8a54
diff --git a/test/2246-trace-stream/expected-stdout.txt b/test/2246-trace-stream/expected-stdout.txt
index d7bb83f..37f4aea 100644
--- a/test/2246-trace-stream/expected-stdout.txt
+++ b/test/2246-trace-stream/expected-stdout.txt
@@ -1,7 +1,7 @@
-***** streaming test *******
+***** streaming test - dual clock *******
 .>> TestThread2246 java.lang.Thread run ()V Thread.java
 ..>> TestThread2246 Main$$ExternalSyntheticLambda0 run ()V D8$$SyntheticClass
-...>> TestThread2246 Main lambda$testTracing$0 (ZLBaseTraceParser;I)V Main.java
+...>> TestThread2246 Main lambda$testTracing$0 (IZLBaseTraceParser;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
@@ -24,7 +24,7 @@
 ....<< TestThread2246 Main $noinline$doSomeWork ()V Main.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 Main testTracing (ZILBaseTraceParser;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
@@ -58,10 +58,70 @@
 ....<<E main Main callThrowFunction ()V Main.java
 ...<< main Main doSomeWorkThrow ()V Main.java
 ...>> main Main$VMDebug $noinline$stopMethodTracing ()V Main.java
-***** non streaming test *******
+***** streaming test - wall clock *******
+.>> TestThread2246 java.lang.Thread run ()V Thread.java
+..>> TestThread2246 Main$$ExternalSyntheticLambda0 run ()V D8$$SyntheticClass
+...>> TestThread2246 Main lambda$testTracing$0 (IZLBaseTraceParser;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
+....<< TestThread2246 Main <init> ()V Main.java
+....>> TestThread2246 Main $noinline$doSomeWork ()V Main.java
+.....>> TestThread2246 Main callOuterFunction ()V Main.java
+......>> TestThread2246 Main callLeafFunction ()V Main.java
+......<< TestThread2246 Main callLeafFunction ()V Main.java
+.....<< TestThread2246 Main callOuterFunction ()V Main.java
+.....>> TestThread2246 Main callLeafFunction ()V Main.java
+.....<< TestThread2246 Main callLeafFunction ()V Main.java
+....<< TestThread2246 Main $noinline$doSomeWork ()V Main.java
+....>> TestThread2246 Main$VMDebug $noinline$stopMethodTracing ()V Main.java
+.>> main Main main ([Ljava/lang/String;)V Main.java
+..>> main Main testTracing (ZILBaseTraceParser;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 Main $noinline$doSomeWork ()V Main.java
+....>> main Main callOuterFunction ()V Main.java
+.....>> main Main callLeafFunction ()V Main.java
+.....<< main Main callLeafFunction ()V Main.java
+....<< main Main callOuterFunction ()V Main.java
+....>> main Main callLeafFunction ()V Main.java
+....<< main Main callLeafFunction ()V Main.java
+...<< main Main $noinline$doSomeWork ()V Main.java
+...>> main Main doSomeWorkThrow ()V Main.java
+....>> main Main callThrowFunction ()V Main.java
+.....>> main java.lang.Exception <init> (Ljava/lang/String;)V Exception.java
+......>> main java.lang.Throwable <init> (Ljava/lang/String;)V Throwable.java
+.......>> main java.lang.Object <init> ()V Object.java
+.......<< main java.lang.Object <init> ()V Object.java
+.......>> main java.util.Collections emptyList ()Ljava/util/List; Collections.java
+.......<< main java.util.Collections emptyList ()Ljava/util/List; Collections.java
+.......>> main java.lang.Throwable fillInStackTrace ()Ljava/lang/Throwable; Throwable.java
+........>> main java.lang.Throwable nativeFillInStackTrace ()Ljava/lang/Object; Throwable.java
+........<< main java.lang.Throwable nativeFillInStackTrace ()Ljava/lang/Object; Throwable.java
+.......<< main java.lang.Throwable fillInStackTrace ()Ljava/lang/Throwable; Throwable.java
+......<< main java.lang.Throwable <init> (Ljava/lang/String;)V Throwable.java
+.....<< main java.lang.Exception <init> (Ljava/lang/String;)V Exception.java
+....<<E main Main callThrowFunction ()V Main.java
+...<< main Main doSomeWorkThrow ()V Main.java
+...>> main Main$VMDebug $noinline$stopMethodTracing ()V Main.java
+***** non streaming test - dual clock *******
 .>> TestThread2246 java.lang.Thread	run	()V	Thread.java
 ..>> TestThread2246 Main$$ExternalSyntheticLambda0	run	()V	D8$$SyntheticClass
-...>> TestThread2246 Main	lambda$testTracing$0	(ZLBaseTraceParser;I)V	Main.java
+...>> TestThread2246 Main	lambda$testTracing$0	(IZLBaseTraceParser;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
@@ -86,7 +146,71 @@
 .....>> 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 Main	testTracing	(ZILBaseTraceParser;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 Main	$noinline$doSomeWork	()V	Main.java
+....>> main Main	callOuterFunction	()V	Main.java
+.....>> main Main	callLeafFunction	()V	Main.java
+.....<< main Main	callLeafFunction	()V	Main.java
+....<< main Main	callOuterFunction	()V	Main.java
+....>> main Main	callLeafFunction	()V	Main.java
+....<< main Main	callLeafFunction	()V	Main.java
+...<< main Main	$noinline$doSomeWork	()V	Main.java
+...>> main Main	doSomeWorkThrow	()V	Main.java
+....>> main Main	callThrowFunction	()V	Main.java
+.....>> main java.lang.Exception	<init>	(Ljava/lang/String;)V	Exception.java
+......>> main java.lang.Throwable	<init>	(Ljava/lang/String;)V	Throwable.java
+.......>> main java.lang.Object	<init>	()V	Object.java
+.......<< main java.lang.Object	<init>	()V	Object.java
+.......>> main java.util.Collections	emptyList	()Ljava/util/List;	Collections.java
+.......<< main java.util.Collections	emptyList	()Ljava/util/List;	Collections.java
+.......>> main java.lang.Throwable	fillInStackTrace	()Ljava/lang/Throwable;	Throwable.java
+........>> main java.lang.Throwable	nativeFillInStackTrace	()Ljava/lang/Object;	Throwable.java
+........<< main java.lang.Throwable	nativeFillInStackTrace	()Ljava/lang/Object;	Throwable.java
+.......<< main java.lang.Throwable	fillInStackTrace	()Ljava/lang/Throwable;	Throwable.java
+......<< main java.lang.Throwable	<init>	(Ljava/lang/String;)V	Throwable.java
+.....<< main java.lang.Exception	<init>	(Ljava/lang/String;)V	Exception.java
+....<<E main Main	callThrowFunction	()V	Main.java
+...<< main Main	doSomeWorkThrow	()V	Main.java
+...>> main Main$VMDebug	$noinline$stopMethodTracing	()V	Main.java
+....>> main java.lang.reflect.Method	invoke	(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;	Method.java
+.....>> main dalvik.system.VMDebug	stopMethodTracing	()V	VMDebug.java
+***** non streaming test - wall clock *******
+.>> TestThread2246 java.lang.Thread	run	()V	Thread.java
+..>> TestThread2246 Main$$ExternalSyntheticLambda0	run	()V	D8$$SyntheticClass
+...>> TestThread2246 Main	lambda$testTracing$0	(IZLBaseTraceParser;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
+....<< TestThread2246 Main	<init>	()V	Main.java
+....>> TestThread2246 Main	$noinline$doSomeWork	()V	Main.java
+.....>> TestThread2246 Main	callOuterFunction	()V	Main.java
+......>> TestThread2246 Main	callLeafFunction	()V	Main.java
+......<< TestThread2246 Main	callLeafFunction	()V	Main.java
+.....<< TestThread2246 Main	callOuterFunction	()V	Main.java
+.....>> TestThread2246 Main	callLeafFunction	()V	Main.java
+.....<< TestThread2246 Main	callLeafFunction	()V	Main.java
+....<< TestThread2246 Main	$noinline$doSomeWork	()V	Main.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	(ZILBaseTraceParser;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
diff --git a/test/2246-trace-stream/src/BaseTraceParser.java b/test/2246-trace-stream/src/BaseTraceParser.java
index b551b64..6cd1c0b 100644
--- a/test/2246-trace-stream/src/BaseTraceParser.java
+++ b/test/2246-trace-stream/src/BaseTraceParser.java
@@ -24,7 +24,9 @@
 abstract class BaseTraceParser {
     public static final int MAGIC_NUMBER = 0x574f4c53;
     public static final int DUAL_CLOCK_VERSION = 3;
+    public static final int WALL_CLOCK_VERSION = 2;
     public static final int STREAMING_DUAL_CLOCK_VERSION = 0xF3;
+    public static final int STREAMING_WALL_CLOCK_VERSION = 0xF2;
     public static final String START_SECTION_ID = "*";
     public static final String METHODS_SECTION_ID = "*methods";
     public static final String THREADS_SECTION_ID = "*threads";
diff --git a/test/2246-trace-stream/src/Main.java b/test/2246-trace-stream/src/Main.java
index 77cece9..a8295e2 100644
--- a/test/2246-trace-stream/src/Main.java
+++ b/test/2246-trace-stream/src/Main.java
@@ -23,6 +23,7 @@
 public class Main {
     private static final String TEMP_FILE_NAME_PREFIX = "test";
     private static final String TEMP_FILE_NAME_SUFFIX = ".trace";
+    private static final int WALL_CLOCK_FLAG = 0x010;
     private static File file;
 
     public static void main(String[] args) throws Exception {
@@ -31,25 +32,38 @@
             System.out.println("This test is not supported on " + name);
             return;
         }
-        System.out.println("***** streaming test *******");
+        System.out.println("***** streaming test - dual clock *******");
         StreamTraceParser stream_parser = new StreamTraceParser();
         testTracing(
-                /* streaming=*/true, stream_parser, BaseTraceParser.STREAMING_DUAL_CLOCK_VERSION);
+                /* streaming=*/true, /* flags= */ 0, stream_parser,
+                BaseTraceParser.STREAMING_DUAL_CLOCK_VERSION);
 
-        System.out.println("***** non streaming test *******");
+        System.out.println("***** streaming test - wall clock *******");
+        StreamTraceParser stream_parser_wall_clock = new StreamTraceParser();
+        testTracing(
+                /* streaming=*/true, /* flags= */ WALL_CLOCK_FLAG, stream_parser,
+                BaseTraceParser.STREAMING_WALL_CLOCK_VERSION);
+
+        System.out.println("***** non streaming test - dual clock *******");
         NonStreamTraceParser non_stream_parser = new NonStreamTraceParser();
-        testTracing(/* streaming=*/false, non_stream_parser, BaseTraceParser.DUAL_CLOCK_VERSION);
+        testTracing(/* streaming=*/false, /* flags= */ 0, non_stream_parser,
+                BaseTraceParser.DUAL_CLOCK_VERSION);
+
+        System.out.println("***** non streaming test - wall clock *******");
+        NonStreamTraceParser non_stream_parser_wall_clock = new NonStreamTraceParser();
+        testTracing(/* streaming=*/false, /* flags= */ WALL_CLOCK_FLAG,
+                non_stream_parser_wall_clock, BaseTraceParser.WALL_CLOCK_VERSION);
     }
 
-    public static void testTracing(boolean streaming, BaseTraceParser parser, int expected_version)
-            throws Exception {
+    public static void testTracing(boolean streaming, int flags, BaseTraceParser parser,
+            int expected_version) throws Exception {
         Main m = new Main();
         Thread t = new Thread(() -> {
             try {
                 file = createTempFile();
                 FileOutputStream out_file = new FileOutputStream(file);
                 VMDebug.startMethodTracing(
-                        file.getPath(), out_file.getFD(), 0, 0, false, 0, streaming);
+                        file.getPath(), out_file.getFD(), 0, flags, false, 0, streaming);
                 Main m1 = new Main();
                 m1.$noinline$doSomeWork();
                 VMDebug.$noinline$stopMethodTracing();
@@ -74,7 +88,7 @@
             file = createTempFile();
             FileOutputStream main_out_file = new FileOutputStream(file);
             VMDebug.startMethodTracing(
-                    file.getPath(), main_out_file.getFD(), 0, 0, false, 0, streaming);
+                    file.getPath(), main_out_file.getFD(), 0, flags, false, 0, streaming);
             m.$noinline$doSomeWork();
             m.doSomeWorkThrow();
             VMDebug.$noinline$stopMethodTracing();