Enable PerfettoTrace on ravenwood

Flag: EXEMPT host test change only
Bug: 303199244
Test: atest CtsOsTestCasesRavenwood
Change-Id: I1f4ebd3de7273924eebeedd5c4338db26fc3ea6a
diff --git a/core/java/android/os/PerfettoTrace.java b/core/java/android/os/PerfettoTrace.java
index 68f1570..076437f 100644
--- a/core/java/android/os/PerfettoTrace.java
+++ b/core/java/android/os/PerfettoTrace.java
@@ -16,6 +16,8 @@
 
 package android.os;
 
+import com.android.internal.ravenwood.RavenwoodEnvironment;
+
 import dalvik.annotation.optimization.CriticalNative;
 import dalvik.annotation.optimization.FastNative;
 
@@ -32,6 +34,7 @@
  *
  * @hide
  */
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
 public final class PerfettoTrace {
     private static final String TAG = "PerfettoTrace";
 
@@ -53,6 +56,7 @@
      * Registering a category is not sufficient to capture events within the category, it must
      * also be enabled in the trace config.
      */
+    @android.ravenwood.annotation.RavenwoodKeepWholeClass
     public static final class Category implements PerfettoTrackEventExtra.PerfettoPointer {
         private static final NativeAllocationRegistry sRegistry =
                 NativeAllocationRegistry.createMalloced(
@@ -97,12 +101,16 @@
             mSeverity = severity;
             mPtr = native_init(name, tag, severity);
             mExtraPtr = native_get_extra_ptr(mPtr);
-            sRegistry.registerNativeAllocation(this, mPtr);
+            if (!RavenwoodEnvironment.getInstance().isRunningOnRavenwood()) {
+                sRegistry.registerNativeAllocation(this, mPtr);
+            }
         }
 
         @FastNative
+        @android.ravenwood.annotation.RavenwoodReplace
         private static native long native_init(String name, String tag, String severity);
         @CriticalNative
+        @android.ravenwood.annotation.RavenwoodReplace
         private static native long native_delete();
         @CriticalNative
         private static native void native_register(long ptr);
@@ -111,8 +119,24 @@
         @CriticalNative
         private static native boolean native_is_enabled(long ptr);
         @CriticalNative
+        @android.ravenwood.annotation.RavenwoodReplace
         private static native long native_get_extra_ptr(long ptr);
 
+        private static long native_init$ravenwood(String name, String tag, String severity) {
+            // Tracing currently completely disabled under Ravenwood
+            return 0;
+        }
+
+        private static long native_delete$ravenwood() {
+            // Tracing currently completely disabled under Ravenwood
+            return 0;
+        }
+
+        private static long native_get_extra_ptr$ravenwood(long ptr) {
+            // Tracing currently completely disabled under Ravenwood
+            return 0;
+        }
+
         /**
          * Register the category.
          */
@@ -134,10 +158,16 @@
         /**
          * Whether the category is enabled or not.
          */
+        @android.ravenwood.annotation.RavenwoodReplace
         public boolean isEnabled() {
             return IS_FLAG_ENABLED && native_is_enabled(mPtr);
         }
 
+        public boolean isEnabled$ravenwood() {
+            // Tracing currently completely disabled under Ravenwood
+            return false;
+        }
+
         /**
          * Whether the category is registered or not.
          */
diff --git a/core/java/android/os/PerfettoTrackEventExtra.java b/core/java/android/os/PerfettoTrackEventExtra.java
index e034fb3..72b909e6 100644
--- a/core/java/android/os/PerfettoTrackEventExtra.java
+++ b/core/java/android/os/PerfettoTrackEventExtra.java
@@ -16,6 +16,8 @@
 
 package android.os;
 
+import com.android.internal.ravenwood.RavenwoodEnvironment;
+
 import dalvik.annotation.optimization.CriticalNative;
 import dalvik.annotation.optimization.FastNative;
 
@@ -29,6 +31,7 @@
  *
  * @hide
  */
+@android.ravenwood.annotation.RavenwoodKeepWholeClass
 public final class PerfettoTrackEventExtra {
     private static final int DEFAULT_EXTRA_CACHE_SIZE = 5;
     private static final Builder NO_OP_BUILDER = new NoOpBuilder();
@@ -305,6 +308,7 @@
         Builder endNested();
     }
 
+    @android.ravenwood.annotation.RavenwoodKeepWholeClass
     public static final class NoOpBuilder implements Builder {
         @Override
         public void emit() {}
@@ -759,7 +763,9 @@
 
     private PerfettoTrackEventExtra() {
         mPtr = native_init();
-        sRegistry.registerNativeAllocation(this, mPtr);
+        if (!RavenwoodEnvironment.getInstance().isRunningOnRavenwood()) {
+            sRegistry.registerNativeAllocation(this, mPtr);
+        }
     }
 
     /**
@@ -1342,8 +1348,10 @@
     }
 
     @CriticalNative
+    @android.ravenwood.annotation.RavenwoodReplace
     private static native long native_init();
     @CriticalNative
+    @android.ravenwood.annotation.RavenwoodReplace
     private static native long native_delete();
     @CriticalNative
     private static native void native_add_arg(long ptr, long extraPtr);
@@ -1351,4 +1359,14 @@
     private static native void native_clear_args(long ptr);
     @FastNative
     private static native void native_emit(int type, long tag, String name, long ptr);
+
+    private static long native_init$ravenwood() {
+        // Tracing currently completely disabled under Ravenwood
+        return 0;
+    }
+
+    private static long native_delete$ravenwood() {
+        // Tracing currently completely disabled under Ravenwood
+        return 0;
+    }
 }
diff --git a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
index 383e75b..e202d0e 100644
--- a/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
+++ b/ravenwood/texts/ravenwood-annotation-allowed-classes.txt
@@ -151,6 +151,10 @@
 android.os.Message
 android.os.MessageQueue
 android.os.MessageQueue_ravenwood
+android.os.PerfettoTrace
+android.os.PerfettoTrace$Category
+android.os.PerfettoTrackEventExtra
+android.os.PerfettoTrackEventExtra$NoOpBuilder
 android.os.PackageTagsList
 android.os.Parcel
 android.os.ParcelFileDescriptor