[webkit-reviews] review granted: [Bug 110624] [New Multicolumn] Rewrite the painting/stacking model to be spec compliant : [Attachment 190593] New patch with the paint transform refactoring removed.

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Feb 27 21:05:39 PST 2013


Simon Fraser (smfr) <simon.fraser at apple.com> has granted Dave Hyatt
<hyatt at apple.com>'s request for review:
Bug 110624: [New Multicolumn] Rewrite the painting/stacking model to be spec
compliant
https://bugs.webkit.org/show_bug.cgi?id=110624

Attachment 190593: New patch with the paint transform refactoring removed.
https://bugs.webkit.org/attachment.cgi?id=190593&action=review

------- Additional Comments from Simon Fraser (smfr) <simon.fraser at apple.com>
View in context: https://bugs.webkit.org/attachment.cgi?id=190593&action=review


r=me but see comments and consider adding more test cases.

> Source/WebCore/ChangeLog:20
> +	   and overlap multiple columns. In addition clips may apply across
pagination
> +	   boundaries, and any overlap caused by opacity has to do the right
thing and
> +	   treat the paginated and unpaginated components together as a single
unit.

I don't see this clipping and opacity behavior tested by your single new test
case. Perhaps more test cases are in order?

> Source/WebCore/rendering/RenderFlowThread.cpp:962
> +void RenderFlowThread::collectLayerFragments(Vector<LayerFragment>&
layerFragments, const LayoutRect& layerBoundingBox, const LayoutRect&
dirtyRect)

Use LayerFragments.

> Source/WebCore/rendering/RenderFlowThread.h:147
> +    void collectLayerFragments(Vector<LayerFragment>&, const LayoutRect&
layerBoundingBox, const LayoutRect& dirtyRect);

Use LayerFragments.

Why is layerBoundingBox referring to a layer, and not, say, a region or column
box?

> Source/WebCore/rendering/RenderLayer.cpp:947
>      bool newColumnsUsed = useRegionBasedColumns();

Don't like "new" in this context. Just called it regionBasedColumns?

> Source/WebCore/rendering/RenderLayer.cpp:957
> +	       if (m_enclosingPaginationLayer &&
m_enclosingPaginationLayer->hasTransform())
> +		   m_enclosingPaginationLayer = 0;

This deserves a comment (and a test case?)

> Source/WebCore/rendering/RenderLayer.cpp:974
> +		   if (m_enclosingPaginationLayer &&
m_enclosingPaginationLayer->hasTransform())
> +		       m_enclosingPaginationLayer = 0;

Ditto.

> Source/WebCore/rendering/RenderLayer.cpp:3812
> +	   // FIXME: It is incorrect to just clip to the damageRect here once
multiple fragments are involved.

File a bugzilla?

> Source/WebCore/rendering/RenderLayer.cpp:3904
> +    // layers between us and the pagination context. It's important to
minimize the # of fragments we need to create and this helps with
> +    // that.

# -> number
Avoid the orphan?

> Source/WebCore/rendering/RenderLayer.cpp:3913
> +    // Take our bounding box within the flow thread and clip it. This will
help minimize the # of fragments we have to create.

# -> number

> Source/WebCore/rendering/RenderLayer.cpp:4009
> +	   LayerFragment fragment = layerFragments.at(i);

Do you need a copy of the fragment on the stack?

> Source/WebCore/rendering/RenderLayer.cpp:4035
> +    RenderObject* paintingRootForRenderer, bool selectionOnly, bool
forceBlackText)

Why do you need both the bools and the PaintBehavior flags? Can't the caller
set up the PaintBehavior flags?

> Source/WebCore/rendering/RenderLayer.cpp:4076
> +	   LayerFragment fragment = layerFragments.at(i);

Need LayerFragment on the stack here?

> Source/WebCore/rendering/RenderLayer.cpp:4097
> +	   LayerFragment fragment = layerFragments.at(i);

Ditto.

> Source/WebCore/rendering/RenderLayer.cpp:4113
> +	   LayerFragment fragment = layerFragments.at(i);

Ditto.

> Source/WebCore/rendering/RenderLayer.cpp:4366
>      offset.moveBy(translationOffset);
>  
> +    offset.moveBy(translationOffset);

Merge error?

> Source/WebCore/rendering/RenderLayer.cpp:4580
> +	   LayerFragment fragment = layerFragments.at(i);

Need a copy of the fragment?

> Source/WebCore/rendering/RenderLayer.cpp:4598
> +	   LayerFragment fragment = layerFragments.at(i);

Ditto.

> Source/WebCore/rendering/RenderLayer.cpp:5004
> +    // If we cross into a different pagination context, then we can't rely
on the cache.
> +    // Just switch over to using TemporaryClipRects.

We might want to solve this eventually. Temporary clip rects have O(n^2)
behavior.


More information about the webkit-reviews mailing list