Closed Bug 1443232 Opened 3 years ago Closed 3 years ago

Assertion failure: mGetIndex == aExpectedFrame, at src/image/AnimationFrameBuffer.cpp:187

Categories

(Core :: ImageLib, defect, P3)

defect

Tracking

()

RESOLVED FIXED
mozilla60
Tracking Status
firefox-esr52 --- unaffected
firefox58 --- unaffected
firefox59 --- unaffected
firefox60 --- fixed

People

(Reporter: tsmith, Assigned: tnikkel)

References

(Blocks 1 open bug)

Details

(Keywords: assertion, regression, testcase, Whiteboard: [gfx-noted])

Attachments

(3 files, 3 obsolete files)

Attached file testcase.html
Assertion failure: mGetIndex == aExpectedFrame, at src/image/AnimationFrameBuffer.cpp:187

#0 mozilla::image::AnimationFrameBuffer::AdvanceTo(unsigned long) src/image/AnimationFrameBuffer.cpp:183:3
#1 mozilla::image::AnimationSurfaceProvider::Advance(unsigned long) src/image/AnimationSurfaceProvider.cpp:119:30
#2 mozilla::image::FrameAnimator::AdvanceFrame(mozilla::image::AnimationState&, mozilla::image::DrawableSurface&, mozilla::TimeStamp) src/image/FrameAnimator.cpp:378:11
#3 mozilla::image::FrameAnimator::RequestRefresh(mozilla::image::AnimationState&, mozilla::TimeStamp const&, bool) src/image/FrameAnimator.cpp:451:30
#4 mozilla::image::RasterImage::RequestRefresh(mozilla::TimeStamp const&) src/image/RasterImage.cpp:173:27
#5 nsRefreshDriver::Tick(long, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:2035:27
#6 mozilla::RefreshDriverTimer::TickRefreshDrivers(long, mozilla::TimeStamp, nsTArray<RefPtr<nsRefreshDriver> >&) src/layout/base/nsRefreshDriver.cpp:310:7
#7 mozilla::RefreshDriverTimer::Tick(long, mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:332:5
#8 mozilla::VsyncRefreshDriverTimer::RunRefreshDrivers(mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:773:5
#9 mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::TickRefreshDriver(mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:686:35
#10 mozilla::VsyncRefreshDriverTimer::RefreshDriverVsyncObserver::NotifyVsync(mozilla::TimeStamp) src/layout/base/nsRefreshDriver.cpp:587:9
#11 mozilla::layout::VsyncChild::RecvNotify(mozilla::TimeStamp const&) src/layout/ipc/VsyncChild.cpp:68:16
#12 mozilla::layout::PVsyncChild::OnMessageReceived(IPC::Message const&) src/obj-firefox/ipc/ipdl/PVsyncChild.cpp:155:20
#13 mozilla::ipc::PBackgroundChild::OnMessageReceived(IPC::Message const&) src/obj-firefox/ipc/ipdl/PBackgroundChild.cpp:1943:28
#14 mozilla::ipc::MessageChannel::DispatchAsyncMessage(IPC::Message const&) src/ipc/glue/MessageChannel.cpp:2133:25
#15 mozilla::ipc::MessageChannel::DispatchMessage(IPC::Message&&) src/ipc/glue/MessageChannel.cpp:2063:17
#16 mozilla::ipc::MessageChannel::RunMessage(mozilla::ipc::MessageChannel::MessageTask&) src/ipc/glue/MessageChannel.cpp:1909:5
#17 mozilla::ipc::MessageChannel::MessageTask::Run() src/ipc/glue/MessageChannel.cpp:1942:15
#18 nsThread::ProcessNextEvent(bool, bool*) src/xpcom/threads/nsThread.cpp:1040:14
#19 NS_ProcessNextEvent(nsIThread*, bool) src/xpcom/threads/nsThreadUtils.cpp:517:10
#20 mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:125:5
#21 MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:326:10
#22 MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:299:3
#23 nsBaseAppShell::Run() src/widget/nsBaseAppShell.cpp:157:27
#24 XRE_RunAppShell() src/toolkit/xre/nsEmbedFunctions.cpp:892:22
#25 mozilla::ipc::MessagePumpForChildProcess::Run(base::MessagePump::Delegate*) src/ipc/glue/MessagePump.cpp:269:9
#26 MessageLoop::RunInternal() src/ipc/chromium/src/base/message_loop.cc:326:10
#27 MessageLoop::Run() src/ipc/chromium/src/base/message_loop.cc:299:3
#28 XRE_InitChildProcess(int, char**, XREChildData const*) src/toolkit/xre/nsEmbedFunctions.cpp:718:34
#29 content_process_main(mozilla::Bootstrap*, int, char**) src/browser/app/../../ipc/contentproc/plugin-container.cpp:50:30
#30 main src/browser/app/nsBrowserApp.cpp:280:18
#31 __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:291
#32 _start (firefox+0x423444)
Flags: in-testsuite?
Attached image testcase.gif
Regression from bug 523950.
Assignee: nobody → aosmond
Status: NEW → ASSIGNED
Depends on: 523950
Keywords: regression
Priority: -- → P3
Whiteboard: [gfx-noted]
Attached patch patch (obsolete) — Splinter Review
Assignee: aosmond → tnikkel
Attachment #8956322 - Flags: review?(aosmond)
Attached patch patch v2 (obsolete) — Splinter Review
Actually that's not the right condition. The length of the exist frames doesn't really tell us where we are inserting. Instead we want to expose on the decoder whether this frame is going to be reported to update the frame count on the image and hence FrameAnimator. Thats done via TakeCompleteFrameCount which is used to NotifyProgress and NotifyDecodeComplete which will update the frame count.
Attachment #8956322 - Attachment is obsolete: true
Attachment #8956322 - Flags: review?(aosmond)
Attachment #8956350 - Flags: review?(aosmond)
Attached patch patch v3 (obsolete) — Splinter Review
Attachment #8956350 - Attachment is obsolete: true
Attachment #8956350 - Flags: review?(aosmond)
Attachment #8956367 - Flags: review?(aosmond)
Attachment #8956367 - Flags: review?(aosmond) → review+
Attached patch patch v4Splinter Review
This is less hacky and captures better what we want.
Attachment #8956367 - Attachment is obsolete: true
Attachment #8957078 - Flags: review?(aosmond)
Attachment #8957078 - Flags: review?(aosmond) → review+
Pushed by tnikkel@gmail.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/6b039167ba76
Don't insert frames into our AnimationFrameBuffer that we consider in error and unusable. r=aosmond
Pushed by tnikkel@gmail.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/b4faaa640ed5
Disable reftest for now to investigate why it doesn't work on android.
https://hg.mozilla.org/mozilla-central/rev/6b039167ba76
https://hg.mozilla.org/mozilla-central/rev/b4faaa640ed5
Status: ASSIGNED → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla60
Flags: in-testsuite? → in-testsuite+
You need to log in before you can comment on or make changes to this bug.