Index: third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
diff --git a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
index 624f8ad26e8facd4851c21cde395bb3cacd46f80..efc7eecef769a3e5876e59c9ca5162c60703fd04 100644 |
--- a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
+++ b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp |
@@ -52,7 +52,13 @@ void SVGFilterRecordingContext::endContent(FilterData* filterData) |
static void paintFilteredContent(GraphicsContext& context, const LayoutObject& object, FilterData* filterData) |
{ |
- DCHECK_EQ(filterData->m_state, FilterData::ReadyToPaint); |
+ if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter)) |
+ return; |
+ |
+ FloatRect filterBounds = filterData ? filterData->lastEffect->getFilter()->filterRegion() : FloatRect(); |
+ LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilter, filterBounds); |
+ if (!filterData || filterData->m_state != FilterData::ReadyToPaint) |
+ return; |
DCHECK(filterData->lastEffect->getFilter()->getSourceGraphic()); |
filterData->m_state = FilterData::PaintingFilter; |
@@ -64,8 +70,7 @@ static void paintFilteredContent(GraphicsContext& context, const LayoutObject& o |
// Clip drawing of filtered image to the minimum required paint rect. |
context.clipRect(lastEffect->mapRect(object.strokeBoundingBox())); |
- FloatRect boundaries = lastEffect->getFilter()->filterRegion(); |
- context.beginLayer(1, SkXfermode::kSrcOver_Mode, &boundaries, ColorFilterNone, std::move(imageFilter)); |
+ context.beginLayer(1, SkXfermode::kSrcOver_Mode, &filterBounds, ColorFilterNone, std::move(imageFilter)); |
context.endLayer(); |
context.restore(); |
@@ -125,15 +130,7 @@ void SVGFilterPainter::finishEffect(const LayoutObject& object, SVGFilterRecordi |
if (filterData->m_state == FilterData::RecordingContentCycleDetected) |
filterData->m_state = FilterData::RecordingContent; |
} |
- |
- GraphicsContext& context = recordingContext.paintingContext(); |
- if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(context, object, DisplayItem::kSVGFilter)) |
- return; |
- |
- FloatRect filterRegion = filterData ? filterData->lastEffect->getFilter()->filterRegion() : FloatRect(); |
- LayoutObjectDrawingRecorder recorder(context, object, DisplayItem::kSVGFilter, filterRegion); |
- if (filterData && filterData->m_state == FilterData::ReadyToPaint) |
- paintFilteredContent(context, object, filterData); |
+ paintFilteredContent(recordingContext.paintingContext(), object, filterData); |
} |
} // namespace blink |