- 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