Changeset 220934 in webkit
- Timestamp:
- Aug 18, 2017 2:40:42 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r220933 r220934 1 2017-08-18 Said Abou-Hallawa <sabouhallawa@apple.com> 2 3 Followup (r220289): RenderImageResourceStyleImage code clean up 4 https://bugs.webkit.org/show_bug.cgi?id=175444 5 6 Reviewed by Darin Adler. 7 8 RenderImageResourceStyleImage may be created with a StyleImage of type 9 StyleGeneratedImage. It may also be associated with a CachedImage which 10 is loaded through a source URL. In this case, adding and removing m_renderer 11 as a client of the CachedImage will be done through 12 RenderImageResource::setCachedImage(). 13 14 RenderImageResource::setCachedImage() is already called from 15 ImageLoader::updateRenderer() when the CachedImage finishes loading. This 16 call adds m_renderer to the clients of the CachedImage. 17 RenderImageResource::setCachedImage() will also be called from 18 RenderImageResourceStyleImage::shutdown() via RenderImageResource::shutdown() 19 to remove m_renderer from the clients of CachedImage by passing a null pointer. 20 21 * rendering/RenderImage.cpp: 22 (WebCore::RenderImage::styleWillChange): 23 * rendering/RenderImageResource.cpp: 24 (WebCore::RenderImageResource::initialize): 25 (WebCore::RenderImageResource::shutdown): 26 (WebCore::RenderImageResource::setCachedImage): 27 (WebCore::RenderImageResource::resetAnimation): 28 (WebCore::RenderImageResource::image const): 29 (WebCore::RenderImageResource::setContainerSizeForRenderer): 30 (WebCore::RenderImageResource::imageSize const): 31 (WebCore::RenderImageResource::~RenderImageResource): Deleted. 32 (WebCore::RenderImageResource::errorOccurred const): Deleted. 33 (WebCore::RenderImageResource::imageHasRelativeWidth const): Deleted. 34 (WebCore::RenderImageResource::imageHasRelativeHeight const): Deleted. 35 (WebCore::RenderImageResource::intrinsicSize const): Deleted. 36 (WebCore::RenderImageResource::getImageSize const): Deleted. 37 * rendering/RenderImageResource.h: 38 (WebCore::RenderImageResource::initialize): 39 (WebCore::RenderImageResource::renderer const): 40 (WebCore::RenderImageResource::errorOccurred const): 41 (WebCore::RenderImageResource::imageHasRelativeWidth const): 42 (WebCore::RenderImageResource::imageHasRelativeHeight const): 43 (WebCore::RenderImageResource::imageSize const): 44 (WebCore::RenderImageResource::intrinsicSize const): 45 (WebCore::RenderImageResource::imagePtr const): 46 * rendering/RenderImageResourceStyleImage.cpp: 47 (WebCore::RenderImageResourceStyleImage::initialize): 48 (WebCore::RenderImageResourceStyleImage::shutdown): 49 (WebCore::RenderImageResourceStyleImage::image const): 50 (WebCore::RenderImageResourceStyleImage::setContainerSizeForRenderer): 51 (WebCore::RenderImageResourceStyleImage::~RenderImageResourceStyleImage): Deleted. 52 * rendering/RenderImageResourceStyleImage.h: 53 * rendering/RenderSnapshottedPlugIn.cpp: 54 (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): 55 * rendering/svg/RenderSVGImage.cpp: 56 (WebCore::RenderSVGImage::RenderSVGImage): 57 1 58 2017-08-18 Jiewen Tan <jiewen_tan@apple.com> 2 59 -
trunk/Source/WebCore/rendering/RenderImage.cpp
r219961 r220934 209 209 { 210 210 if (!hasInitializedStyle()) 211 imageResource().initialize( this);211 imageResource().initialize(*this); 212 212 RenderReplaced::styleWillChange(diff, newStyle); 213 213 } -
trunk/Source/WebCore/rendering/RenderImageResource.cpp
r220073 r220934 41 41 } 42 42 43 RenderImageResource::~RenderImageResource() 44 { 45 } 46 47 void RenderImageResource::initialize(RenderElement* renderer) 43 void RenderImageResource::initialize(RenderElement& renderer, CachedImage* styleCachedImage) 48 44 { 49 45 ASSERT(!m_renderer); 50 ASSERT(renderer); 51 m_renderer = renderer; 46 ASSERT(!m_cachedImage); 47 m_renderer = &renderer; 48 m_cachedImage = styleCachedImage; 49 m_cachedImageRemoveClientIsNeeded = !styleCachedImage; 52 50 } 53 51 54 52 void RenderImageResource::shutdown() 53 { 54 image()->stopAnimation(); 55 setCachedImage(nullptr); 56 } 57 58 void RenderImageResource::setCachedImage(CachedImage* newImage) 59 { 60 if (m_cachedImage == newImage) 61 return; 62 63 ASSERT(m_renderer); 64 if (m_cachedImage && m_cachedImageRemoveClientIsNeeded) 65 m_cachedImage->removeClient(*m_renderer); 66 m_cachedImage = newImage; 67 m_cachedImageRemoveClientIsNeeded = true; 68 if (!m_cachedImage) 69 return; 70 71 m_cachedImage->addClient(*m_renderer); 72 if (m_cachedImage->errorOccurred()) 73 m_renderer->imageChanged(m_cachedImage.get()); 74 } 75 76 void RenderImageResource::resetAnimation() 55 77 { 56 78 if (!m_cachedImage) … … 58 80 59 81 ASSERT(m_renderer); 60 image()->stopAnimation();61 m_cachedImage->removeClient(*m_renderer);62 }63 64 void RenderImageResource::setCachedImage(CachedImage* newImage)65 {66 ASSERT(m_renderer);67 68 if (m_cachedImage == newImage)69 return;70 71 if (m_cachedImage)72 m_cachedImage->removeClient(*m_renderer);73 m_cachedImage = newImage;74 if (m_cachedImage) {75 m_cachedImage->addClient(*m_renderer);76 if (m_cachedImage->errorOccurred())77 m_renderer->imageChanged(m_cachedImage.get());78 }79 }80 81 void RenderImageResource::resetAnimation()82 {83 ASSERT(m_renderer);84 85 if (!m_cachedImage)86 return;87 88 82 image()->resetAnimation(); 89 83 … … 94 88 RefPtr<Image> RenderImageResource::image(const IntSize&) const 95 89 { 96 return m_cachedImage ? m_cachedImage->imageForRenderer(m_renderer) : &Image::nullImage(); 97 } 98 99 bool RenderImageResource::errorOccurred() const 100 { 101 return m_cachedImage && m_cachedImage->errorOccurred(); 90 if (!m_cachedImage) 91 return &Image::nullImage(); 92 if (auto image = m_cachedImage->imageForRenderer(m_renderer)) 93 return image; 94 return &Image::nullImage(); 102 95 } 103 96 104 97 void RenderImageResource::setContainerSizeForRenderer(const IntSize& imageContainerSize) 105 98 { 99 if (!m_cachedImage) 100 return; 106 101 ASSERT(m_renderer); 107 if (m_cachedImage) 108 m_cachedImage->setContainerSizeForRenderer(m_renderer, imageContainerSize, m_renderer->style().effectiveZoom()); 102 m_cachedImage->setContainerSizeForRenderer(m_renderer, imageContainerSize, m_renderer->style().effectiveZoom()); 109 103 } 110 104 111 bool RenderImageResource::imageHasRelativeWidth() const 112 { 113 return m_cachedImage ? m_cachedImage->imageHasRelativeWidth() : false; 114 } 115 116 bool RenderImageResource::imageHasRelativeHeight() const 117 { 118 return m_cachedImage ? m_cachedImage->imageHasRelativeHeight() : false; 119 } 120 121 LayoutSize RenderImageResource::imageSize(float multiplier) const 122 { 123 return getImageSize(multiplier, CachedImage::UsedSize); 124 } 125 126 LayoutSize RenderImageResource::intrinsicSize(float multiplier) const 127 { 128 return getImageSize(multiplier, CachedImage::IntrinsicSize); 129 } 130 131 LayoutSize RenderImageResource::getImageSize(float multiplier, CachedImage::SizeType type) const 105 LayoutSize RenderImageResource::imageSize(float multiplier, CachedImage::SizeType type) const 132 106 { 133 107 if (!m_cachedImage) -
trunk/Source/WebCore/rendering/RenderImageResource.h
r217012 r220934 39 39 public: 40 40 RenderImageResource(); 41 virtual ~RenderImageResource() ;41 virtual ~RenderImageResource() = default; 42 42 43 virtual void initialize(RenderElement *);43 virtual void initialize(RenderElement& renderer) { initialize(renderer, nullptr); } 44 44 virtual void shutdown(); 45 45 … … 50 50 51 51 virtual RefPtr<Image> image(const IntSize& size = { }) const; 52 virtual bool errorOccurred() const ;52 virtual bool errorOccurred() const { return m_cachedImage && m_cachedImage->errorOccurred(); } 53 53 54 54 virtual void setContainerSizeForRenderer(const IntSize&); 55 virtual bool imageHasRelativeWidth() const;56 virtual bool imageHasRelativeHeight() const;57 55 58 virtual LayoutSize imageSize(float multiplier) const; 59 virtual LayoutSize intrinsicSize(float multiplier) const; 56 virtual bool imageHasRelativeWidth() const { return m_cachedImage && m_cachedImage->imageHasRelativeWidth(); } 57 virtual bool imageHasRelativeHeight() const { return m_cachedImage && m_cachedImage->imageHasRelativeHeight(); } 58 59 inline LayoutSize imageSize(float multiplier) const { return imageSize(multiplier, CachedImage::UsedSize); } 60 inline LayoutSize intrinsicSize(float multiplier) const { return imageSize(multiplier, CachedImage::IntrinsicSize); } 60 61 61 62 virtual WrappedImagePtr imagePtr() const { return m_cachedImage.get(); } 62 63 63 64 protected: 65 RenderElement* renderer() const { return m_renderer; } 66 void initialize(RenderElement&, CachedImage*); 67 68 private: 69 virtual LayoutSize imageSize(float multiplier, CachedImage::SizeType) const; 70 64 71 RenderElement* m_renderer { nullptr }; 65 72 CachedResourceHandle<CachedImage> m_cachedImage; 66 67 private: 68 LayoutSize getImageSize(float multiplier, CachedImage::SizeType) const; 73 bool m_cachedImageRemoveClientIsNeeded { true }; 69 74 }; 70 75 -
trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.cpp
r220289 r220934 40 40 } 41 41 42 RenderImageResourceStyleImage::~RenderImageResourceStyleImage()42 void RenderImageResourceStyleImage::initialize(RenderElement& renderer) 43 43 { 44 } 45 46 void RenderImageResourceStyleImage::initialize(RenderElement* renderer) 47 { 48 RenderImageResource::initialize(renderer); 49 50 if (m_styleImage->isCachedImage()) 51 m_cachedImage = m_styleImage.get().cachedImage(); 52 53 m_styleImage->addClient(m_renderer); 44 RenderImageResource::initialize(renderer, m_styleImage->isCachedImage() ? m_styleImage.get().cachedImage() : nullptr); 45 m_styleImage->addClient(this->renderer()); 54 46 } 55 47 56 48 void RenderImageResourceStyleImage::shutdown() 57 49 { 58 ASSERT(m_renderer); 59 image()->stopAnimation(); 60 m_styleImage->removeClient(m_renderer); 61 if (!m_styleImage->isCachedImage() && m_cachedImage) 62 m_cachedImage->removeClient(*m_renderer); 63 m_cachedImage = nullptr; 50 ASSERT(renderer()); 51 RenderImageResource::shutdown(); 52 m_styleImage->removeClient(renderer()); 64 53 } 65 54 … … 69 58 if (m_styleImage->isPending()) 70 59 return &Image::nullImage(); 71 if (auto image = m_styleImage->image( m_renderer, size))60 if (auto image = m_styleImage->image(renderer(), size)) 72 61 return image; 73 62 return &Image::nullImage(); … … 76 65 void RenderImageResourceStyleImage::setContainerSizeForRenderer(const IntSize& size) 77 66 { 78 ASSERT( m_renderer);79 m_styleImage->setContainerSizeForRenderer( m_renderer, size, m_renderer->style().effectiveZoom());67 ASSERT(renderer()); 68 m_styleImage->setContainerSizeForRenderer(renderer(), size, renderer()->style().effectiveZoom()); 80 69 } 81 70 -
trunk/Source/WebCore/rendering/RenderImageResourceStyleImage.h
r216728 r220934 37 37 public: 38 38 explicit RenderImageResourceStyleImage(StyleImage&); 39 virtual ~RenderImageResourceStyleImage();40 39 41 40 private: 42 void initialize(RenderElement *) override;43 void shutdown() override;41 void initialize(RenderElement&) final; 42 void shutdown() final; 44 43 45 RefPtr<Image> image(const IntSize& = { }) const override;46 bool errorOccurred() const override{ return m_styleImage->errorOccurred(); }44 RefPtr<Image> image(const IntSize& = { }) const final; 45 bool errorOccurred() const final { return m_styleImage->errorOccurred(); } 47 46 48 void setContainerSizeForRenderer(const IntSize&) override; 49 bool imageHasRelativeWidth() const override { return m_styleImage->imageHasRelativeWidth(); } 50 bool imageHasRelativeHeight() const override { return m_styleImage->imageHasRelativeHeight(); } 47 void setContainerSizeForRenderer(const IntSize&) final; 51 48 52 LayoutSize imageSize(float multiplier) const override { return LayoutSize(m_styleImage->imageSize(m_renderer, multiplier)); }53 LayoutSize intrinsicSize(float multiplier) const override { return LayoutSize(m_styleImage->imageSize(m_renderer, multiplier)); }49 bool imageHasRelativeWidth() const final { return m_styleImage->imageHasRelativeWidth(); } 50 bool imageHasRelativeHeight() const final { return m_styleImage->imageHasRelativeHeight(); } 54 51 55 WrappedImagePtr imagePtr() const override { return m_styleImage->data(); } 52 WrappedImagePtr imagePtr() const final { return m_styleImage->data(); } 53 LayoutSize imageSize(float multiplier, CachedImage::SizeType) const final { return LayoutSize(m_styleImage->imageSize(renderer(), multiplier)); } 56 54 57 55 Ref<StyleImage> m_styleImage; -
trunk/Source/WebCore/rendering/RenderSnapshottedPlugIn.cpp
r214173 r220934 53 53 , m_snapshotResource(std::make_unique<RenderImageResource>()) 54 54 { 55 m_snapshotResource->initialize( this);55 m_snapshotResource->initialize(*this); 56 56 } 57 57 -
trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp
r219961 r220934 50 50 , m_imageResource(std::make_unique<RenderImageResource>()) 51 51 { 52 imageResource().initialize( this);52 imageResource().initialize(*this); 53 53 } 54 54
Note: See TracChangeset
for help on using the changeset viewer.