Skip to content

Conversation

@EnTeQuAk
Copy link

This is a very first experiment. I don't quite know why, but the overall experience so far for me was rather sluggish, particularly when browsing through the gallery and editing pictures occasionally. I started experimenting with caching here and there, but, the main culprit, the RAW-file loading time (which spends a lot of time on demosaic) isn't affected by this branch.

  • Cache GPU pipelines once per session and reuse them for every render to eliminate the shader rebuild on each adjustment.
  • Introduce an LRU processing cache that stores decoded masks, AI patches, and full-resolution transformed images keyed by image path and context (preview/original/fullscreen/export).
  • Cache AI mask bitmaps and patch decodes by content hash, so regenerated masks/patches reuse decoded data and never serve stale results.
  • Thread the transform cache through all render paths (preview, fullscreen, export, original view) and switch get_or_compute_transformed_image to pull from the shared cache.
  • Expose cache stats + size slider in the settings panel, add Tauri commands (get_cache_stats, set_cache_max_size, clear_processing_cache, apply_cache_settings), and persist the max size in AppSettings.
  • Clear per-image cache entries when loading a new file, log cache activity for debugging, and keep the uncropped preview path from polluting the main cache.

I'd be interested to hear your feedback, if those caches do make the browsing experience somewhat smoother. It feels they do for me.

I'm still working on actual benchmarks to further proof if what I'm doing here is actually useful 🤣

- Cache GPU pipelines once per session and reuse them for every render to eliminate the shader rebuild on each adjustment.
- Introduce an LRU processing cache that stores decoded masks, AI patches, and full-resolution transformed images keyed by image path and context (preview/original/fullscreen/export).
- Cache AI mask bitmaps and patch decodes by content hash, so regenerated masks/patches reuse decoded data and never serve stale results.
- Thread the transform cache through all render paths (preview, fullscreen, export, original view) and switch get_or_compute_transformed_image to pull from the shared cache.
- Expose cache stats + size slider in the settings panel, add Tauri commands (get_cache_stats, set_cache_max_size, clear_processing_cache, apply_cache_settings), and persist the max size in AppSettings.
- Clear per-image cache entries when loading a new file, log cache activity for debugging, and keep the uncropped preview path from polluting the main cache.

Note: RAW load times are still dominated by demosaic/calibration; that work remains unchanged and will need a follow-up patch.
@EnTeQuAk EnTeQuAk requested a review from CyberTimon as a code owner November 14, 2025 19:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant