Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: a58677958ef8fc58e910606655c7b06191d788dd
      
https://github.com/WebKit/WebKit/commit/a58677958ef8fc58e910606655c7b06191d788dd
  Author: Taher Ali <[email protected]>
  Date:   2026-06-12 (Fri, 12 Jun 2026)

  Changed paths:
    M LayoutTests/fast/images/stopped-animation-deleted-image.html
    A LayoutTests/svg/custom/resources/animated-gif-for-use-test.gif
    A LayoutTests/svg/custom/use-animated-image-opacity-change-expected.txt
    A LayoutTests/svg/custom/use-animated-image-opacity-change.html
    M Source/WebCore/loader/cache/CachedImage.cpp
    M Source/WebCore/loader/cache/CachedImage.h
    M Source/WebCore/loader/cache/CachedImageClient.h
    M Source/WebCore/rendering/RenderImageResource.cpp
    M Source/WebCore/rendering/RenderObject.h

  Log Message:
  -----------
  Animated GIF freezes when presentation attributes are changed on SVG image 
referenced by use element
https://bugs.webkit.org/show_bug.cgi?id=314093
rdar://179414226

Reviewed by Said Abou-Hallawa.

When an SVG <image> element displaying an animated GIF is referenced by a
<use> element, rapidly changing a presentation attribute like opacity causes
the animation to freeze.

Each setAttribute call triggers invalidateInstances(), which rebuilds the
<use> shadow tree. The clone's renderer destruction calls
RenderImageResource::willBeDestroyed(), which unconditionally calls
stopAnimation() on the shared BitmapImage. Since the animation timer is
killed faster than the frame duration, it never fires to advance frames.

The previous landing of this fix (313531@main) used 
CachedImage::isVisibleInViewport()
to decide whether to stop the animation, but it was reverted because it caused a
MotionMark performance regression and a crash.

This version instead introduces CachedImage::numberOfRendererClients(), which
walks the client list and counts only renderer clients.

Test: svg/custom/use-animated-image-opacity-change.html

* LayoutTests/fast/images/stopped-animation-deleted-image.html:
* LayoutTests/svg/custom/resources/animated-gif-for-use-test.gif: Added.
* LayoutTests/svg/custom/use-animated-image-opacity-change-expected.txt: Added.
* LayoutTests/svg/custom/use-animated-image-opacity-change.html: Added.
* Source/WebCore/loader/cache/CachedImage.cpp:
(WebCore::CachedImage::hasRendererClients const):
* Source/WebCore/loader/cache/CachedImage.h:
* Source/WebCore/loader/cache/CachedImageClient.h:
(WebCore::CachedImageClient::isRendererClient const):
* Source/WebCore/rendering/RenderImageResource.cpp:
(WebCore::RenderImageResource::willBeDestroyed):
* Source/WebCore/rendering/RenderObject.h:

Canonical link: https://commits.webkit.org/315094@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to