Changeset 230479 in webkit


Ignore:
Timestamp:
Apr 10, 2018 3:47:16 AM (6 years ago)
Author:
zandobersek@gmail.com
Message:

[TexMap] TextureMapperLayer unnecessarily duplicates state in GraphicsLayerTransform
https://bugs.webkit.org/show_bug.cgi?id=183868

Reviewed by Carlos Garcia Campos.

Drop the GraphicsLayerTransform member variable from TextureMapperLayer
and instead compute all the required transform information in the
computeTransformsRecursive() method. These computations are not too
expensive, and in turn we can drop an object from this class' state that
was only duplicating a bunch of state variables.

No new tests -- no change in functionality.

  • platform/graphics/texmap/TextureMapperLayer.cpp:

(WebCore::TextureMapperLayer::computeTransformsRecursive):
(WebCore::TextureMapperLayer::paintSelf):
(WebCore::TextureMapperLayer::paintSelfAndChildren):
(WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
(WebCore::TextureMapperLayer::replicaTransform):
(WebCore::TextureMapperLayer::computeOverlapRegions):
(WebCore::TextureMapperLayer::setPosition):
(WebCore::TextureMapperLayer::setSize):
(WebCore::TextureMapperLayer::setAnchorPoint):
(WebCore::TextureMapperLayer::setPreserves3D):
(WebCore::TextureMapperLayer::setTransform):
(WebCore::TextureMapperLayer::setChildrenTransform):
(WebCore::TextureMapperLayer::syncAnimations):
(WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded):

  • platform/graphics/texmap/TextureMapperLayer.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r230468 r230479  
     12018-04-10  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        [TexMap] TextureMapperLayer unnecessarily duplicates state in GraphicsLayerTransform
     4        https://bugs.webkit.org/show_bug.cgi?id=183868
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        Drop the GraphicsLayerTransform member variable from TextureMapperLayer
     9        and instead compute all the required transform information in the
     10        computeTransformsRecursive() method. These computations are not too
     11        expensive, and in turn we can drop an object from this class' state that
     12        was only duplicating a bunch of state variables.
     13
     14        No new tests -- no change in functionality.
     15
     16        * platform/graphics/texmap/TextureMapperLayer.cpp:
     17        (WebCore::TextureMapperLayer::computeTransformsRecursive):
     18        (WebCore::TextureMapperLayer::paintSelf):
     19        (WebCore::TextureMapperLayer::paintSelfAndChildren):
     20        (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
     21        (WebCore::TextureMapperLayer::replicaTransform):
     22        (WebCore::TextureMapperLayer::computeOverlapRegions):
     23        (WebCore::TextureMapperLayer::setPosition):
     24        (WebCore::TextureMapperLayer::setSize):
     25        (WebCore::TextureMapperLayer::setAnchorPoint):
     26        (WebCore::TextureMapperLayer::setPreserves3D):
     27        (WebCore::TextureMapperLayer::setTransform):
     28        (WebCore::TextureMapperLayer::setChildrenTransform):
     29        (WebCore::TextureMapperLayer::syncAnimations):
     30        (WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded):
     31        * platform/graphics/texmap/TextureMapperLayer.h:
     32
    1332018-04-09  Brent Fulgham  <bfulgham@apple.com>
    234
  • trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp

    r229895 r230479  
    6464
    6565    // Compute transforms recursively on the way down to leafs.
    66     TransformationMatrix parentTransform;
    67     if (m_parent)
    68         parentTransform = m_parent->m_currentTransform.combinedForChildren();
    69     else if (m_effectTarget)
    70         parentTransform = m_effectTarget->m_currentTransform.combined();
    71     m_currentTransform.combineTransforms(parentTransform);
    72 
    73     m_state.visible = m_state.backfaceVisibility || !m_currentTransform.combined().isBackFaceVisible();
     66    {
     67        TransformationMatrix parentTransform;
     68        if (m_parent)
     69            parentTransform = m_parent->m_layerTransforms.combinedForChildren;
     70        else if (m_effectTarget)
     71            parentTransform = m_effectTarget->m_layerTransforms.combined;
     72
     73        const float originX = m_state.anchorPoint.x() * m_state.size.width();
     74        const float originY = m_state.anchorPoint.y() * m_state.size.height();
     75        auto position = adjustedPosition();
     76
     77        m_layerTransforms.combined = parentTransform;
     78        m_layerTransforms.combined
     79            .translate3d(originX + position.x(), originY + position.y(), m_state.anchorPoint.z())
     80            .multiply(m_layerTransforms.localTransform);
     81
     82        m_layerTransforms.combinedForChildren = m_layerTransforms.combined;
     83        m_layerTransforms.combined.translate3d(-originX, -originY, -m_state.anchorPoint.z());
     84
     85        if (!m_state.preserves3D)
     86            m_layerTransforms.combinedForChildren = m_layerTransforms.combinedForChildren.to2dTransform();
     87        m_layerTransforms.combinedForChildren.multiply(m_state.childrenTransform);
     88        m_layerTransforms.combinedForChildren.translate3d(-originX, -originY, -m_state.anchorPoint.z());
     89    }
     90
     91    m_state.visible = m_state.backfaceVisibility || !m_layerTransforms.combined.isBackFaceVisible();
    7492
    7593    if (m_parent && m_parent->m_state.preserves3D)
    76         m_centerZ = m_currentTransform.combined().mapPoint(FloatPoint3D(m_state.size.width() / 2, m_state.size.height() / 2, 0)).z();
     94        m_centerZ = m_layerTransforms.combined.mapPoint(FloatPoint3D(m_state.size.width() / 2, m_state.size.height() / 2, 0)).z();
    7795
    7896    if (m_state.maskLayer)
     
    118136    transform.translate(options.offset.width(), options.offset.height());
    119137    transform.multiply(options.transform);
    120     transform.multiply(m_currentTransform.combined());
     138    transform.multiply(m_layerTransforms.combined);
    121139
    122140    if (m_state.solidColor.isValid() && !m_state.contentsRect.isEmpty() && m_state.solidColor.isVisible()) {
     
    178196        clipTransform.translate(options.offset.width(), options.offset.height());
    179197        clipTransform.multiply(options.transform);
    180         clipTransform.multiply(m_currentTransform.combined());
     198        clipTransform.multiply(m_layerTransforms.combined);
    181199        options.textureMapper.beginClip(clipTransform, layerRect());
    182200
     
    226244        TextureMapperPaintOptions replicaOptions(options);
    227245        replicaOptions.transform
    228             .multiply(m_state.replicaLayer->m_currentTransform.combined())
    229             .multiply(m_currentTransform.combined().inverse().value_or(TransformationMatrix()));
     246            .multiply(m_state.replicaLayer->m_layerTransforms.combined)
     247            .multiply(m_layerTransforms.combined.inverse().value_or(TransformationMatrix()));
    230248        paintSelfAndChildren(replicaOptions);
    231249    }
     
    236254TransformationMatrix TextureMapperLayer::replicaTransform()
    237255{
    238     return TransformationMatrix(m_state.replicaLayer->m_currentTransform.combined()).multiply(m_currentTransform.combined().inverse().value_or(TransformationMatrix()));
     256    return TransformationMatrix(m_state.replicaLayer->m_layerTransforms.combined)
     257        .multiply(m_layerTransforms.combined.inverse().value_or(TransformationMatrix()));
    239258}
    240259
     
    274293    }
    275294
    276     boundingRect = m_currentTransform.combined().mapRect(boundingRect);
     295    boundingRect = m_layerTransforms.combined.mapRect(boundingRect);
    277296
    278297    // Count all masks and filters as overlap layers.
     
    499518{
    500519    m_state.pos = position;
    501     m_currentTransform.setPosition(adjustedPosition());
    502520}
    503521
     
    505523{
    506524    m_state.size = size;
    507     m_currentTransform.setSize(size);
    508525}
    509526
     
    511528{
    512529    m_state.anchorPoint = anchorPoint;
    513     m_currentTransform.setAnchorPoint(anchorPoint);
    514530}
    515531
     
    517533{
    518534    m_state.preserves3D = preserves3D;
    519     m_currentTransform.setFlattening(!preserves3D);
    520535}
    521536
     
    523538{
    524539    m_state.transform = transform;
    525     m_currentTransform.setLocalTransform(transform);
    526540}
    527541
     
    529543{
    530544    m_state.childrenTransform = childrenTransform;
    531     m_currentTransform.setChildrenTransform(childrenTransform);
    532545}
    533546
     
    644657    m_animations.apply(applicationResults, time);
    645658
    646     m_currentTransform.setLocalTransform(applicationResults.transform.value_or(m_state.transform));
     659    m_layerTransforms.localTransform = applicationResults.transform.value_or(m_state.transform);
    647660    m_currentOpacity = applicationResults.opacity.value_or(m_state.opacity);
    648661    m_currentFilters = applicationResults.filters.value_or(m_state.filters);
     
    671684    else
    672685        m_scrollPositionDelta = delta;
    673     m_currentTransform.setPosition(adjustedPosition());
    674 }
    675 
    676 }
     686}
     687
     688}
  • trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h

    r230229 r230479  
    2323#include "FilterOperations.h"
    2424#include "FloatRect.h"
    25 #include "GraphicsLayerTransform.h"
    2625#include "TextureMapper.h"
    2726#include "TextureMapperAnimation.h"
     
    150149    TextureMapperLayer* m_effectTarget { nullptr };
    151150    RefPtr<TextureMapperBackingStore> m_backingStore;
    152     GraphicsLayerTransform m_currentTransform;
    153151    TextureMapperPlatformLayer* m_contentsLayer { nullptr };
    154152    float m_currentOpacity { 1.0 };
     
    209207    bool m_fixedToViewport { false };
    210208    uint32_t m_id { 0 };
     209
     210    struct {
     211        TransformationMatrix localTransform;
     212
     213        TransformationMatrix combined;
     214        TransformationMatrix combinedForChildren;
     215    } m_layerTransforms;
    211216};
    212217
Note: See TracChangeset for help on using the changeset viewer.