Perf audit batch 1 (app-side): preserve res-cap on autoplay + detail LazyColumn — vc=78
All checks were successful
build-apk / build-and-publish (push) Successful in 7m36s
gitleaks / scan (push) Successful in 45s

From the multi-agent perf audit (adversarially verified), the two app-side wins:

- 1.1 Preserve the max-resolution cap on autoplay-next. The enter-video
  trackSelectionParameters reset built from a blank default, silently
  dropping the data-saver ceiling every URL change so autoplay streamed
  uncapped. Now: re-enable the video track via buildUpon + reassert
  applyMaxResolutionCap().
- 2.1 VideoDetailBody verticalScroll Column -> LazyColumn. Related +
  more-from-channel rows recycle and defer each AsyncImage decode + the
  two ThumbnailProgress flow collectors until scrolled into view (was ~40
  decodes + ~80 collectors eager on every open). Namespaced item keys
  (rel:/mfc:) so a url in both lists doesn't crash the list; kept take(20);
  dialogs hoisted out of the lazy content.
This commit is contained in:
Cobb 2026-06-21 04:44:58 -07:00
parent 4b73616083
commit 2defbd2925
3 changed files with 174 additions and 118 deletions

View file

@ -9,6 +9,17 @@ const val STRAW_SDK_TARGET = 35
// Sulkta fork — Straw
//
// vc=78 / 0.1.0-CL — perf-audit batch 1 (app-side):
// * Autoplay-next no longer drops the user's max-resolution cap. The
// enter-video track-selection reset built params from scratch, wiping
// the data-saver ceiling on every URL change; now it re-enables the
// video track surgically + re-asserts applyMaxResolutionCap().
// * VideoDetail body is now a LazyColumn, not a verticalScroll Column.
// The related + more-from-channel lists recycle and defer each row's
// image decode + its two progress-overlay flow collectors until
// scrolled into view (was ~40 decodes + ~80 collectors mounted eagerly
// on every video open). Namespaced item keys; dialogs hoisted out.
//
// vc=77 / 0.1.0-CK — morph perf: static poster during collapse/morph:
// * The minibar + the whole collapse/expand morph now render the video's
// static poster, not the live TextureView. Scaling a live-playing
@ -89,6 +100,6 @@ const val STRAW_SDK_TARGET = 35
// vc=19 / 0.1.0-AE — rust pipeline cutover. Extraction via
// strawcore-core (Sulkta-Coop/strawcore) via the UniFFI wrapper; no
// NewPipeExtractor in the runtime path.
const val STRAW_VERSION_CODE = 77
const val STRAW_VERSION_NAME = "0.1.0-CK"
const val STRAW_VERSION_CODE = 78
const val STRAW_VERSION_NAME = "0.1.0-CL"
const val STRAW_APPLICATION_ID = "com.sulkta.straw"