perf: optimize native worker snapshot writes with delta mode

Replace full-queue snapshot writes on every progress tick with a
lightweight delta mode that only includes the active item.

- Progress tick (1s loop) now writes item_delta with only the
  active item instead of serializing the entire queue
- Full compact_items snapshots are reserved for important events:
  start, pause/resume/cancel, item boundaries, finish, and
  service stop/destroy
- Compact items omit large static fields (item_json, track_name,
  artist_name) that Dart already has from queue restore
- Snapshot always carries item_ids for adoption correlation
- Dart-side _applyAndroidNativeWorkerSnapshot handles item_delta
  as a single-item fallback when items array is absent
- Dart-side _tryAdoptAndroidNativeWorkerSnapshot reads item_ids
  as fallback when items is not present
- Add deferred SAF publish: native worker writes to cache, runs
  all finalization locally, then publishes once to SAF at the end
- Forward defer_saf_publish through DownloadRequestPayload
This commit is contained in:
zarzet
2026-05-05 03:17:38 +07:00
parent 6b342aeac6
commit cfc8e699f3
6 changed files with 364 additions and 71 deletions
+1
View File
@@ -375,6 +375,7 @@ void main() {
'saf_file_name': 'Song.flac',
'saf_output_ext': 'flac',
'stage_saf_output': false,
'defer_saf_publish': false,
'requires_container_conversion': false,
'songlink_region': 'ID',
});