Combine async slices in a single track

We want to show many async slices on a single UI track, to
do this we need to pick a vertical position for each
'island' of slices so that slices don't overlap but also
minimising vertical space where possible.

It do this this efficiently we expose a new dynamic table,
experimental_slice_layout. This is based on the slice table
and exposes two new columns: filter_track_ids and layout_depth.

filter_track_ids takes a comma separated list of track_ids which
we want to layout. There must be a constraint on filter_track_ids.
layout_depth reports the vertical position for each slice.

Change-Id: I53d98c68a328cd98c80e2f392d6b4955d9903bac
diff --git a/Android.bp b/Android.bp
index d985dfd..ebc024b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -6464,6 +6464,7 @@
     "src/trace_processor/dynamic/describe_slice_generator.cc",
     "src/trace_processor/dynamic/experimental_counter_dur_generator.cc",
     "src/trace_processor/dynamic/experimental_flamegraph_generator.cc",
+    "src/trace_processor/dynamic/experimental_slice_layout_generator.cc",
     "src/trace_processor/read_trace.cc",
     "src/trace_processor/trace_processor.cc",
     "src/trace_processor/trace_processor_impl.cc",
@@ -6643,6 +6644,7 @@
   name: "perfetto_src_trace_processor_unittests",
   srcs: [
     "src/trace_processor/dynamic/experimental_counter_dur_generator_unittest.cc",
+    "src/trace_processor/dynamic/experimental_slice_layout_generator_unittest.cc",
     "src/trace_processor/forwarding_trace_parser_unittest.cc",
     "src/trace_processor/importers/common/clock_tracker_unittest.cc",
     "src/trace_processor/importers/common/event_tracker_unittest.cc",