ff2dc690270f4e155d6345af821bc8a2c197e667
braney
  Fri Apr 24 17:58:03 2026 -0700
quickLiftBench: hgTracks render-time benchmark for quickLift, refs #37445

Drives YAML-configured cases against hgTracks with measureTiming=1, parses
per-track loadTime/drawTime out of printTrackTiming() output, writes per-
iteration TSV plus a per-(case, position) summary with median/p90 and
lifted/native ratios. Supports same-hub source-vs-dest, track-pair across
assemblies, and lift-on/off side-by-side hub comparisons. Output backs the
benchmark numbers for the quickLift Bioinformatics paper (#36829).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

diff --git src/utils/qa/quickLiftBench/cases.yaml src/utils/qa/quickLiftBench/cases.yaml
new file mode 100644
index 00000000000..83f25786ea0
--- /dev/null
+++ src/utils/qa/quickLiftBench/cases.yaml
@@ -0,0 +1,106 @@
+# quickLiftBench cases.yaml
+#
+# Each case lists named variants (typically `native` and `lifted`) plus a list
+# of positions to time. The runner does (warmup + iterations) requests per
+# (variant, position) cell and writes per-iteration rows to results.tsv plus a
+# per-case summary with median/p90 and lifted/native ratios.
+#
+# Three comparison modes share this same schema:
+#
+#   A. Same hub, source vs dest db:
+#        native points at db = source assembly, no quickLiftUrl in trackDb
+#        lifted points at db = dest assembly, with quickLiftUrl in trackDb
+#        Both reference the same underlying bigBed.
+#
+#   B. Track pair on each assembly:
+#        native and lifted are different trackDb stanzas / hubs holding
+#        equivalent data on different assemblies.
+#
+#   C. Lift on/off, same trackDb (via side-by-side reference hub):
+#        Two stanzas in the same hub on the destination assembly, one with
+#        quickLiftUrl set and one without, both pointing at the same bigBed.
+#
+# A variant inherits unset fields from `defaults`. Override `server` per
+# variant if cross-server comparison is needed.
+
+defaults:
+  iterations: 5
+  warmup: 1
+  timeout: 60
+  servers:
+    hgwdev: https://hgwdev.gi.ucsc.edu
+    sandbox: https://hgwdev-braney.gi.ucsc.edu
+    beta: https://hgwbeta.soe.ucsc.edu
+    rr: https://genome.ucsc.edu
+
+cases:
+
+  # -------- Mode A example: same data, source vs dest db --------
+  # FILL IN: replace hubUrl and track names with a real quickLift-enabled hub.
+  - id: example_modeA_bigBed
+    description: |
+      Example Mode A: a bigBed annotation rendered natively on its source
+      assembly vs the same bigBed rendered on the destination assembly via
+      quickLift. Replace hubUrl/track with a real example before running.
+    positions:
+      - {label: sparse, value: chr1:1000000-2000000}
+      - {label: dense,  value: chr19:50000000-51000000}
+    variants:
+      native:
+        server: hgwdev
+        db: hg19
+        hubUrl: https://example.com/quickLiftExample/hub.txt
+        track: exampleTrack
+      lifted:
+        server: hgwdev
+        db: hg38
+        hubUrl: https://example.com/quickLiftExample/hub.txt
+        track: exampleTrack_quickLift
+    compare:
+      - [native, lifted]
+
+  # -------- Mode B example: track pair on each assembly --------
+  - id: example_modeB_trackPair
+    description: |
+      Example Mode B: equivalent data published as separate trackDb stanzas
+      on assembly A (native) and assembly B (quickLift'd from a different
+      source).
+    positions:
+      - {label: sparse, value: chr1:1000000-2000000}
+      - {label: dense,  value: chr19:50000000-51000000}
+    variants:
+      native:
+        server: hgwdev
+        db: hg38
+        track: gencodeV44
+      lifted:
+        server: hgwdev
+        db: hs1
+        hubUrl: https://example.com/t2tHub/hub.txt
+        track: gencodeV44_quickLift
+    compare:
+      - [native, lifted]
+
+  # -------- Mode C example: lift on/off, same data --------
+  - id: example_modeC_liftOnOff
+    description: |
+      Example Mode C: side-by-side hub with two stanzas pointing at the same
+      bigBed; one with quickLiftUrl/quickLiftDb set, one without. Use the
+      reference hub under testHub/ once it is published, or substitute your
+      own.
+    positions:
+      - {label: sparse, value: chr1:1000000-2000000}
+      - {label: dense,  value: chr19:50000000-51000000}
+    variants:
+      native:
+        server: hgwdev
+        db: hg38
+        hubUrl: https://example.com/quickLiftBench/testHub/hub.txt
+        track: bench_native
+      lifted:
+        server: hgwdev
+        db: hg38
+        hubUrl: https://example.com/quickLiftBench/testHub/hub.txt
+        track: bench_lifted
+    compare:
+      - [native, lifted]