Changeset 260353 in webkit
- Timestamp:
- Apr 19, 2020 11:32:49 PM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r260351 r260353 1 2020-04-19 Simon Fraser <simon.fraser@apple.com> 2 3 Use Optional<FloatQuad> in TransformState 4 https://bugs.webkit.org/show_bug.cgi?id=144226 5 6 Reviewed by Sam Weinig. 7 8 Use Optional<> instead of pointers in TransformState, make it loggable, make FloatQuad loggable. 9 10 * platform/graphics/FloatQuad.cpp: 11 (WebCore::operator<<): 12 * platform/graphics/FloatQuad.h: 13 * platform/graphics/ca/GraphicsLayerCA.cpp: 14 (WebCore::GraphicsLayerCA::flushCompositingState): 15 (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect const): 16 (WebCore::GraphicsLayerCA::recursiveCommitChanges): 17 * platform/graphics/transforms/TransformState.cpp: 18 (WebCore::TransformState::operator=): 19 (WebCore::TransformState::mappedSecondaryQuad const): 20 (WebCore::TransformState::setLastPlanarSecondaryQuad): 21 (WebCore::TransformState::flattenWithTransform): 22 (WebCore::operator<<): 23 * platform/graphics/transforms/TransformState.h: 24 (WebCore::TransformState::setSecondaryQuad): 25 (WebCore::TransformState::lastPlanarSecondaryQuad const): 26 (WebCore::TransformState::isMappingSecondaryQuad const): 27 (WebCore::TransformState::accumulatedTransform const): 28 1 29 2020-04-19 Rob Buis <rbuis@igalia.com> 2 30 -
trunk/Source/WebCore/platform/graphics/FloatQuad.cpp
r259575 r260353 248 248 } 249 249 250 TextStream& operator<<(TextStream& ts, const FloatQuad& quad) 251 { 252 ts << "p1 " << quad.p1() << " p2 " << quad.p2() << " p3 " << quad.p3() << " p4 " << quad.p4(); 253 return ts; 254 } 255 250 256 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/FloatQuad.h
r259575 r260353 32 32 #include "IntRect.h" 33 33 #include <wtf/Forward.h> 34 35 namespace WTF { 36 class TextStream; 37 } 34 38 35 39 namespace WebCore { … … 175 179 } 176 180 181 WTF::TextStream& operator<<(WTF::TextStream&, const FloatQuad&); 182 177 183 Vector<FloatRect> boundingBoxes(const Vector<FloatQuad>&); 178 184 WEBCORE_EXPORT FloatRect unitedBoundingBoxes(const Vector<FloatQuad>&); -
trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
r258985 r260353 1291 1291 { 1292 1292 TransformState state(TransformState::UnapplyInverseTransformDirection, FloatQuad(visibleRect)); 1293 FloatQuad coverageQuad(visibleRect); 1294 state.setSecondaryQuad(&coverageQuad); 1293 state.setSecondaryQuad(FloatQuad { visibleRect }); 1295 1294 1296 1295 CommitState commitState; … … 1458 1457 state.flatten(); 1459 1458 state.setQuad(clipRectForSelf); 1460 if (state.isMappingSecondaryQuad()) { 1461 FloatQuad secondaryQuad(clipRectForSelf); 1462 state.setSecondaryQuad(&secondaryQuad); 1463 } 1459 if (state.isMappingSecondaryQuad()) 1460 state.setSecondaryQuad(FloatQuad { clipRectForSelf }); 1464 1461 } 1465 1462 1466 1463 FloatRect coverageRect = clipRectForSelf; 1467 Optional<FloatQuad>quad = state.mappedSecondaryQuad(&mapWasClamped);1464 auto quad = state.mappedSecondaryQuad(&mapWasClamped); 1468 1465 if (quad && !mapWasClamped && !applyWasClamped) 1469 1466 coverageRect = (*quad).boundingBox(); … … 1567 1564 VisibleAndCoverageRects rects = computeVisibleAndCoverageRect(localState, accumulateTransform); 1568 1565 if (adjustCoverageRect(rects, m_visibleRect)) { 1569 if (state.isMappingSecondaryQuad()) { 1570 FloatQuad secondaryQuad(rects.coverageRect); 1571 localState.setLastPlanarSecondaryQuad(&secondaryQuad); 1572 } 1566 if (state.isMappingSecondaryQuad()) 1567 localState.setLastPlanarSecondaryQuad(FloatQuad { rects.coverageRect }); 1573 1568 } 1574 1569 setVisibleAndCoverageRects(rects); -
trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp
r248846 r260353 28 28 29 29 #include <wtf/Optional.h> 30 #include <wtf/text/TextStream.h> 30 31 31 32 namespace WebCore { … … 40 41 if (m_mapQuad) { 41 42 m_lastPlanarQuad = other.m_lastPlanarQuad; 42 if (other.m_lastPlanarSecondaryQuad) 43 m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(*other.m_lastPlanarSecondaryQuad); 44 else 45 m_lastPlanarSecondaryQuad = nullptr; 43 m_lastPlanarSecondaryQuad = other.m_lastPlanarSecondaryQuad; 46 44 } 47 45 m_accumulatingTransform = other.m_accumulatingTransform; … … 192 190 193 191 if (!m_lastPlanarSecondaryQuad) 194 return Optional<FloatQuad>();192 return WTF::nullopt; 195 193 196 194 FloatQuad quad = *m_lastPlanarSecondaryQuad; … … 199 197 } 200 198 201 void TransformState::setLastPlanarSecondaryQuad(const FloatQuad*quad)199 void TransformState::setLastPlanarSecondaryQuad(const Optional<FloatQuad>& quad) 202 200 { 203 201 if (!quad) { 204 m_lastPlanarSecondaryQuad = nullptr;202 m_lastPlanarSecondaryQuad = WTF::nullopt; 205 203 return; 206 204 } … … 209 207 FloatQuad backMappedQuad(*quad); 210 208 mapQuad(backMappedQuad, inverseDirection()); 211 m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(backMappedQuad);209 m_lastPlanarSecondaryQuad = backMappedQuad; 212 210 } 213 211 … … 232 230 m_lastPlanarQuad = t.mapQuad(m_lastPlanarQuad); 233 231 if (m_lastPlanarSecondaryQuad) 234 *m_lastPlanarSecondaryQuad = t.mapQuad(*m_lastPlanarSecondaryQuad);232 m_lastPlanarSecondaryQuad = t.mapQuad(*m_lastPlanarSecondaryQuad); 235 233 } 236 234 … … 242 240 m_lastPlanarQuad = inverseTransform.projectQuad(m_lastPlanarQuad, wasClamped); 243 241 if (m_lastPlanarSecondaryQuad) 244 *m_lastPlanarSecondaryQuad = inverseTransform.projectQuad(*m_lastPlanarSecondaryQuad, wasClamped);242 m_lastPlanarSecondaryQuad = inverseTransform.projectQuad(*m_lastPlanarSecondaryQuad, wasClamped); 245 243 } 246 244 } … … 254 252 } 255 253 254 TextStream& operator<<(TextStream& ts, const TransformState& state) 255 { 256 TextStream multilineStream; 257 multilineStream.setIndent(ts.indent() + 2); 258 259 multilineStream.dumpProperty("last planar point", state.lastPlanarPoint()); 260 multilineStream.dumpProperty("last planar quad", state.lastPlanarQuad()); 261 262 if (state.lastPlanarSecondaryQuad()) 263 multilineStream.dumpProperty("last planar secondary quad", *state.lastPlanarSecondaryQuad()); 264 265 if (state.accumulatedTransform()) 266 multilineStream.dumpProperty("accumulated transform", ValueOrNull(state.accumulatedTransform())); 267 268 { 269 TextStream::GroupScope scope(ts); 270 ts << "TransformState " << multilineStream.release(); 271 } 272 return ts; 273 } 274 256 275 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/transforms/TransformState.h
r248846 r260353 24 24 */ 25 25 26 #ifndef TransformState_h 27 #define TransformState_h 26 #pragma once 28 27 29 28 #include "AffineTransform.h" … … 32 31 #include "LayoutSize.h" 33 32 #include "TransformationMatrix.h" 33 #include <wtf/Optional.h> 34 35 namespace WTF { 36 class TextStream; 37 } 34 38 35 39 namespace WebCore { … … 71 75 72 76 TransformState& operator=(const TransformState&); 73 77 74 78 void setQuad(const FloatQuad& quad) 75 79 { … … 79 83 } 80 84 81 // FIXME: webkit.org/b/144226 use Optional<FloatQuad>. 82 void setSecondaryQuad(const FloatQuad* quad) 85 void setSecondaryQuad(const Optional<FloatQuad>& quad) 83 86 { 84 87 // We must be in a flattened state (no accumulated offset) when setting this secondary quad. 85 88 ASSERT(m_accumulatedOffset == LayoutSize()); 86 if (quad) 87 m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(*quad); 88 else 89 m_lastPlanarSecondaryQuad = nullptr; 89 m_lastPlanarSecondaryQuad = quad; 90 90 } 91 91 92 // FIXME: webkit.org/b/144226 use Optional<FloatQuad>. 93 void setLastPlanarSecondaryQuad(const FloatQuad*); 92 void setLastPlanarSecondaryQuad(const Optional<FloatQuad>&); 94 93 95 94 void move(LayoutUnit x, LayoutUnit y, TransformAccumulation accumulate = FlattenTransform) … … 106 105 FloatPoint lastPlanarPoint() const { return m_lastPlanarPoint; } 107 106 FloatQuad lastPlanarQuad() const { return m_lastPlanarQuad; } 108 FloatQuad* lastPlanarSecondaryQuad() const { return m_lastPlanarSecondaryQuad.get(); }109 bool isMappingSecondaryQuad() const { return m_lastPlanarSecondaryQuad. get(); }107 Optional<FloatQuad> lastPlanarSecondaryQuad() const { return m_lastPlanarSecondaryQuad; } 108 bool isMappingSecondaryQuad() const { return m_lastPlanarSecondaryQuad.hasValue(); } 110 109 111 110 // Return the point or quad mapped through the current transform … … 113 112 FloatQuad mappedQuad(bool* wasClamped = nullptr) const; 114 113 Optional<FloatQuad> mappedSecondaryQuad(bool* wasClamped = nullptr) const; 114 115 TransformationMatrix* accumulatedTransform() const { return m_accumulatedTransform.get(); } 115 116 116 117 private: … … 127 128 FloatPoint m_lastPlanarPoint; 128 129 FloatQuad m_lastPlanarQuad; 129 std::unique_ptr<FloatQuad> m_lastPlanarSecondaryQuad; // Optional second quad to map.130 Optional<FloatQuad> m_lastPlanarSecondaryQuad; 130 131 131 132 // We only allocate the transform if we need to … … 143 144 } 144 145 146 WTF::TextStream& operator<<(WTF::TextStream&, const TransformState&); 147 145 148 } // namespace WebCore 146 147 #endif // TransformState_h
Note: See TracChangeset
for help on using the changeset viewer.