ui: fix exponential memory usage for async slice tracks

A cross join was causing memory usage to exponentially increase.
Instead, just query many times for each set of track ids.

Bug: 168308231
Change-Id: I10f13c187b20ce7a076f269029e225000cd04449
diff --git a/ui/src/controller/track_decider.ts b/ui/src/controller/track_decider.ts
index 16e7cdd..bf08e03 100644
--- a/ui/src/controller/track_decider.ts
+++ b/ui/src/controller/track_decider.ts
@@ -175,24 +175,21 @@
 
   const upidToProcessTracks = new Map();
   const rawProcessTracks = await engine.query(`
-    SELECT
-      pt.upid,
-      pt.name,
-      pt.track_ids,
-      MAX(experimental_slice_layout.layout_depth) as max_depth
-    FROM (
-      SELECT upid, name, GROUP_CONCAT(process_track.id) AS track_ids
-      FROM process_track GROUP BY upid, name
-    ) AS pt CROSS JOIN experimental_slice_layout
-    WHERE pt.track_ids = experimental_slice_layout.filter_track_ids
-    GROUP BY pt.track_ids;
+    SELECT upid, name, GROUP_CONCAT(process_track.id) AS track_ids
+    FROM process_track
+    GROUP BY upid, name
   `);
   for (let i = 0; i < rawProcessTracks.numRecords; i++) {
     const upid = +rawProcessTracks.columns[0].longValues![i];
     const name = rawProcessTracks.columns[1].stringValues![i];
     const rawTrackIds = rawProcessTracks.columns[2].stringValues![i];
     const trackIds = rawTrackIds.split(',').map(v => Number(v));
-    const maxDepth = +rawProcessTracks.columns[3].longValues![i];
+
+    const depthResult = await engine.query(`
+      SELECT MAX(layout_depth) as max_depth
+      FROM experimental_slice_layout('${rawTrackIds}');
+    `);
+    const maxDepth = +depthResult.columns[0].longValues![i];
     const track = {
       engineId,
       kind: 'AsyncSliceTrack',