mangayomi-mirror/lib/utils
Mehakdeep Singh 861ee65113 perf(library): decode covers at thumbnail resolution to cut image-cache RAM
Refs #609 (high RAM with stutters).

Manga / anime covers from sources are typically 720x1080 or larger
(~3 MB decoded RGBA per cover). The library grid, library list and
generic browse / search card widgets render those covers at roughly
150x220 logical pixels, but every cover decoded to its full source
resolution and that decoded bitmap landed in Flutter's `imageCache`.
With 30-50 covers in flight during a normal scroll, the default
100 MB cache filled and the engine started evicting + re-decoding
aggressively — exactly the symptom in #609 (stutters + high RAM).

Mangayomi already had `ExtendedResizeImage` available via the
`extended_image_library` package and used it in one place
(`cachedCompressedNetworkImage`, called only from the History
screen). This commit generalises that pattern.

Add a `coverProvider()` helper in `lib/utils/cached_network.dart`
that wraps `CustomExtendedNetworkImageProvider` in
`ExtendedResizeImage` with a 200 KB encoded budget — sharp at
typical thumbnail size on high-DPR screens, ~3.6x smaller decoded
than a full-resolution cover. Pass through the same `cache` /
`cacheMaxAge` knobs the underlying provider exposes so existing
disk-cache behaviour is preserved.

Swap the three high-traffic thumbnail call sites to use it:

* `lib/modules/library/widgets/library_gridview_widget.dart`
* `lib/modules/library/widgets/library_listview_widget.dart`
* `lib/modules/widgets/manga_image_card_widget.dart`
  (both `MangaImageCardWidget` and `MangaImageCardListTileWidget`,
  used by browse and search results)

Deliberately not changed:

* The manga / anime detail page hero cover — large display, full
  resolution is appropriate.
* Reader pages — already memory-managed by `ChapterPreloadManager`
  and need full resolution for actual reading.
* `cachedNetworkImage()` and other lower-traffic thumbnail surfaces
  (tracker results, calendar, recommendation grid). Easy to extend
  in a follow-up if anyone asks; kept narrow here so review is
  manageable.

Verified

* `flutter analyze` clean on every touched file
* `flutter build macos --release` succeeds
* Smoke-tested on macOS with the local-all-fixes build: library
  grid, library list and browse card all render identical-looking
  covers at typical thumbnail sizes; no visible quality regression
  at the displayed scale
2026-05-09 23:37:44 -07:00
..
cryptoaes dart format 2025-05-30 17:43:42 +01:00
extensions Merge pull request #714 from NBA2K1/main 2026-04-30 11:19:11 +01:00
log Fix Exception 2026-04-21 21:45:40 +02:00
url_protocol refactor: improve download button logic and clean up code 2025-04-01 17:15:54 +01:00
cached_network.dart perf(library): decode covers at thumbnail resolution to cut image-cache RAM 2026-05-09 23:37:44 -07:00
chapter_recognition.dart Add multi-season support and split parse methods 2026-04-26 03:32:28 +02:00
constant.dart adjusted tracker icons 2025-08-25 19:08:50 +02:00
date.dart testing iOS Picture-in-Picture 2025-08-07 21:37:46 +02:00
discord_rpc.dart Initialize rpcShowReadingWatchingProgress to false 2025-11-08 23:57:32 +01:00
fetch_interval.dart feat: Implement upcoming manga calendar feature 2026-03-05 12:05:29 +01:00
global_style.dart dart format 2025-02-23 15:31:49 +01:00
headers.dart refactor: enhance headers function for mihon source 2026-04-06 13:03:41 +01:00
headers.g.dart feat #682 option to split chapter whe importing local epub 2026-04-07 11:55:42 +01:00
html_to_xml_doc.dart remove unnecessary calls 2025-12-17 21:34:45 +01:00
item_type_filters.dart Group related functions using an extension 2025-12-29 23:19:31 +01:00
item_type_localization.dart Group related functions using an extension 2025-12-29 23:19:31 +01:00
language.dart + 2025-11-08 23:43:01 +01:00
platform_utils.dart Use Platform Helper Everywhere Possible 2026-04-26 19:42:13 +02:00
reg_exp_matcher.dart Fix indexing and path for downloaded chapter images and update padding logic 2025-06-04 17:28:31 +01:00
riverpod.dart Refactor and update dependencies for Isar and Riverpod 2025-10-29 13:08:42 +01:00
system_ui.dart Reduce Code Duplication Across 3 Files 2026-04-26 15:03:56 +02:00
utils.dart small adjustments for a better reading experience of many single pages in a row 2026-01-30 23:15:26 +01:00
window_geometry.dart feat: implement multiple bug fixes and feature requests\n\n- #339: Remember window size/position on desktop (WindowGeometry utility)\n- #256: Add S key shortcut to skip intro in desktop anime player\n- #372: Auto-delete downloaded chapters after reading (new setting + toggle)\n- #402: Fix manhwa reader scroll jumps by caching image dimensions for placeholders\n- #608: Fix 'Fit width' scale type cropping pages in paged reader mode\n- #572: Add mouse back button navigation support on desktop" 2026-03-17 14:31:21 +01:00
xpath_selector.dart initial adding madara multi source 2023-05-25 20:59:02 +01:00