[Webkit-unassigned] [Bug 239272] The first frame of an animation GIF is sometimes skipped on GTKWebKit and WinCairo

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Sun Apr 17 18:52:22 PDT 2022


https://bugs.webkit.org/show_bug.cgi?id=239272

--- Comment #4 from Fujii Hironori <Hironori.Fujii at sony.com> ---
I think there are two problems

1. If ImageDecoder::isAllDataReceived (EncodedDataStatus is Complete),
ImageDecoder::frameDurationAtIndex has to return the correct information.

2. If EncodedDataStatus is SizeAvailable, ImageDecoder::frameDurationAtIndex has to return the correct information for 0th frame,
because ImageSource::cacheMetadataAtIndex is called in the following callstack.

        WebKit2.dll!WebCore::ScalableImageDecoder::frameDurationAtIndex(unsigned __int64 index) Line 227        C++
        WebKit2.dll!WebCore::ImageSource::cacheMetadataAtIndex(unsigned __int64 index, WebCore::SubsamplingLevel subsamplingLevel, WebCore::DecodingStatus decodingStatus) Line 277     C++
        WebKit2.dll!WebCore::ImageSource::frameAtIndexCacheIfNeeded(unsigned __int64 index, WebCore::ImageFrame::Caching caching, const std::optional<enum WebCore::SubsamplingLevel> & subsamplingLevel) Line 450      C++
        WebKit2.dll!WebCore::ImageSource::firstFrameMetadataCacheIfNeeded<std::optional<WebCore::IntSize>>(std::optional<WebCore::IntSize> & cachedValue, WebCore::ImageSource::MetadataType metadataType, std::optional<WebCore::IntSize>(const WebCore::ImageFrame::*)() functor, WebCore::ImageFrame::Caching caching, const std::optional<enum WebCore::SubsamplingLevel> & subsamplingLevel) Line 513      C++
        WebKit2.dll!WebCore::ImageSource::densityCorrectedSize(WebCore::ImageOrientation orientation) Line 571  C++
        WebKit2.dll!WebCore::ImageSource::size(WebCore::ImageOrientation orientation) Line 583  C++
        WebKit2.dll!WebCore::BitmapImage::size(WebCore::ImageOrientation orientation) Line 89   C++
        WebKit2.dll!WebCore::Image::isNull() Line 110   C++
        WebKit2.dll!WebCore::CachedImage::updateBufferInternal(const WebCore::SharedBuffer & data) Line 506     C++
        WebKit2.dll!WebCore::CachedImage::updateBuffer(const WebCore::FragmentedSharedBuffer & buffer) Line 556 C++
        WebKit2.dll!WebCore::ImageDocument::updateDuringParsing() Line 147      C++
        WebKit2.dll!WebCore::ImageDocumentParser::appendBytes(WebCore::DocumentWriter & __formal, const unsigned char * __formal, unsigned __int64 __formal) Line 195   C++
        WebKit2.dll!WebCore::DocumentWriter::addData(const WebCore::SharedBuffer & data) Line 277       C++
        WebKit2.dll!WebCore::DocumentLoader::commitData(const WebCore::SharedBuffer & data) Line 1324   C++
        WebKit2.dll!WebKit::WebFrameLoaderClient::committedLoad(WebCore::DocumentLoader * loader, const WebCore::SharedBuffer & data) Line 1168 C++
        WebKit2.dll!WebCore::DocumentLoader::commitLoad(const WebCore::SharedBuffer & data) Line 1189   C++
        WebKit2.dll!WebCore::DocumentLoader::dataReceived(const WebCore::SharedBuffer & buffer) Line 1356       C++
        WebKit2.dll!WebCore::DocumentLoader::dataReceived(WebCore::CachedResource & resource, const WebCore::SharedBuffer & buffer) Line 1330   C++
        WebKit2.dll!WebCore::CachedRawResource::notifyClientsDataWasReceived(const WebCore::SharedBuffer & buffer) Line 145     C++
        WebKit2.dll!WebCore::CachedRawResource::updateBuffer(const WebCore::FragmentedSharedBuffer & data) Line 81      C++
        WebKit2.dll!WebCore::SubresourceLoader::didReceiveBuffer(const WebCore::FragmentedSharedBuffer & buffer, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) Line 545  C++
        WebKit2.dll!WebCore::ResourceLoader::didReceiveData(const WebCore::SharedBuffer & buffer, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) Line 560 C++
        WebKit2.dll!WebKit::WebResourceLoader::didReceiveData(const IPC::SharedBufferCopy & data, __int64 encodedDataLength) Line 241   C++
        WebKit2.dll!IPC::callMemberFunctionImpl<WebKit::WebResourceLoader,void (__cdecl WebKit::WebResourceLoader::*)(IPC::SharedBufferCopy const &,__int64),std::tuple<IPC::SharedBufferCopy,__int64>,0,1>(WebKit::WebResourceLoader * object, void(WebKit::WebResourceLoader::*)(const IPC::SharedBufferCopy &, __int64) function, std::tuple<IPC::SharedBufferCopy,__int64> && args, std::integer_sequence<unsigned __int64,0,1> __formal) Line 126  C++
        WebKit2.dll!IPC::callMemberFunction<WebKit::WebResourceLoader,void (__cdecl WebKit::WebResourceLoader::*)(IPC::SharedBufferCopy const &,__int64),std::tuple<IPC::SharedBufferCopy,__int64>,std::integer_sequence<unsigned __int64,0,1>>(std::tuple<IPC::SharedBufferCopy,__int64> && args, WebKit::WebResourceLoader * object, void(WebKit::WebResourceLoader::*)(const IPC::SharedBufferCopy &, __int64) function) Line 132    C++
        WebKit2.dll!IPC::handleMessage<Messages::WebResourceLoader::DidReceiveData,WebKit::WebResourceLoader,void (__cdecl WebKit::WebResourceLoader::*)(IPC::SharedBufferCopy const &,__int64)>(IPC::Connection & connection, IPC::Decoder & decoder, WebKit::WebResourceLoader * object, void(WebKit::WebResourceLoader::*)(const IPC::SharedBufferCopy &, __int64) function) Line 197        C++
        WebKit2.dll!WebKit::WebResourceLoader::didReceiveWebResourceLoaderMessage(IPC::Connection & connection, IPC::Decoder & decoder) Line 73 C++
        WebKit2.dll!WebKit::NetworkProcessConnection::didReceiveMessage(IPC::Connection & connection, IPC::Decoder & decoder) Line 103  C++
        WebKit2.dll!IPC::Connection::dispatchMessage(IPC::Decoder & decoder) Line 1109  C++
        WebKit2.dll!IPC::Connection::dispatchMessage(std::unique_ptr<IPC::Decoder,std::default_delete<IPC::Decoder>> message) Line 1155 C++
        WebKit2.dll!IPC::Connection::dispatchOneIncomingMessage() Line 1223     C++
        WebKit2.dll!`IPC::Connection::enqueueIncomingMessage'::`2'::<lambda_1>::operator()() Line 1073  C++
        WebKit2.dll!WTF::Detail::CallableWrapper<`IPC::Connection::enqueueIncomingMessage'::`2'::<lambda_1>,void>::call() Line 53       C++
        WTF.dll!WTF::Function<void __cdecl(void)>::operator()() Line 83 C++
        WTF.dll!WTF::RunLoop::performWork() Line 134    C++
        WTF.dll!WTF::RunLoop::wndProc(HWND__ * hWnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 57     C++
        WTF.dll!WTF::RunLoop::RunLoopWndProc(HWND__ * hWnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 39      C++
        [External Code] 
        WTF.dll!WTF::RunLoop::run() Line 74     C++
        WebKit2.dll!WebKit::AuxiliaryProcessMainBase<WebKit::WebProcess,1>::run(int argc, char * * argv) Line 71        C++
        WebKit2.dll!WebKit::AuxiliaryProcessMain<WebKit::WebProcessMainWin>(int argc, char * * argv) Line 97    C++
        WebKit2.dll!WebKit::WebProcessMain(int argc, char * * argv) Line 58     C++
        WebKitWebProcess.exe!main(int argc, char * * argv) Line 35      C++
        [External Code]

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20220418/839ab869/attachment.htm>


More information about the webkit-unassigned mailing list