Title: [218031] trunk/Source/WebCore
Revision
218031
Author
[email protected]
Date
2017-06-09 17:37:06 -0700 (Fri, 09 Jun 2017)

Log Message

Unreviewed, rolling out r218003.

This change caused assertion failures in existing LayoutTests.

Reverted changeset:

"Image should clear its ImageObserver* when CachedImage
releases the last reference to its RefCounted<ImageObserver>"
https://bugs.webkit.org/show_bug.cgi?id=173077
http://trac.webkit.org/changeset/218003

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (218030 => 218031)


--- trunk/Source/WebCore/ChangeLog	2017-06-10 00:08:28 UTC (rev 218030)
+++ trunk/Source/WebCore/ChangeLog	2017-06-10 00:37:06 UTC (rev 218031)
@@ -1,3 +1,16 @@
+2017-06-09  Ryan Haddad  <[email protected]>
+
+        Unreviewed, rolling out r218003.
+
+        This change caused assertion failures in existing LayoutTests.
+
+        Reverted changeset:
+
+        "Image should clear its ImageObserver* when CachedImage
+        releases the last reference to its RefCounted<ImageObserver>"
+        https://bugs.webkit.org/show_bug.cgi?id=173077
+        http://trac.webkit.org/changeset/218003
+
 2017-06-09  Jiewen Tan  <[email protected]>
 
         [WebCrypto] Remove unsupported CryptoAlgorithmIdentifier

Modified: trunk/Source/WebCore/loader/cache/CachedImage.cpp (218030 => 218031)


--- trunk/Source/WebCore/loader/cache/CachedImage.cpp	2017-06-10 00:08:28 UTC (rev 218030)
+++ trunk/Source/WebCore/loader/cache/CachedImage.cpp	2017-06-10 00:37:06 UTC (rev 218031)
@@ -101,7 +101,7 @@
     m_image = image.m_image;
     m_imageObserver = image.m_imageObserver;
     if (m_imageObserver)
-        m_imageObserver->cachedImages().add(this);
+        m_imageObserver->add(*this);
 
     if (m_image && is<SVGImage>(*m_image))
         m_svgImageCache = std::make_unique<SVGImageCache>(&downcast<SVGImage>(*m_image));
@@ -326,7 +326,8 @@
 
 CachedImage::CachedImageObserver::CachedImageObserver(CachedImage& image)
 {
-    m_cachedImages.add(&image);
+    m_cachedImages.reserveInitialCapacity(1);
+    m_cachedImages.append(&image);
 }
 
 void CachedImage::CachedImageObserver::decodedSizeChanged(const Image& image, long long delta)
@@ -366,21 +367,10 @@
 
 inline void CachedImage::clearImage()
 {
-    if (!m_image)
-        return;
-
     if (m_imageObserver) {
-        m_imageObserver->cachedImages().remove(this);
-
-        if (m_imageObserver->cachedImages().isEmpty()) {
-            ASSERT(m_image->hasOneRef());
-            ASSERT(m_imageObserver->hasOneRef());
-            m_image->setImageObserver(nullptr);
-        }
-
+        m_imageObserver->remove(*this);
         m_imageObserver = nullptr;
     }
-
     m_image = nullptr;
 }
 

Modified: trunk/Source/WebCore/loader/cache/CachedImage.h (218030 => 218031)


--- trunk/Source/WebCore/loader/cache/CachedImage.h	2017-06-10 00:08:28 UTC (rev 218030)
+++ trunk/Source/WebCore/loader/cache/CachedImage.h	2017-06-10 00:37:06 UTC (rev 218031)
@@ -120,14 +120,14 @@
     class CachedImageObserver final : public RefCounted<CachedImageObserver>, public ImageObserver {
     public:
         static Ref<CachedImageObserver> create(CachedImage& image) { return adoptRef(*new CachedImageObserver(image)); }
-        HashSet<CachedImage*>& cachedImages() { return m_cachedImages; }
-        const HashSet<CachedImage*>& cachedImages() const { return m_cachedImages; }
+        void add(CachedImage& image) { m_cachedImages.append(&image); }
+        void remove(CachedImage& image) { m_cachedImages.removeFirst(&image); }
 
     private:
         explicit CachedImageObserver(CachedImage&);
 
         // ImageObserver API
-        URL sourceUrl() const override { return !m_cachedImages.isEmpty() ? (*m_cachedImages.begin())->url() : URL(); }
+        URL sourceUrl() const override { return !m_cachedImages.isEmpty() ? m_cachedImages[0]->url() : URL(); }
         void decodedSizeChanged(const Image&, long long delta) final;
         void didDraw(const Image&) final;
 
@@ -135,7 +135,7 @@
         void imageFrameAvailable(const Image&, ImageAnimatingState, const IntRect* changeRect = nullptr) final;
         void changedInRect(const Image&, const IntRect*) final;
 
-        HashSet<CachedImage*> m_cachedImages;
+        Vector<CachedImage*> m_cachedImages;
     };
 
     void decodedSizeChanged(const Image&, long long delta);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to