Timothy Nikkel
5dbb032f4f
Bug 1363092. Don't update the state of an animated image that requires an invalidation when creating a new decoder because we may not be able to send invalidations. r=aosmond
2017-06-01 02:19:55 -05:00
Timothy Nikkel
91e6c26580
Bug 1353299. Make sure to invalidate when composited frame becomes valid. r=aosmond
...
We draw nothing when the composited frame is invalid, so when we mark it valid we should invalidate. Usually the action that causes the composited frame to be valid will invalidate (ie RequestRefresh).
2017-04-06 04:00:36 -05:00
Timothy Nikkel
1614a73bad
Bug 1343341. Rewrite animation state updating to derive new state purely based on SurfaceCache and RasterImage::mAnimationFinished. r=aosmond
...
If the SurfaceCache discards our frames on another thread, the runnable that notifies us of that discard could race with a decode complete notification. So we can't rely on any ordering of SetDiscarded and NotifyDecodeComplete. Thus we must derive our state purely from the SurfaceCache (and mAnimationFinished from RasterImage).
We also update the image state in RequestRefresh (the main place where we use the state that is updated).
The other main place we use the state is GetCompositedFrame, but we don't update the state there. It should be fine because the only time this might lag behind reality is if the frames are discarded, and it should be fine to continue drawing the composited frame until the discard notification arrives.
The way that we tell that an animated image has all of its frames complete in the surface cache is less than ideal.
2017-03-26 00:04:53 -05:00
Timothy Nikkel
2776a4ad96
Bug 1343341. In FrameAnimator look up our frames once and pass them around. r=aosmond
...
The SurfaceCache can discard on any thread at any time. So we could be in the middle of advancing frames of a fully decoded animated image and then the frames could disappear out from under us.
Making the code deal with that kind of a situation would make the logic very complicated. So instead just look up the frames once and pass them around, that way they never change during while we are advancing the frame.
2017-03-24 00:57:30 -05:00
Timothy Nikkel
3d98a47ed8
Bug 1343341. Change GetTimeoutForFrame to return a Maybe, and make all callers deal with a lack of a return value. r=aosmond
...
Do this to allow GetTimeoutForFrame to be called for frames that haven't been decoded yet. Propagate a Maybe result where it makes sense. The remaining callers just bail if they get no return value. Many of them can just assert that they get a return value because they already got the same frame, so the timeout has to be available.
The logic is a little tricky because we have "Forever" timeouts that were sort of treated as error cases.
2017-03-23 00:02:54 -05:00
Timothy Nikkel
d69ec52e66
Bug 1343341. Create state on the AnimationState object to track whether the image is decoded or not. r=aosmond
...
We end up needing to track a few different things.
The large comment in the patch explains.
2017-03-16 03:06:04 -05:00
Timothy Nikkel
bb32ac7fbf
Backed out changeset a23edcf5b82a (bug 1343341)
2017-03-15 03:13:51 -05:00
Timothy Nikkel
a2ceaae0b8
Bug 1343341. Create state on the AnimationState object to track whether the image is decoded or not. r=aosmond
...
We end up needing to track a few different things.
The large comment in the patch explains.
2017-03-15 02:47:37 -05:00
Timothy Nikkel
d58225c24c
Backed out changeset 7f13c7a84acb (bug 1343341) for hitting a fatal assert that it added in RasterImage::OnSurfaceDiscard sometimes on android reftests.
2017-03-02 02:24:29 -06:00
Timothy Nikkel
add901e3a2
Bug 1343341. Include gfxPref.h to fix build bustage.
2017-03-01 23:05:44 -06:00
Timothy Nikkel
558fc1aa45
Bug 1343341. Create state on the AnimationState object to track whether the image is decoded or not. r=aosmond
...
We end up needing to track a few different things.
The large comment in the patch explains.
2017-03-01 22:45:54 -06:00
Timothy Nikkel
362304b8ee
Bug 1343341. Rename mDoneDecoding to mHasBeenDecoded. r=aosmond
...
When we allow animated images to be discarded we still want to track if the image has been fully decoded before, but it would be confusing to say that it is "done decoding" because that sounds like the image is currently decoded, even though it could be discarded at the time.
2017-03-01 22:45:54 -06:00
Timothy Nikkel
b69c01ee55
Bug 1317907. Refactor FrameAnimator::GetCompositedFrame to be a bit simpler. r=aosmond
...
FrameAnimator::GetCompositedFrame is only ever called with the current animation frame index. This is good because it can return invalid results if it is called for some other frame number.
2016-11-29 01:01:43 -06:00
Seth Fowler
97b4a5d8c7
Bug 1289957 (Part 2) - Notify RasterImage about new frames in NotifyProgress() and remove OnAddedFrame(). r=edwin
2016-07-28 00:12:50 -07:00
Seth Fowler
dc9bddc5cd
Bug 1288040 (Part 12) - Use Moz2D types in FrameAnimator code. r=edwin
2016-07-20 16:30:44 -07:00
Seth Fowler
8bb93146a8
Bug 1288040 (Part 11) - Clean up RefreshResult. r=edwin
2016-07-20 16:30:41 -07:00
Seth Fowler
3e8d8d790f
Bug 1288040 (Part 10) - Determine the first frame refresh area of animated images while decoding them. r=edwin
2016-07-20 16:30:39 -07:00
Seth Fowler
642c28d837
Bug 1288040 (Part 9) - Determine the loop length of animated images while decoding them. r=edwin
2016-07-20 16:30:36 -07:00
Seth Fowler
049339870a
Bug 1288040 (Part 8) - Return a FrameTimeout value from FrameAnimator::GetSingleLoopTime(). r=edwin
2016-07-20 16:30:34 -07:00
Seth Fowler
930f26424f
Bug 1288040 (Part 7) - Make FrameAnimator::GetTimeoutForFrame() a private method that doesn't rely on AnimationState. r=edwin
2016-07-20 16:30:32 -07:00
Seth Fowler
aa9b084d09
Bug 1288040 (Part 6) - Don't call GetTimeoutForFrame() in RasterImage. r=edwin
2016-07-20 16:30:30 -07:00
Seth Fowler
78ccdc2e84
Bug 1288040 (Part 5) - Wrap frame timeout values in a FrameTimeout type that ensures they're normalized. r=edwin
2016-07-20 16:30:28 -07:00
Seth Fowler
4306ec9de5
Bug 1288040 (Part 3) - Get rid of RefreshResult.error, a field which nothing cares about. r=edwin
2016-07-20 16:30:24 -07:00
Seth Fowler
4af805ced1
Bug 1288040 (Part 2) - Don't reset the last composited frame index when we reset animation. r=edwin
2016-07-20 16:30:21 -07:00
Seth Fowler
34caf5552c
Bug 1288040 (Part 1) - Separate FrameAnimator's state into a separate class, AnimationState. r=edwin
2016-07-20 16:30:19 -07:00
Seth Fowler
17074a1b49
Bug 1255107 (Part 3) - Use SurfacePipe in the PNG decoder. r=njn
2016-06-25 14:04:05 -07:00
Daniel Holbert
7d7a7ec332
Bug 1242778: Add MOZ_COUNT_CTOR & MOZ_COUNT_DTOR calls to track leaks of imagelib's FrameAnimator class. r=tn
...
Also add crashtest with a corrupt animated PNG image that causes a leak to be reported (thanks to these MOZ_COUNT calls). This leak is fixed by the patch on separate bug 1237709
.
2016-01-26 11:08:26 -08:00
Seth Fowler
7e909725b3
Bug 1194059 (Part 2) - Always detect IS_ANIMATED during the metadata decode. r=tn
2015-08-14 00:37:13 -07:00
Seth Fowler
95894af506
Bug 1139641 - Return more information from SurfaceCache::Lookup and SurfaceCache::LookupBestMatch. r=dholbert
...
--HG--
extra : rebase_source : cc4e6059cea739b96ead71b4922ace59b543bd34
2015-06-30 18:57:03 -07:00
Carsten "Tomcat" Book
7b1fb1fb5c
Backed out changeset dd25b4d148af (bug 1139641) for bustage on a CLOSED TREE
2015-06-03 08:51:36 +02:00
Seth Fowler
58544b3813
Bug 1139641 - Return more information from SurfaceCache::Lookup and SurfaceCache::LookupBestMatch. r=dholbert
2015-06-02 23:30:14 -07:00
Birunthan Mohanathas
db2ca75447
Bug 1038536 - Flatten image/src/ directory. r=seth
...
--HG--
rename : image/src/BMPFileHeaders.h => image/BMPFileHeaders.h
rename : image/src/ClippedImage.cpp => image/ClippedImage.cpp
rename : image/src/ClippedImage.h => image/ClippedImage.h
rename : image/src/DecodePool.cpp => image/DecodePool.cpp
rename : image/src/DecodePool.h => image/DecodePool.h
rename : image/src/Decoder.cpp => image/Decoder.cpp
rename : image/src/Decoder.h => image/Decoder.h
rename : image/src/Downscaler.cpp => image/Downscaler.cpp
rename : image/src/Downscaler.h => image/Downscaler.h
rename : image/src/DynamicImage.cpp => image/DynamicImage.cpp
rename : image/src/DynamicImage.h => image/DynamicImage.h
rename : image/src/FrameAnimator.cpp => image/FrameAnimator.cpp
rename : image/src/FrameAnimator.h => image/FrameAnimator.h
rename : image/src/FrozenImage.cpp => image/FrozenImage.cpp
rename : image/src/FrozenImage.h => image/FrozenImage.h
rename : image/src/ICOFileHeaders.h => image/ICOFileHeaders.h
rename : image/src/IProgressObserver.h => image/IProgressObserver.h
rename : image/src/Image.cpp => image/Image.cpp
rename : image/src/Image.h => image/Image.h
rename : image/src/ImageFactory.cpp => image/ImageFactory.cpp
rename : image/src/ImageFactory.h => image/ImageFactory.h
rename : image/src/ImageMetadata.cpp => image/ImageMetadata.cpp
rename : image/src/ImageMetadata.h => image/ImageMetadata.h
rename : image/src/ImageOps.cpp => image/ImageOps.cpp
rename : image/src/ImageOps.h => image/ImageOps.h
rename : image/src/ImageRegion.h => image/ImageRegion.h
rename : image/src/ImageURL.h => image/ImageURL.h
rename : image/src/ImageWrapper.cpp => image/ImageWrapper.cpp
rename : image/src/ImageWrapper.h => image/ImageWrapper.h
rename : image/src/MultipartImage.cpp => image/MultipartImage.cpp
rename : image/src/MultipartImage.h => image/MultipartImage.h
rename : image/src/Orientation.h => image/Orientation.h
rename : image/src/OrientedImage.cpp => image/OrientedImage.cpp
rename : image/src/OrientedImage.h => image/OrientedImage.h
rename : image/src/ProgressTracker.cpp => image/ProgressTracker.cpp
rename : image/src/ProgressTracker.h => image/ProgressTracker.h
rename : image/src/RasterImage.cpp => image/RasterImage.cpp
rename : image/src/RasterImage.h => image/RasterImage.h
rename : image/src/SVGDocumentWrapper.cpp => image/SVGDocumentWrapper.cpp
rename : image/src/SVGDocumentWrapper.h => image/SVGDocumentWrapper.h
rename : image/src/ScriptedNotificationObserver.cpp => image/ScriptedNotificationObserver.cpp
rename : image/src/ScriptedNotificationObserver.h => image/ScriptedNotificationObserver.h
rename : image/src/ShutdownTracker.cpp => image/ShutdownTracker.cpp
rename : image/src/ShutdownTracker.h => image/ShutdownTracker.h
rename : image/src/SourceBuffer.cpp => image/SourceBuffer.cpp
rename : image/src/SourceBuffer.h => image/SourceBuffer.h
rename : image/src/SurfaceCache.cpp => image/SurfaceCache.cpp
rename : image/src/SurfaceCache.h => image/SurfaceCache.h
rename : image/src/VectorImage.cpp => image/VectorImage.cpp
rename : image/src/VectorImage.h => image/VectorImage.h
rename : image/src/imgFrame.cpp => image/imgFrame.cpp
rename : image/src/imgFrame.h => image/imgFrame.h
rename : image/src/imgLoader.cpp => image/imgLoader.cpp
rename : image/src/imgLoader.h => image/imgLoader.h
rename : image/src/imgRequest.cpp => image/imgRequest.cpp
rename : image/src/imgRequest.h => image/imgRequest.h
rename : image/src/imgRequestProxy.cpp => image/imgRequestProxy.cpp
rename : image/src/imgRequestProxy.h => image/imgRequestProxy.h
rename : image/src/imgTools.cpp => image/imgTools.cpp
rename : image/src/imgTools.h => image/imgTools.h
2015-05-14 20:52:05 -07:00