TrackEvent: Add support for tracks

Track events are recorded on a timeline track, which can be attached to a
process (ProcessTrack) or a thread (ThreadTrack). Custom timelines can be
created using asynchronous tracks (see AsyncTrack), which can also optionally
be scoped to a thread or a process.

A track is represented by a uuid, which must be unique across the entire
recorded trace.

Async event example:

  TRACE_EVENT_BEGIN("category", "AsyncEvent", perfetto::AsyncTrack(8086));
  ...
  TRACE_EVENT_END("category", perfetto::AsyncTrack(8086));

Tracks can also be annotated with metadata:

  perfetto::TrackEvent::SetAsyncTrackDescriptor(
      track, [](perfetto::protos::gen::TrackDescriptor* desc) {
        desc->set_name("MyAsyncTrack");
      });

Bug: 132678367
Change-Id: I83c5300fe48ae2e9612942b2f73237fd67f948d3
diff --git a/Android.bp b/Android.bp
index 35cec9e..76fb7b1 100644
--- a/Android.bp
+++ b/Android.bp
@@ -6229,6 +6229,7 @@
     "src/tracing/internal/track_event_internal.cc",
     "src/tracing/platform.cc",
     "src/tracing/tracing.cc",
+    "src/tracing/track.cc",
     "src/tracing/track_event_category_registry.cc",
     "src/tracing/virtual_destructors.cc",
   ],