fd5808c157
Decode JPEGs at the smallest DCT scale (1/8·1/4·1/2·1/1) whose long axis is still ≥ the largest needed thumbnail (800px), via jpeg-decoder, instead of a full-resolution decode through the image crate. The full-res bitmap — the dominant time and RAM cost — is never materialised. PNG/GIF/WebP and unusual JPEG colour spaces (CMYK / 16-bit grey) fall back to a full decode. Extracts the shared decode + EXIF-orientation logic into decode_oriented(), removing the duplication that existed between render_thumbnail_from_data and render_all_thumbnails_from_data. Measured on 14 cores (see benches/BASELINE.md): - render_all 1.8-2.0× faster (12MP 111->61ms, 48MP 398->203ms) - peak heap 5.5-14.8× lower, now decoupled from source MP (~18-25MB regardless) - saturated throughput 3-3.6× (parallel efficiency 4.9×->8.5×) - quality SSIM 0.987-0.999 (>=0.98 gate), PSNR 47-55dB Also adds the Phase 0 benchmark harness (gated behind the `bench` feature, zero prod impact): deterministic image corpus (src/bench_support.rs), criterion latency bench (benches/thumbnails.rs), and a peak-RAM/throughput/SSIM harness (examples/bench_thumbnails_mem.rs). Baseline + before/after in benches/BASELINE.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
26 lines
923 B
Rust
26 lines
923 B
Rust
#![allow(async_fn_in_trait)]
|
|
|
|
// Export the main project modules
|
|
pub mod application;
|
|
pub mod common;
|
|
pub mod domain;
|
|
pub mod infrastructure;
|
|
pub mod interfaces;
|
|
|
|
// Test-only helpers for #[cfg(integration_tests)] modules across the
|
|
// crate (shared pool URL guard + pre-suite cleanup OnceCell).
|
|
#[cfg(integration_tests)]
|
|
pub mod integration_test_support;
|
|
|
|
// Phase 0 perf-benchmark support: deterministic image corpus generation/loading
|
|
// shared by `benches/thumbnails.rs` and `examples/bench_thumbnails_mem.rs`.
|
|
// Gated behind the `bench` feature so it adds nothing to normal builds.
|
|
#[cfg(feature = "bench")]
|
|
pub mod bench_support;
|
|
|
|
// Common public re-exports
|
|
pub use application::services::folder_service::FolderService;
|
|
pub use application::services::i18n_application_service::I18nApplicationService;
|
|
pub use domain::services::path_service::StoragePath;
|
|
pub use infrastructure::services::path_service::PathService;
|