Changeset 260353 in webkit


Ignore:
Timestamp:
Apr 19, 2020 11:32:49 PM (4 years ago)
Author:
Simon Fraser
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):

Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r260351 r260353  
     12020-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
    1292020-04-19  Rob Buis  <rbuis@igalia.com>
    230
  • trunk/Source/WebCore/platform/graphics/FloatQuad.cpp

    r259575 r260353  
    248248}
    249249
     250TextStream& 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
    250256} // namespace WebCore
  • trunk/Source/WebCore/platform/graphics/FloatQuad.h

    r259575 r260353  
    3232#include "IntRect.h"
    3333#include <wtf/Forward.h>
     34
     35namespace WTF {
     36class TextStream;
     37}
    3438
    3539namespace WebCore {
     
    175179}
    176180
     181WTF::TextStream& operator<<(WTF::TextStream&, const FloatQuad&);
     182
    177183Vector<FloatRect> boundingBoxes(const Vector<FloatQuad>&);
    178184WEBCORE_EXPORT FloatRect unitedBoundingBoxes(const Vector<FloatQuad>&);
  • trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp

    r258985 r260353  
    12911291{
    12921292    TransformState state(TransformState::UnapplyInverseTransformDirection, FloatQuad(visibleRect));
    1293     FloatQuad coverageQuad(visibleRect);
    1294     state.setSecondaryQuad(&coverageQuad);
     1293    state.setSecondaryQuad(FloatQuad { visibleRect });
    12951294
    12961295    CommitState commitState;
     
    14581457        state.flatten();
    14591458        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 });
    14641461    }
    14651462
    14661463    FloatRect coverageRect = clipRectForSelf;
    1467     Optional<FloatQuad> quad = state.mappedSecondaryQuad(&mapWasClamped);
     1464    auto quad = state.mappedSecondaryQuad(&mapWasClamped);
    14681465    if (quad && !mapWasClamped && !applyWasClamped)
    14691466        coverageRect = (*quad).boundingBox();
     
    15671564    VisibleAndCoverageRects rects = computeVisibleAndCoverageRect(localState, accumulateTransform);
    15681565    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 });
    15731568    }
    15741569    setVisibleAndCoverageRects(rects);
  • trunk/Source/WebCore/platform/graphics/transforms/TransformState.cpp

    r248846 r260353  
    2828
    2929#include <wtf/Optional.h>
     30#include <wtf/text/TextStream.h>
    3031
    3132namespace WebCore {
     
    4041    if (m_mapQuad) {
    4142        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;
    4644    }
    4745    m_accumulatingTransform = other.m_accumulatingTransform;
     
    192190
    193191    if (!m_lastPlanarSecondaryQuad)
    194         return Optional<FloatQuad>();
     192        return WTF::nullopt;
    195193
    196194    FloatQuad quad = *m_lastPlanarSecondaryQuad;
     
    199197}
    200198
    201 void TransformState::setLastPlanarSecondaryQuad(const FloatQuad* quad)
     199void TransformState::setLastPlanarSecondaryQuad(const Optional<FloatQuad>& quad)
    202200{
    203201    if (!quad) {
    204         m_lastPlanarSecondaryQuad = nullptr;
     202        m_lastPlanarSecondaryQuad = WTF::nullopt;
    205203        return;
    206204    }
     
    209207    FloatQuad backMappedQuad(*quad);
    210208    mapQuad(backMappedQuad, inverseDirection());
    211     m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(backMappedQuad);
     209    m_lastPlanarSecondaryQuad = backMappedQuad;
    212210}
    213211
     
    232230            m_lastPlanarQuad = t.mapQuad(m_lastPlanarQuad);
    233231            if (m_lastPlanarSecondaryQuad)
    234                 *m_lastPlanarSecondaryQuad = t.mapQuad(*m_lastPlanarSecondaryQuad);
     232                m_lastPlanarSecondaryQuad = t.mapQuad(*m_lastPlanarSecondaryQuad);
    235233        }
    236234
     
    242240            m_lastPlanarQuad = inverseTransform.projectQuad(m_lastPlanarQuad, wasClamped);
    243241            if (m_lastPlanarSecondaryQuad)
    244                 *m_lastPlanarSecondaryQuad = inverseTransform.projectQuad(*m_lastPlanarSecondaryQuad, wasClamped);
     242                m_lastPlanarSecondaryQuad = inverseTransform.projectQuad(*m_lastPlanarSecondaryQuad, wasClamped);
    245243        }
    246244    }
     
    254252}
    255253
     254TextStream& 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
    256275} // namespace WebCore
  • trunk/Source/WebCore/platform/graphics/transforms/TransformState.h

    r248846 r260353  
    2424 */
    2525
    26 #ifndef TransformState_h
    27 #define TransformState_h
     26#pragma once
    2827
    2928#include "AffineTransform.h"
     
    3231#include "LayoutSize.h"
    3332#include "TransformationMatrix.h"
     33#include <wtf/Optional.h>
     34
     35namespace WTF {
     36class TextStream;
     37}
    3438
    3539namespace WebCore {
     
    7175
    7276    TransformState& operator=(const TransformState&);
    73    
     77
    7478    void setQuad(const FloatQuad& quad)
    7579    {
     
    7983    }
    8084
    81     // FIXME: webkit.org/b/144226 use Optional<FloatQuad>.
    82     void setSecondaryQuad(const FloatQuad* quad)
     85    void setSecondaryQuad(const Optional<FloatQuad>& quad)
    8386    {
    8487        // We must be in a flattened state (no accumulated offset) when setting this secondary quad.
    8588        ASSERT(m_accumulatedOffset == LayoutSize());
    86         if (quad)
    87             m_lastPlanarSecondaryQuad = makeUnique<FloatQuad>(*quad);
    88         else
    89             m_lastPlanarSecondaryQuad = nullptr;
     89        m_lastPlanarSecondaryQuad = quad;
    9090    }
    9191
    92     // FIXME: webkit.org/b/144226 use Optional<FloatQuad>.
    93     void setLastPlanarSecondaryQuad(const FloatQuad*);
     92    void setLastPlanarSecondaryQuad(const Optional<FloatQuad>&);
    9493
    9594    void move(LayoutUnit x, LayoutUnit y, TransformAccumulation accumulate = FlattenTransform)
     
    106105    FloatPoint lastPlanarPoint() const { return m_lastPlanarPoint; }
    107106    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(); }
    110109
    111110    // Return the point or quad mapped through the current transform
     
    113112    FloatQuad mappedQuad(bool* wasClamped = nullptr) const;
    114113    Optional<FloatQuad> mappedSecondaryQuad(bool* wasClamped = nullptr) const;
     114
     115    TransformationMatrix* accumulatedTransform() const { return m_accumulatedTransform.get(); }
    115116
    116117private:
     
    127128    FloatPoint m_lastPlanarPoint;
    128129    FloatQuad m_lastPlanarQuad;
    129     std::unique_ptr<FloatQuad> m_lastPlanarSecondaryQuad; // Optional second quad to map.
     130    Optional<FloatQuad> m_lastPlanarSecondaryQuad;
    130131
    131132    // We only allocate the transform if we need to
     
    143144}
    144145
     146WTF::TextStream& operator<<(WTF::TextStream&, const TransformState&);
     147
    145148} // namespace WebCore
    146 
    147 #endif // TransformState_h
Note: See TracChangeset for help on using the changeset viewer.