Commit b3e11fe4 authored by wangxianzhu's avatar wangxianzhu Committed by Commit bot

Fix paint property under-invalidation checking about reference filters

Previously we checked equality of reference filters by comparing the
pointers to SkImageFilters. This cause false-positive when we forced
property update for under-invalidation checking.

Now ignore reference filters when comparing effect nodes, and check
for changes of filter operations defined in style to remedy the
ignored check.

An alternative way is to add value equality operators in SkImageFilter
subclasses, but that seems to need more code and time than this CL.
We might make that a long-term objective.

BUG=671097
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2

Review-Url: https://codereview.chromium.org/2556013002
Cr-Commit-Position: refs/heads/master@{#437470}
parent 7f0cf5b3
...@@ -91,39 +91,15 @@ crbug.com/626748 paint/invalidation/table/cached-change-tbody-border-color.html ...@@ -91,39 +91,15 @@ crbug.com/626748 paint/invalidation/table/cached-change-tbody-border-color.html
crbug.com/626748 virtual/spinvalidation/paint/invalidation/table/cached-change-row-border-color.html [ Skip ] crbug.com/626748 virtual/spinvalidation/paint/invalidation/table/cached-change-row-border-color.html [ Skip ]
crbug.com/626748 virtual/spinvalidation/paint/invalidation/table/cached-change-tbody-border-color.html [ Skip ] crbug.com/626748 virtual/spinvalidation/paint/invalidation/table/cached-change-tbody-border-color.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/outline-clip-change.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-2.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/position-change-keeping-geometry.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology-yonly.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/marker-viewBox-changes.svg [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur-yonly.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-6.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/resize-repaint.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-morphology-xonly.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/shrink-layer.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-displacement.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-lighting.html [ Skip ] crbug.com/645667 virtual/spinvalidation/paint/invalidation/filter-repaint-on-accelerated-layer.html [ Crash ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-offset.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-1.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-4.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-3.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-gaussianblur-xonly.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-composite-5.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/outline-clip-change.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filters/effect-reference-repaint-merge.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filter-repaint-accelerated-on-accelerated-filter.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/position-change-keeping-geometry.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox.svg [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/relative-sized-inner-svg.xhtml [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/marker-viewBox-changes.svg [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/container-repaint.svg [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/text-viewbox-rescale.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/inner-svg-change-viewBox-contract.svg [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/relative-sized-use-on-symbol.xhtml [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/relative-sized-shadow-tree-content-with-symbol.xhtml [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/svg/relative-sized-use-without-attributes-on-symbol.xhtml [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/should-not-repaint-composited-descendants.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/resize-repaint.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/shrink-layer.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/compositing/clipping-should-not-repaint-composited-descendants.html [ Skip ]
crbug.com/645667 virtual/spinvalidation/paint/invalidation/filter-repaint-on-accelerated-layer.html [ Skip ]
# Very slight rendering changes caused by Skia rect clipping change. # Very slight rendering changes caused by Skia rect clipping change.
crbug.com/627844 virtual/gpu/fast/canvas/canvas-createImageBitmap-colorClamping.html [ Pass Failure ] crbug.com/627844 virtual/gpu/fast/canvas/canvas-createImageBitmap-colorClamping.html [ Pass Failure ]
...@@ -152,12 +128,6 @@ crbug.com/646015 virtual/spinvalidation/paint/invalidation/hover-invalidation-ta ...@@ -152,12 +128,6 @@ crbug.com/646015 virtual/spinvalidation/paint/invalidation/hover-invalidation-ta
crbug.com/646016 paint/invalidation/selected-replaced.html [ Failure ] crbug.com/646016 paint/invalidation/selected-replaced.html [ Failure ]
crbug.com/646016 virtual/spinvalidation/paint/invalidation/selected-replaced.html [ Skip ] crbug.com/646016 virtual/spinvalidation/paint/invalidation/selected-replaced.html [ Skip ]
crbug.com/671097 virtual/spinvalidation/paint/invalidation/filter-on-html-element-with-fixed-position-child.html [ Crash ]
crbug.com/671097 virtual/spinvalidation/paint/invalidation/reflection-redraw.html [ Crash ]
crbug.com/671097 virtual/spinvalidation/paint/invalidation/scroll-fixed-reflected-layer.html [ Crash ]
crbug.com/671097 virtual/spinvalidation/paint/invalidation/compositing/opacity-between-absolute.html [ Pass Crash ]
crbug.com/671097 virtual/spinvalidation/paint/invalidation/compositing/opacity-between-absolute2.html [ Pass Crash ]
# ====== Paint team owned tests to here ====== # ====== Paint team owned tests to here ======
......
...@@ -97,4 +97,24 @@ bool CompositorFilterOperations::operator==( ...@@ -97,4 +97,24 @@ bool CompositorFilterOperations::operator==(
return m_filterOperations == o.m_filterOperations; return m_filterOperations == o.m_filterOperations;
} }
#if DCHECK_IS_ON()
bool CompositorFilterOperations::equalsIgnoringReferenceFilters(
const CompositorFilterOperations& o) const {
size_t size = m_filterOperations.size();
if (size != o.m_filterOperations.size())
return false;
for (size_t i = 0; i < size; ++i) {
const auto& operation = m_filterOperations.at(i);
if (operation.type() == cc::FilterOperation::REFERENCE) {
if (o.m_filterOperations.at(i).type() != cc::FilterOperation::REFERENCE)
return false;
continue;
}
if (operation != o.m_filterOperations.at(i))
return false;
}
return true;
}
#endif
} // namespace blink } // namespace blink
...@@ -40,11 +40,17 @@ class PLATFORM_EXPORT CompositorFilterOperations { ...@@ -40,11 +40,17 @@ class PLATFORM_EXPORT CompositorFilterOperations {
void clear(); void clear();
bool isEmpty() const; bool isEmpty() const;
// For reference filters, this equality operator compares pointers of the
// image_filter fields instead of their values.
bool operator==(const CompositorFilterOperations&) const; bool operator==(const CompositorFilterOperations&) const;
bool operator!=(const CompositorFilterOperations& o) const { bool operator!=(const CompositorFilterOperations& o) const {
return !(*this == o); return !(*this == o);
} }
#if DCHECK_IS_ON()
bool equalsIgnoringReferenceFilters(const CompositorFilterOperations&) const;
#endif
private: private:
cc::FilterOperations m_filterOperations; cc::FilterOperations m_filterOperations;
}; };
......
...@@ -76,12 +76,13 @@ class PLATFORM_EXPORT EffectPaintPropertyNode ...@@ -76,12 +76,13 @@ class PLATFORM_EXPORT EffectPaintPropertyNode
} }
// The equality operator is used by FindPropertiesNeedingUpdate.h for checking // The equality operator is used by FindPropertiesNeedingUpdate.h for checking
// if an effect node has changed. // if an effect node has changed. It ignores changes of reference filters
// because SkImageFilter doesn't have an equality operator.
bool operator==(const EffectPaintPropertyNode& o) const { bool operator==(const EffectPaintPropertyNode& o) const {
return m_parent == o.m_parent && return m_parent == o.m_parent &&
m_localTransformSpace == o.m_localTransformSpace && m_localTransformSpace == o.m_localTransformSpace &&
m_outputClip == o.m_outputClip && m_filter == o.m_filter && m_outputClip == o.m_outputClip && m_opacity == o.m_opacity &&
m_opacity == o.m_opacity; m_filter.equalsIgnoringReferenceFilters(o.m_filter);
} }
#endif #endif
......
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