Remove RenderLayerFilterInfo::m_dirtySourceRect

m_dirtySourceRect is duplicating the paint invalidation logic
by storing the exact same information.

On top of that, FilterEffectRendererHelper::prepareFilterEffect
already gets the invalidation rect from |dirtyRect|.

This change is covered by css3/filters/filter-repaint-*.html
that were added with m_dirtySourceRect in
https://bugs.webkit.org/show_bug.cgi?id=80323.

Review URL: https://codereview.chromium.org/453033005

git-svn-id: svn://svn.chromium.org/blink/trunk@180107 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 705d1307
...@@ -301,7 +301,7 @@ LayoutRect FilterEffectRenderer::computeSourceImageRectForDirtyRect(const Layout ...@@ -301,7 +301,7 @@ LayoutRect FilterEffectRenderer::computeSourceImageRectForDirtyRect(const Layout
return LayoutRect(rectForRepaint); return LayoutRect(rectForRepaint);
} }
bool FilterEffectRendererHelper::prepareFilterEffect(RenderLayer* renderLayer, const LayoutRect& filterBoxRect, const LayoutRect& dirtyRect, const LayoutRect& layerRepaintRect) bool FilterEffectRendererHelper::prepareFilterEffect(RenderLayer* renderLayer, const LayoutRect& filterBoxRect, const LayoutRect& dirtyRect)
{ {
ASSERT(m_haveFilterEffect && renderLayer->filterRenderer()); ASSERT(m_haveFilterEffect && renderLayer->filterRenderer());
m_renderLayer = renderLayer; m_renderLayer = renderLayer;
...@@ -337,11 +337,9 @@ bool FilterEffectRendererHelper::prepareFilterEffect(RenderLayer* renderLayer, c ...@@ -337,11 +337,9 @@ bool FilterEffectRendererHelper::prepareFilterEffect(RenderLayer* renderLayer, c
if (filter->hasFilterThatMovesPixels()) { if (filter->hasFilterThatMovesPixels()) {
if (hasUpdatedBackingStore) if (hasUpdatedBackingStore)
m_repaintRect = filterSourceRect; m_repaintRect = filterSourceRect;
else { else
m_repaintRect.unite(layerRepaintRect);
m_repaintRect.intersect(filterSourceRect); m_repaintRect.intersect(filterSourceRect);
} }
}
return true; return true;
} }
......
...@@ -57,7 +57,7 @@ public: ...@@ -57,7 +57,7 @@ public:
bool haveFilterEffect() const { return m_haveFilterEffect; } bool haveFilterEffect() const { return m_haveFilterEffect; }
bool hasStartedFilterEffect() const { return m_savedGraphicsContext; } bool hasStartedFilterEffect() const { return m_savedGraphicsContext; }
bool prepareFilterEffect(RenderLayer*, const LayoutRect& filterBoxRect, const LayoutRect& dirtyRect, const LayoutRect& layerRepaintRect); bool prepareFilterEffect(RenderLayer*, const LayoutRect& filterBoxRect, const LayoutRect& dirtyRect);
GraphicsContext* beginFilterEffect(GraphicsContext* oldContext); GraphicsContext* beginFilterEffect(GraphicsContext* oldContext);
GraphicsContext* applyFilterEffect(); GraphicsContext* applyFilterEffect();
......
...@@ -1814,18 +1814,12 @@ void RenderLayer::paintLayerContents(GraphicsContext* context, const LayerPainti ...@@ -1814,18 +1814,12 @@ void RenderLayer::paintLayerContents(GraphicsContext* context, const LayerPainti
LayerPaintingInfo localPaintingInfo(paintingInfo); LayerPaintingInfo localPaintingInfo(paintingInfo);
FilterEffectRendererHelper filterPainter(filterRenderer() && paintsWithFilters()); FilterEffectRendererHelper filterPainter(filterRenderer() && paintsWithFilters());
if (filterPainter.haveFilterEffect()) { if (filterPainter.haveFilterEffect()) {
RenderLayerFilterInfo* filterInfo = this->filterInfo(); ASSERT(this->filterInfo());
ASSERT(filterInfo);
LayoutRect filterRepaintRect = filterInfo->dirtySourceRect();
filterRepaintRect.move(offsetFromRoot.x(), offsetFromRoot.y());
if (!rootRelativeBoundsComputed) if (!rootRelativeBoundsComputed)
rootRelativeBounds = physicalBoundingBoxIncludingReflectionAndStackingChildren(paintingInfo.rootLayer, offsetFromRoot); rootRelativeBounds = physicalBoundingBoxIncludingReflectionAndStackingChildren(paintingInfo.rootLayer, offsetFromRoot);
if (filterPainter.prepareFilterEffect(this, rootRelativeBounds, paintingInfo.paintDirtyRect, filterRepaintRect)) { if (filterPainter.prepareFilterEffect(this, rootRelativeBounds, paintingInfo.paintDirtyRect)) {
// Now we know for sure, that the source image will be updated, so we can revert our tracking repaint rect back to zero.
filterInfo->resetDirtySourceRect();
// Rewire the old context to a memory buffer, so that we can capture the contents of the layer. // Rewire the old context to a memory buffer, so that we can capture the contents of the layer.
// NOTE: We saved the old context in the "transparencyLayerContext" local variable, to be able to start a transparency layer // NOTE: We saved the old context in the "transparencyLayerContext" local variable, to be able to start a transparency layer
// on the original context and avoid duplicating "beginFilterEffect" after each transparency layer call. Also, note that // on the original context and avoid duplicating "beginFilterEffect" after each transparency layer call. Also, note that
......
...@@ -53,10 +53,6 @@ public: ...@@ -53,10 +53,6 @@ public:
static RenderLayerFilterInfo* createFilterInfoForRenderLayerIfNeeded(RenderLayer*); static RenderLayerFilterInfo* createFilterInfoForRenderLayerIfNeeded(RenderLayer*);
static void removeFilterInfoForRenderLayer(RenderLayer*); static void removeFilterInfoForRenderLayer(RenderLayer*);
const LayoutRect& dirtySourceRect() const { return m_dirtySourceRect; }
void expandDirtySourceRect(const LayoutRect& rect) { m_dirtySourceRect.unite(rect); }
void resetDirtySourceRect() { m_dirtySourceRect = LayoutRect(); }
FilterEffectRenderer* renderer() const { return m_renderer.get(); } FilterEffectRenderer* renderer() const { return m_renderer.get(); }
void setRenderer(PassRefPtr<FilterEffectRenderer>); void setRenderer(PassRefPtr<FilterEffectRenderer>);
...@@ -71,7 +67,6 @@ private: ...@@ -71,7 +67,6 @@ private:
RenderLayer* m_layer; RenderLayer* m_layer;
RefPtr<FilterEffectRenderer> m_renderer; RefPtr<FilterEffectRenderer> m_renderer;
LayoutRect m_dirtySourceRect;
static RenderLayerFilterInfoMap* s_filterMap; static RenderLayerFilterInfoMap* s_filterMap;
WillBePersistentHeapVector<RefPtrWillBeMember<Element> > m_internalSVGReferences; WillBePersistentHeapVector<RefPtrWillBeMember<Element> > m_internalSVGReferences;
......
...@@ -128,9 +128,7 @@ void RenderLayerRepainter::setFilterBackendNeedsRepaintingInRect(const LayoutRec ...@@ -128,9 +128,7 @@ void RenderLayerRepainter::setFilterBackendNeedsRepaintingInRect(const LayoutRec
LayoutRect rectForRepaint = rect; LayoutRect rectForRepaint = rect;
m_renderer.style()->filterOutsets().expandRect(rectForRepaint); m_renderer.style()->filterOutsets().expandRect(rectForRepaint);
RenderLayerFilterInfo* filterInfo = m_renderer.layer()->filterInfo(); ASSERT(m_renderer.layer()->filterInfo());
ASSERT(filterInfo);
filterInfo->expandDirtySourceRect(rectForRepaint);
RenderLayer* parentLayer = enclosingFilterRepaintLayer(); RenderLayer* parentLayer = enclosingFilterRepaintLayer();
ASSERT(parentLayer); ASSERT(parentLayer);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment