Issue #2073 - m-c 523950: Discard decoded frames of very large GIF animations (squashed)

Controlled by image.animated.decode-on-demand.threshold-kb, default 256MB

Includes squashed bugfixes/regressions:
 - m-c 1444537: Shutting down the decode pool should make animated decoders bail early
 - m-c 1628606: Make sure to mark the surface cache entry available before sending the frame complete notification
 - m-c 1502275: Skip recreating the decoder after redecode errors if an animated image is reset
 - m-c 1443232: Don't insert frames into our AnimationFrameBuffer that we consider in error and unusable
This commit is contained in:
Martok 2022-12-31 22:55:46 +01:00 committed by roytam1
commit e96122ede2
25 changed files with 925 additions and 63 deletions

View file

@ -92,6 +92,7 @@ public:
* @param aDecoderFlags Flags specifying the behavior of this decoder.
* @param aSurfaceFlags Flags specifying the type of output this decoder
* should produce.
* @param aCurrentFrame The current frame the decoder should auto advance to.
*/
static already_AddRefed<IDecodingTask>
CreateAnimationDecoder(DecoderType aType,
@ -99,7 +100,17 @@ public:
NotNull<SourceBuffer*> aSourceBuffer,
const gfx::IntSize& aIntrinsicSize,
DecoderFlags aDecoderFlags,
SurfaceFlags aSurfaceFlags);
SurfaceFlags aSurfaceFlags,
size_t aCurrentFrame);
/**
* Creates and initializes a decoder for animated images, cloned from the
* given decoder.
*
* @param aDecoder Decoder to clone.
*/
static already_AddRefed<Decoder>
CloneAnimationDecoder(Decoder* aDecoder);
/**
* Creates and initializes a metadata decoder of type @aType. This decoder