Merge "ui: Add real "ts" back into slice data" into main
diff --git a/ui/src/frontend/base_slice_track.ts b/ui/src/frontend/base_slice_track.ts
index 85028aa..329e441 100644
--- a/ui/src/frontend/base_slice_track.ts
+++ b/ui/src/frontend/base_slice_track.ts
@@ -15,7 +15,7 @@
 import {Disposable, NullDisposable} from '../base/disposable';
 import {assertExists} from '../base/logging';
 import {clamp, floatEqual} from '../base/math_utils';
-import {duration, Time, time} from '../base/time';
+import {Time, time} from '../base/time';
 import {exists} from '../base/utils';
 import {Actions} from '../common/actions';
 import {
@@ -139,6 +139,7 @@
 // merges several tracks into one visual track.
 export const BASE_ROW = {
   id: NUM, // The slice ID, for selection / lookups.
+  ts: LONG, // True ts in nanoseconds.
   dur: LONG, // True duration in nanoseconds. -1 = incomplete, 0 = instant.
   tsQ: LONG, // Quantized start time in nanoseconds.
   durQ: LONG, // Quantized duration in nanoseconds.
@@ -336,6 +337,7 @@
           select
             ${this.depthColumn()},
             ts as tsQ,
+            ts,
             -1 as durQ,
             -1 as dur,
             id
@@ -347,8 +349,8 @@
       queryRes = await this.engine.query(`
         select
           ${this.depthColumn()},
-          max(ts) as ts,
           max(ts) as tsQ,
+          ts,
           -1 as durQ,
           -1 as dur,
           id
@@ -689,7 +691,8 @@
     const queryRes = await this.engine.query(`
       SELECT
         (z.ts / ${rawSlicesKey.bucketSize}) * ${rawSlicesKey.bucketSize} as tsQ,
-        iif(s.dur = -1, s.dur, max(z.dur, ${rawSlicesKey.bucketSize})) as durQ,
+        max(z.dur, ${rawSlicesKey.bucketSize}) as durQ,
+        s.ts as ts,
         s.dur as dur,
         s.id,
         z.depth
@@ -743,11 +746,6 @@
   }
 
   rowToSlice(row: T['row']): T['slice'] {
-    const startNs = Time.fromRaw(row.tsQ);
-    const endNs = Time.fromRaw(row.tsQ + row.durQ);
-    const ts = Time.fromRaw(row.tsQ);
-    const dur: duration = row.dur;
-
     let flags = 0;
     if (row.dur === -1n) {
       flags |= SLICE_FLAGS_INCOMPLETE;
@@ -757,11 +755,11 @@
 
     return {
       id: row.id,
-      startNs,
-      endNs,
-      durNs: row.dur,
-      ts,
-      dur,
+      startNs: Time.fromRaw(row.tsQ),
+      endNs: Time.fromRaw(row.tsQ + row.durQ),
+      durNs: row.durQ,
+      ts: Time.fromRaw(row.ts),
+      dur: row.dur,
       flags,
       depth: row.depth,
       title: '',