Skip to content

Releases: meta/fresco

v3.9.0

Choose a tag to compare

@Abbondanzo Abbondanzo released this 25 Sep 17:09

Highlights

  • Updates the Fresco source-build toolchain to Android Gradle Plugin 9.2.1, Gradle 9.4.1, and NDK r28c (28.2.13676358) (d74afa8)
  • Adds a ProducerFactory.newBitmapMemoryCacheKeyMultiplexProducer overload that accepts an explicit CacheKeyFactory, allowing delegated cache requests to be multiplexed with their own cache-key factory (c361d61)
  • Adds exact-key removal for memory caches and introduces UnifiedEncodedMemoryCache; Fresco's encoded-memory-cache producer now uses the shared cache boundary (745298f, 53dc796)
  • Generalizes EncodedCountingMemoryCacheFactory to create caches for custom encoded value types through a ValueDescriptor (53dc796)
  • Adds a Vito warning when a CloseableBitmap has a null underlyingBitmap, helping diagnose images that may already be closed (0282808)

Breaking

Source builds only:

  • The repository moves from AGP 8.10.1, Gradle 8.11.1, and NDK r27b to AGP 9.2.1, Gradle 9.4.1, and NDK r28c. The build now relies on AGP 9's built-in Kotlin support instead of applying kotlin-android, and annotation-processing modules use com.android.legacy-kapt instead of kotlin-kapt. Source-build automation or patches that depend on the previous wrapper or plugin IDs must be updated (d74afa8)

Full Changelog: v3.8.0...v3.9.0

v3.8.0

Choose a tag to compare

@Abbondanzo Abbondanzo released this 23 Sep 02:18

Highlights

  • Adds an encoded-image request transformation hook and makes disk-cache write producer creation overridable (58ac45f)
  • Adds EncodedImageDimensionsDecoder and a registry for custom image-dimension decoding (b0742d6)
  • Adds MultiPostprocessor for applying multiple postprocessors in sequence (ddc1db1)
  • Adds EmptyImageSource.isExpectedEmpty so intentional empty Vito sources can retain their placeholders without reporting failures (0b0bc9d, d838034)
  • Lets custom producer-sequence factories handle decoded HTTP(S) requests and encoded network prefetches (793dabc, 6bcf6e3)
  • Adds framework-neutral cache-key generation with UnifiedCacheKeyGenerator (f650f5d)
  • Adds request creation from complete SingleImageSource instances and request-based cache eviction that honors custom cache keys (7bf53df, 8366d27)
  • Adds opt-in streaming image decoding with byte- and time-based partial-result throttling (9e2b459, f2d88bb)
  • Adds an option to keep the progress indicator visible while intermediate Vito images are displayed (624a167)
  • Exposes the configured memory-chunk pool through PoolFactory.getMemoryChunkPool (06140ac)
  • Adds PrefetchData and prefetch telemetry plumbing (9366996)
  • Reduces final-image latency by letting completed decode results bypass the progressive-decode interval (02414e4, e0ecb75)
  • Supports building the OkHttp backend against both OkHttp 3.x and 4.x (288a34c, bc35d33)
  • Fixes an Android 16 null dereference when creating the default Vito drawable factory (7b7b29a)
  • Hardens native WebP decoding against invalid dimensions, oversized canvases, negative lengths, and unsafe byte-array ranges (a160b3b, 1566dd8)
  • Fixes recycled-bitmap rendering in Vito (41905be)
  • Fixes races and invalid-dimension handling in on-demand animations (762ed58, b57c874)
  • Fixes concurrency-related null dereferences in request listeners and Vito image tracking (2baa5d4, c6620d7)
  • Fixes source builds with JDK 25 and aligns the OSS Gradle build with Kotlin 2.2 (288cdbb, c90d7f0, 0209f24, 15df97e)

Breaking

Method signature changes:

  • Changes ProducerFactory.newDiskCacheWriteProducer to return Producer<EncodedImage> instead of DiskCacheWriteProducer (58ac45f)

Removed classes and options:

  • Removes EfficientPlatformDecoder, EfficientRawBitmapDecoder, DecodeValidationUtils, and the PlatformDecoderOptions.useEfficientDecoder and useBitmapFactoryDecoder options (d7ed19a, 5bc48b6, d4f7393)

Kotlin migration changes:

  • Makes MatrixDrawable and RoundedBitmapDrawable final and makes several previously overridable FadeDrawable methods final (f60d58d, dc82282, 9926a96)
  • Makes StreamUtil and UriUtil singletons; their static operations remain available, but construction and subclassing are no longer supported (e708aed, 5f2b04b)
  • Makes NativeJpegTranscoderFactory final and NativeJpegTranscoderSoLoader a singleton (f69ccbc)
  • Changes selected Kotlin getter calls on FrameScheduler, GifFrame, and WebPFrame to property access (d30727c, 0f7acde, 0266179)

Behavioral changes:

  • Cache-only decode misses now report errors; cancelDecodeOnCacheMiss no longer changes this behavior (0e7644e, 762ed58)

Full Changelog: v3.7.0...v3.8.0

v3.7.0

Choose a tag to compare

@Abbondanzo Abbondanzo released this 12 Jun 19:57

Highlights

  • Adds client-side AVIF transcoding (a19f4cd)
  • Adds intermediateImageBitmapTransformation API to Fresco (ad877d5)
  • Adds a quality-aware BitmapTransformation API and default transformation for intermediate images
    (de4f23c)
  • Adds SimilarImageLookup interface and wires it into ImagePipelineConfig (d04a77d)
  • Adds UnifiedCacheKeyFactory with a pluggable UriNormalizer (55ad40a)
  • Adds EfficientPlatformDecoder and a RawBitmapDecoder interface for unified byte-array-to-Bitmap decoding
    (cd773ee)
  • Adds ZoomableVitoView to the zoomable library (e6ce122)
  • Adds DrawableResImageSource, RetainingImageSource, and ColorImageSource image sources
    (0b41741)
  • Adds ScaleType.DISABLED and a new MatrixScaleType (8cf2538)
  • Adds loop-count control and static-thumbnail fallback for animated images (8cbe470)
  • Adds an API to delete all files from a disk cache (209d705)
  • Adds the ability to specify a custom cache key on ImageRequest/ImageRequestBuilder
    (2da616f)
  • Adds a circuit breaker for consecutive frame-drop failures in animations (1d3adb6)
  • Replaces deprecated setDownsampleEnabled() with setDownsampleMode() (fd2b684)
  • Bumps Kotlin to 2.2.0 (6a14e11)
  • Hardens native decoding against OOB reads, use-after-free, integer overflow, and a GIF-parsing memory leak in
    webp_bitmapfactory (6328781)
  • Removes CallerContext from cache keys to prevent caller-context leaks (d14c122)
  • Fixes an ANR by preventing synchronous network fetches on Litho layout threads (45a60ce)
  • Fixes recycled-bitmap crashes via an isRecycled() check in DefaultDrawableFactory (a122b06)
  • Fixes a postprocessor not being applied during decoded-image prefetch (6544cc6)
  • Fixes image info being fetched after drawable creation to avoid IllegalStateException (#2839)
    (64f3ca9)
  • Fixes the loop variable in DropFramesFrameScheduler (#2850) (4ed6d91)

Breaking

Nullability changes:

  • Marks getUnderlyingBitmap on CloseableImage and cloneUnderlyingBitmapReference on CloseableStaticBitmap nullable (ad1dab9)

Removed classes:

  • Removes the unused MultiUri class (0eb4503)
  • Removes the legacy GingerbreadPurgeableDecoder (1d801a7), HoneycombBitmapFactory (9b971a433af0a7024a94d26c97ef5f1fbc3b4af2), and KitKatPurgeableDecoder (removed as part of minSdk raise sweep)
  • Removes PoolSizeViolationException and ignoreHardCap (537cd77)
  • Removes LegacyOnFadeListener and related setLoggingListener/getLoggingListener on AbstractDraweeController and AbstractDraweeControllerBuilder (6653bfead9de8d1dcdb01aa13dfb1fe5daa7be41, dd81c0c)
  • Removes AnimationBackendDelegateWithInactivityCheck inactivity API (91702f7)
  • Removes AnimatedImageFactoryImpl (d291ae3)

Removed methods:

  • Removes PipelineDraweeControllerBuilder.setImageOriginListener (3998f18)
  • Removes PipelineDraweeController.removeImageOriginListener (made private) (a925053)
  • Removes DraweeSpanStringBuilder.setImageSpan, hasDraweeSpans, getDraweeSpans (dd99560)
  • Removes AnimationListener.onAnimationReset(Drawable) (eeae326)
  • Removes KAnimatedDrawable2.DrawListener.onDraw (f0dc700)
  • Removes ImagePipelineExperiments.setWebpSupportEnabled/isWebpSupportEnabled (b0ebc93)
  • Removes DefaultImageDecoder.decodeGif/decodeAnimatedWebp (4a5a554)
  • Removes AbstractAdaptiveCountingMemoryCache.reportData() (94346a6)
  • Removes DefaultCacheKeyFactory.setShouldRemoveCallerContextFromCacheKey (21a3f60)
  • Removes ImageRequest.recordHashCode (30e7642)
  • Removes RenderScriptBlurFilter.canUseRenderScript() (099f21c)
  • Removes PoolStatsTracker.onSoftCapReached/onHardCapReached (d5c9d20)

Enum changes:

  • Removes ImageRenderingInfra.VITO_V1 enum value (1a8b9e6)

Behavioral changes:

  • Bitmap pool ignoreHardCap now defaults to true (b196965)

Full Changelog: v3.6.0...v3.7.0

v3.6.0

Choose a tag to compare

@Abbondanzo Abbondanzo released this 08 Jan 19:49

Highlights

  • Adds AVIF image format support (0e05952)
  • (Breaking) Adds constructor argument to PipelineDraweeController for providing a drawable factory for XML (e6b0526)
  • Marked AnimatedDrawable2 and KAnimatedDrawable2 open for custom subclasses (76bde19)
  • Fixes infinite invalidation of drawables (aade8e8)
  • Fixes issue with XML format support not enabling when custom decoder is provided (7896b72)

Full Changelog: v3.5.0...v3.6.0

v3.5.0

Choose a tag to compare

@Abbondanzo Abbondanzo released this 25 Nov 15:33

Highlights

  • Added experimental support for XML drawables (bf62ecb)
  • Added disk cache read timeout support (2535bb3)
  • Added new API for evicting images from Vito cache (973d3fb)
  • Fixed a file descriptor memory leak when reading image metadata (96089bc)

Full Changelog: v3.4.0...v3.5.0

v3.4.0

Choose a tag to compare

@oprisnik oprisnik released this 14 Oct 18:07

Highlights

  • Bump to AGP 8.5.2 and Gradle 8.7 (f5d7c99)
  • Bump to NDK 27 + 16 KB page size (766a877)
    • Native binaries are now 16KB page aligned and is still compatible with existing Android OS using 4KB page size
    • This will enable Fresco to run on Android 15 devices that choose to use a page size of 16KB
    • See here for more details: Android Developers - Support 16KB page size

Full Changelog: v3.3.0...v3.4.0

v3.3.0

Choose a tag to compare

@Abbondanzo Abbondanzo released this 07 Oct 15:44

Full Changelog: v3.2.0...v3.3.0

A few highlights:

v3.2.0

Choose a tag to compare

@steelrooter steelrooter released this 04 Jun 16:26

v3.1.3

Choose a tag to compare

@cortinico cortinico released this 25 Oct 15:55

Full Changelog: v3.1.2...v3.1.3

v3.1.2

Choose a tag to compare

@oprisnik oprisnik released this 16 Oct 17:36
Bump version to 3.1.2

Reviewed By: cortinico

Differential Revision: D50325319

fbshipit-source-id: d1076265bff56d162b200f12083a953398c96b7e