Title: [260353] trunk/Source/WebCore
Revision
260353
Author
[email protected]
Date
2020-04-19 23:32:49 -0700 (Sun, 19 Apr 2020)

Log Message

Use Optional<FloatQuad> in TransformState
https://bugs.webkit.org/show_bug.cgi?id=144226

Reviewed by Sam Weinig.

Use Optional<> instead of pointers in TransformState, make it loggable, make FloatQuad loggable.

* platform/graphics/FloatQuad.cpp:
(WebCore::operator<<):
* platform/graphics/FloatQuad.h:
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::flushCompositingState):
(WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect const):
(WebCore::GraphicsLayerCA::recursiveCommitChanges):
* platform/graphics/transforms/TransformState.cpp:
(WebCore::TransformState::operator=):
(WebCore::TransformState::mappedSecondaryQuad const):
(WebCore::TransformState::setLastPlanarSecondaryQuad):
(WebCore::TransformState::flattenWithTransform):
(WebCore::operator<<):
* platform/graphics/transforms/TransformState.h:
(WebCore::TransformState::setSecondaryQuad):
(WebCore::TransformState::lastPlanarSecondaryQuad const):
(WebCore::TransformState::isMappingSecondaryQuad const):
(WebCore::TransformState::accumulatedTransform const):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (260352 => 260353)


--- trunk/Source/WebCore/ChangeLog	2020-04-20 06:30:35 UTC (rev 260352)
+++ trunk/Source/WebCore/ChangeLog	2020-04-20 06:32:49 UTC (rev 260353)
@@ -1,3 +1,31 @@
+2020-04-19  Simon Fraser  <[email protected]>
+
+        Use Optional<FloatQuad> in TransformState
+        https://bugs.webkit.org/show_bug.cgi?id=144226
+
+        Reviewed by Sam Weinig.
+
+        Use Optional<> instead of pointers in TransformState, make it loggable, make FloatQuad loggable.
+
+        * platform/graphics/FloatQuad.cpp:
+        (WebCore::operator<<):
+        * platform/graphics/FloatQuad.h:
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::flushCompositingState):
+        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect const):
+        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
+        * platform/graphics/transforms/TransformState.cpp:
+        (WebCore::TransformState::operator=):
+        (WebCore::TransformState::mappedSecondaryQuad const):
+        (WebCore::TransformState::setLastPlanarSecondaryQuad):
+        (WebCore::TransformState::flattenWithTransform):
+        (WebCore::operator<<):
+        * platform/graphics/transforms/TransformState.h:
+        (WebCore::TransformState::setSecondaryQuad):
+        (WebCore::TransformState::lastPlanarSecondaryQuad const):
+        (WebCore::TransformState::isMappingSecondaryQuad const):
+        (WebCore::TransformState::accumulatedTransform const):
+
 2020-04-19  Rob Buis  <[email protected]>
 
         Remove unneeded code from FrameLoader::loadURL

Modified: trunk/Source/WebCore/platform/graphics/FloatQuad.cpp (260352 => 260353)


--- trunk/Source/WebCore/platform/graphics/FloatQuad.cpp	2020-04-20 06:30:35 UTC (rev 260352)
+++ trunk/Source/WebCore/platform/graphics/FloatQuad.cpp	2020-04-20 06:32:49 UTC (rev 260353)
@@ -247,4 +247,10 @@
     return result;
 }
 
+TextStream& operator<<(TextStream& ts, const FloatQuad& quad)
+{
+    ts << "p1 " << quad.p1() << " p2 " << quad.p2() << " p3 " << quad.p3() << " p4 " << quad.p4();
+    return ts;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/FloatQuad.h (260352 => 260353)


--- trunk/Source/WebCore/platform/graphics/FloatQuad.h	2020-04-20 06:30:35 UTC (rev 260352)
+++ trunk/Source/WebCore/platform/graphics/FloatQuad.h	2020-04-20 06:32:49 UTC (rev 260353)
@@ -32,6 +32,10 @@
 #include "IntRect.h"
 #include <wtf/Forward.h>
 
+namespace WTF {
+class TextStream;
+}
+
 namespace WebCore {
 
 // FIXME: Seems like this would be better as a struct.
@@ -174,6 +178,8 @@
     return !(a == b);
 }
 
+WTF::TextStream& operator<<(WTF::TextStream&, const FloatQuad&);
+
 Vector<FloatRect> boundingBoxes(const Vector<FloatQuad>&);
 WEBCORE_EXPORT FloatRect unitedBoundingBoxes(const Vector<FloatQuad>&);
 

Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (260352 => 260353)


--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2020-04-20 06:30:35 UTC (rev 260352)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp	2020-04-20 06:32:49 UTC (rev 260353)
@@ -1290,8 +1290,7 @@
 void GraphicsLayerCA::flushCompositingState(const FloatRect& visibleRect)
 {
     TransformState state(TransformState::UnapplyInverseTransformDirection, FloatQuad(visibleRect));
-    FloatQuad coverageQuad(visibleRect);
-    state.setSecondaryQuad(&coverageQuad);
+    state.setSecondaryQuad(FloatQuad { visibleRect });
 
     CommitState commitState;
     commitState.ancestorHadChanges = visibleRect != m_previousCommittedVisibleRect;
@@ -1457,14 +1456,12 @@
         // Flatten, and replace the quad in the TransformState with one that is clipped to this layer's bounds.
         state.flatten();
         state.setQuad(clipRectForSelf);
-        if (state.isMappingSecondaryQuad()) {
-            FloatQuad secondaryQuad(clipRectForSelf);
-            state.setSecondaryQuad(&secondaryQuad);
-        }
+        if (state.isMappingSecondaryQuad())
+            state.setSecondaryQuad(FloatQuad { clipRectForSelf });
     }
 
     FloatRect coverageRect = clipRectForSelf;
-    Optional<FloatQuad> quad = state.mappedSecondaryQuad(&mapWasClamped);
+    auto quad = state.mappedSecondaryQuad(&mapWasClamped);
     if (quad && !mapWasClamped && !applyWasClamped)
         coverageRect = (*quad).boundingBox();
 
@@ -1566,10 +1563,8 @@
     bool accumulateTransform = accumulatesTransform(*this);
     VisibleAndCoverageRects rects = computeVisibleAndCoverageRect(localState, accumulateTransform);
     if (adjustCoverageRect(rects, m_visibleRect)) {
-        if (state.isMappingSecondaryQuad()) {
-            FloatQuad secondaryQuad(rects.coverageRect);
-            localState.setLastPlanarSecondaryQuad(&secondaryQuad);
-        }
+        if (state.isMappingSecondaryQuad())
+            localState.setLastPlanarSecondaryQuad(FloatQuad { rects.coverageRect });
     }
     setVisibleAndCoverageRects(rects);
 

Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp (260352 => 260353)


--- trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp	2020-04-20 06:30:35 UTC (rev 260352)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp	2020-04-20 06:32:49 UTC (rev 260353)
@@ -27,6 +27,7 @@
 #include "TransformState.h"
 
 #include <wtf/Optional.h>
+#include <wtf/text/TextStream.h>
 
 namespace WebCore {
 
@@ -39,10 +40,7 @@
         m_lastPlanarPoint = other.m_lastPlanarPoint;
     if (m_mapQuad) {
         m_lastPlanarQuad = other.m_lastPlanarQuad;
-        if (other.m_lastPlanarSecondaryQuad)
-            m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(*other.m_lastPlanarSecondaryQuad);
-        else
-            m_lastPlanarSecondaryQuad = nullptr;
+        m_lastPlanarSecondaryQuad = other.m_lastPlanarSecondaryQuad;
     }
     m_accumulatingTransform = other.m_accumulatingTransform;
     m_direction = other.m_direction;
@@ -191,7 +189,7 @@
         *wasClamped = false;
 
     if (!m_lastPlanarSecondaryQuad)
-        return Optional<FloatQuad>();
+        return WTF::nullopt;
 
     FloatQuad quad = *m_lastPlanarSecondaryQuad;
     mapQuad(quad, m_direction, wasClamped);
@@ -198,10 +196,10 @@
     return quad;
 }
 
-void TransformState::setLastPlanarSecondaryQuad(const FloatQuad* quad)
+void TransformState::setLastPlanarSecondaryQuad(const Optional<FloatQuad>& quad)
 {
     if (!quad) {
-        m_lastPlanarSecondaryQuad = nullptr;
+        m_lastPlanarSecondaryQuad = WTF::nullopt;
         return;
     }
     
@@ -208,7 +206,7 @@
     // Map the quad back through any transform or offset back into the last flattening coordinate space.
     FloatQuad backMappedQuad(*quad);
     mapQuad(backMappedQuad, inverseDirection());
-    m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(backMappedQuad);
+    m_lastPlanarSecondaryQuad = backMappedQuad;
 }
 
 void TransformState::mapQuad(FloatQuad& quad, TransformDirection direction, bool* wasClamped) const
@@ -231,7 +229,7 @@
         if (m_mapQuad) {
             m_lastPlanarQuad = t.mapQuad(m_lastPlanarQuad);
             if (m_lastPlanarSecondaryQuad)
-                *m_lastPlanarSecondaryQuad = t.mapQuad(*m_lastPlanarSecondaryQuad);
+                m_lastPlanarSecondaryQuad = t.mapQuad(*m_lastPlanarSecondaryQuad);
         }
 
     } else {
@@ -241,7 +239,7 @@
         if (m_mapQuad) {
             m_lastPlanarQuad = inverseTransform.projectQuad(m_lastPlanarQuad, wasClamped);
             if (m_lastPlanarSecondaryQuad)
-                *m_lastPlanarSecondaryQuad = inverseTransform.projectQuad(*m_lastPlanarSecondaryQuad, wasClamped);
+                m_lastPlanarSecondaryQuad = inverseTransform.projectQuad(*m_lastPlanarSecondaryQuad, wasClamped);
         }
     }
 
@@ -253,4 +251,25 @@
     m_accumulatingTransform = false;
 }
 
+TextStream& operator<<(TextStream& ts, const TransformState& state)
+{
+    TextStream multilineStream;
+    multilineStream.setIndent(ts.indent() + 2);
+
+    multilineStream.dumpProperty("last planar point", state.lastPlanarPoint());
+    multilineStream.dumpProperty("last planar quad", state.lastPlanarQuad());
+
+    if (state.lastPlanarSecondaryQuad())
+        multilineStream.dumpProperty("last planar secondary quad", *state.lastPlanarSecondaryQuad());
+
+    if (state.accumulatedTransform())
+        multilineStream.dumpProperty("accumulated transform", ValueOrNull(state.accumulatedTransform()));
+
+    {
+        TextStream::GroupScope scope(ts);
+        ts << "TransformState " << multilineStream.release();
+    }
+    return ts;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformState.h (260352 => 260353)


--- trunk/Source/WebCore/platform/graphics/transforms/TransformState.h	2020-04-20 06:30:35 UTC (rev 260352)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformState.h	2020-04-20 06:32:49 UTC (rev 260353)
@@ -23,8 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef TransformState_h
-#define TransformState_h
+#pragma once
 
 #include "AffineTransform.h"
 #include "FloatPoint.h"
@@ -31,7 +30,12 @@
 #include "FloatQuad.h"
 #include "LayoutSize.h"
 #include "TransformationMatrix.h"
+#include <wtf/Optional.h>
 
+namespace WTF {
+class TextStream;
+}
+
 namespace WebCore {
 
 class TransformState {
@@ -70,7 +74,7 @@
     TransformState(const TransformState& other) { *this = other; }
 
     TransformState& operator=(const TransformState&);
-    
+
     void setQuad(const FloatQuad& quad)
     {
         // We must be in a flattened state (no accumulated offset) when setting this quad.
@@ -78,19 +82,14 @@
         m_lastPlanarQuad = quad;
     }
 
-    // FIXME: webkit.org/b/144226 use Optional<FloatQuad>. 
-    void setSecondaryQuad(const FloatQuad* quad)
+    void setSecondaryQuad(const Optional<FloatQuad>& quad)
     {
         // We must be in a flattened state (no accumulated offset) when setting this secondary quad.
         ASSERT(m_accumulatedOffset == LayoutSize());
-        if (quad)
-            m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(*quad);
-        else
-            m_lastPlanarSecondaryQuad = nullptr;
+        m_lastPlanarSecondaryQuad = quad;
     }
 
-    // FIXME: webkit.org/b/144226 use Optional<FloatQuad>.
-    void setLastPlanarSecondaryQuad(const FloatQuad*);
+    void setLastPlanarSecondaryQuad(const Optional<FloatQuad>&);
 
     void move(LayoutUnit x, LayoutUnit y, TransformAccumulation accumulate = FlattenTransform)
     {
@@ -105,8 +104,8 @@
     // Return the coords of the point or quad in the last flattened layer
     FloatPoint lastPlanarPoint() const { return m_lastPlanarPoint; }
     FloatQuad lastPlanarQuad() const { return m_lastPlanarQuad; }
-    FloatQuad* lastPlanarSecondaryQuad() const { return m_lastPlanarSecondaryQuad.get(); }
-    bool isMappingSecondaryQuad() const { return m_lastPlanarSecondaryQuad.get(); }
+    Optional<FloatQuad> lastPlanarSecondaryQuad() const { return m_lastPlanarSecondaryQuad; }
+    bool isMappingSecondaryQuad() const { return m_lastPlanarSecondaryQuad.hasValue(); }
 
     // Return the point or quad mapped through the current transform
     FloatPoint mappedPoint(bool* wasClamped = nullptr) const;
@@ -113,6 +112,8 @@
     FloatQuad mappedQuad(bool* wasClamped = nullptr) const;
     Optional<FloatQuad> mappedSecondaryQuad(bool* wasClamped = nullptr) const;
 
+    TransformationMatrix* accumulatedTransform() const { return m_accumulatedTransform.get(); }
+
 private:
     void translateTransform(const LayoutSize&);
     void translateMappedCoordinates(const LayoutSize&);
@@ -126,7 +127,7 @@
     
     FloatPoint m_lastPlanarPoint;
     FloatQuad m_lastPlanarQuad;
-    std::unique_ptr<FloatQuad> m_lastPlanarSecondaryQuad; // Optional second quad to map.
+    Optional<FloatQuad> m_lastPlanarSecondaryQuad;
 
     // We only allocate the transform if we need to
     std::unique_ptr<TransformationMatrix> m_accumulatedTransform;
@@ -142,6 +143,6 @@
     return m_direction == ApplyTransformDirection ? UnapplyInverseTransformDirection : ApplyTransformDirection;
 }
 
+WTF::TextStream& operator<<(WTF::TextStream&, const TransformState&);
+
 } // namespace WebCore
-
-#endif // TransformState_h
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to