[Webkit-unassigned] [Bug 110778] Unlock partially decoded images after passing them to the ImageDecodingStore
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Wed Feb 27 11:00:24 PST 2013
https://bugs.webkit.org/show_bug.cgi?id=110778
--- Comment #5 from Hin-Chung Lam <hclam at google.com> 2013-02-27 11:02:48 PST ---
(From update of attachment 190101)
View in context: https://bugs.webkit.org/attachment.cgi?id=190101&action=review
>>>> Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:145
>>>> + cachedDecoder->lockFrameBuffers();
>>>
>>> You want to call this in ImageDecodingStore::lockCache() such that if lockFrameBuffers fails then a new decoder is created.
>>
>> The lockFrameBuffers() will not fail here. We reach here only if ImageDecodingStore::lockCache() succeeds. Since that call will lock the DiscardablePixelRef, so lockFrameBuffers() will not fail. It only increments the pixelref lock count by 1.
>> Maybe I should add a comment to mention that the FrameBuffer is already locked when this gets called, so we are safe to use the same decoder.
>
> One more thing: ImageDecodingStore doesn't know the status of the decoding, while ImageFrameGenerator keeps track of the decoding status.
> If we lock the frameBuffer inside lockCache(), imageDecodingStore will have a problem to determine when to unlock the framebuffer. The next call can be either unlockCache, insertAndLockCache, or overwriteAndLockCache.
> Since this lock is associated with decoder, i think it should belong to ImageFrameGenerator, not the ImageDecodingStore. ideas?
This is probably okay for now for single frame images but won't work well for multiframe images.
Please add a comment here to explain why this call is safe and that it only works for single frame images. I would even do this:
bool frameBuffersLocked = cacheDecoder->lockFrameBuffers();
ASSERT_UNUSED(frameBuffersLocked, frameBuffersLocked);
>>> Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:150
>>> + cachedDecoder->unlockFrameBuffers();
>>
>> Move this to ImageDecodingStore as well.
>
> same reason
Also add an explanation here why unlock is needed. The reason here is because ImageDecodingStore deletes the ImageDecoder if image is complete.
>>> Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:178
>>> + decoder->unlockFrameBuffers();
>>
>> Move this to ImageDecodingStore.
>
> same reason, we are safe to call this here.
Same here, add explanation please.
> Source/WebCore/platform/image-decoders/ImageDecoder.h:426
> + virtual void lockFrameBuffers()
Can you change this to bool? It returns true if all frames are locked, false otherwise.
--
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the webkit-unassigned
mailing list