diff --git a/TRACE_OWNERS b/TRACE_OWNERS
new file mode 100644
index 0000000..f746a16
--- /dev/null
+++ b/TRACE_OWNERS
@@ -0,0 +1,5 @@
+# OWNERS of Trace-related files
+primiano@google.com
+timmurray@google.com
+jjaggi@google.com
+jreck@google.com
diff --git a/core/java/android/os/OWNERS b/core/java/android/os/OWNERS
index 8e5ed8f..1f3108a 100644
--- a/core/java/android/os/OWNERS
+++ b/core/java/android/os/OWNERS
@@ -66,3 +66,6 @@
 
 # VINTF
 per-file Vintf* = file:/platform/system/libvintf:/OWNERS
+
+# Tracing
+per-file Trace.java = file:/TRACE_OWNERS
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 6b869f1..231c22b 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -136,6 +136,12 @@
     @FastNative
     private static native void nativeAsyncTraceEnd(long tag, String name, int cookie);
     @FastNative
+    private static native void nativeAsyncTraceForTrackBegin(long tag,
+            String trackName, String name, int cookie);
+    @FastNative
+    private static native void nativeAsyncTraceForTrackEnd(long tag,
+            String trackName, String name, int cookie);
+    @FastNative
     private static native void nativeInstant(long tag, String name);
     @FastNative
     private static native void nativeInstantForTrack(long tag, String trackName, String name);
@@ -271,6 +277,47 @@
         }
     }
 
+
+    /**
+     * Writes a trace message to indicate that a given section of code has
+     * begun. Must be followed by a call to {@link #asyncTraceForTrackEnd} using the same
+     * tag. This function operates exactly like {@link #asyncTraceBegin(long, String, int)},
+     * except with the inclusion of a track name argument for where this method should appear.
+     *
+     * @param traceTag The trace tag.
+     * @param trackName The track where the event should appear in the trace.
+     * @param methodName The method name to appear in the trace.
+     * @param cookie Unique identifier for distinguishing simultaneous events
+     *
+     * @hide
+     */
+    public static void asyncTraceForTrackBegin(long traceTag,
+            @NonNull String trackName, @NonNull String methodName, int cookie) {
+        if (isTagEnabled(traceTag)) {
+            nativeAsyncTraceForTrackBegin(traceTag, trackName, methodName, cookie);
+        }
+    }
+
+    /**
+     * Writes a trace message to indicate that the current method has ended.
+     * Must be called exactly once for each call to
+     * {@link #asyncTraceForTrackBegin(long, String, String, int)}
+     * using the same tag, track name, name and cookie.
+     *
+     * @param traceTag The trace tag.
+     * @param trackName The track where the event should appear in the trace.
+     * @param methodName The method name to appear in the trace.
+     * @param cookie Unique identifier for distinguishing simultaneous events
+     *
+     * @hide
+     */
+    public static void asyncTraceForTrackEnd(long traceTag,
+            @NonNull String trackName, @NonNull String methodName, int cookie) {
+        if (isTagEnabled(traceTag)) {
+            nativeAsyncTraceForTrackEnd(traceTag, trackName, methodName, cookie);
+        }
+    }
+
     /**
      * Writes a trace message to indicate that a given section of code was invoked.
      *
diff --git a/core/jni/OWNERS b/core/jni/OWNERS
index 8cac2e8c..626a212 100644
--- a/core/jni/OWNERS
+++ b/core/jni/OWNERS
@@ -56,6 +56,7 @@
 per-file android_media_midi_* = file:/media/java/android/media/midi/OWNERS
 per-file android_opengl_* = file:/opengl/java/android/opengl/OWNERS
 per-file android_os_storage_* = file:/core/java/android/os/storage/OWNERS
+per-file android_os_Trace* = file:/TRACE_OWNERS
 per-file android_se_* = file:/omapi/java/android/se/OWNERS
 per-file android_security_* = file:/core/java/android/security/OWNERS
 per-file android_view_* = file:/core/java/android/view/OWNERS
diff --git a/core/jni/android_os_Trace.cpp b/core/jni/android_os_Trace.cpp
index 85fd5d9..734b6ca 100644
--- a/core/jni/android_os_Trace.cpp
+++ b/core/jni/android_os_Trace.cpp
@@ -82,6 +82,26 @@
     });
 }
 
+static void android_os_Trace_nativeAsyncTraceForTrackBegin(JNIEnv* env, jclass, jlong tag,
+                                                           jstring trackStr, jstring nameStr,
+                                                           jint cookie) {
+    withString(env, trackStr, [env, tag, nameStr, cookie](char* track) {
+        withString(env, nameStr, [tag, track, cookie](char* name) {
+            atrace_async_for_track_begin(tag, track, name, cookie);
+        });
+    });
+}
+
+static void android_os_Trace_nativeAsyncTraceForTrackEnd(JNIEnv* env, jclass, jlong tag,
+                                                         jstring trackStr, jstring nameStr,
+                                                         jint cookie) {
+    withString(env, trackStr, [env, tag, nameStr, cookie](char* track) {
+        withString(env, nameStr, [tag, track, cookie](char* name) {
+            atrace_async_for_track_end(tag, track, name, cookie);
+        });
+    });
+}
+
 static void android_os_Trace_nativeSetAppTracingAllowed(JNIEnv*, jclass, jboolean allowed) {
     atrace_update_tags();
 }
@@ -132,6 +152,12 @@
     { "nativeAsyncTraceEnd",
             "(JLjava/lang/String;I)V",
             (void*)android_os_Trace_nativeAsyncTraceEnd },
+    { "nativeAsyncTraceForTrackBegin",
+            "(JLjava/lang/String;Ljava/lang/String;I)V",
+            (void*)android_os_Trace_nativeAsyncTraceForTrackBegin },
+    { "nativeAsyncTraceForTrackEnd",
+            "(JLjava/lang/String;Ljava/lang/String;I)V",
+            (void*)android_os_Trace_nativeAsyncTraceForTrackEnd },
     { "nativeInstant",
             "(JLjava/lang/String;)V",
             (void*)android_os_Trace_nativeInstant },
