Changeset 230479 in webkit
- Timestamp:
- Apr 10, 2018 3:47:16 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r230468 r230479 1 2018-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 1 33 2018-04-09 Brent Fulgham <bfulgham@apple.com> 2 34 -
trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp
r229895 r230479 64 64 65 65 // 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(); 74 92 75 93 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(); 77 95 78 96 if (m_state.maskLayer) … … 118 136 transform.translate(options.offset.width(), options.offset.height()); 119 137 transform.multiply(options.transform); 120 transform.multiply(m_ currentTransform.combined());138 transform.multiply(m_layerTransforms.combined); 121 139 122 140 if (m_state.solidColor.isValid() && !m_state.contentsRect.isEmpty() && m_state.solidColor.isVisible()) { … … 178 196 clipTransform.translate(options.offset.width(), options.offset.height()); 179 197 clipTransform.multiply(options.transform); 180 clipTransform.multiply(m_ currentTransform.combined());198 clipTransform.multiply(m_layerTransforms.combined); 181 199 options.textureMapper.beginClip(clipTransform, layerRect()); 182 200 … … 226 244 TextureMapperPaintOptions replicaOptions(options); 227 245 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())); 230 248 paintSelfAndChildren(replicaOptions); 231 249 } … … 236 254 TransformationMatrix TextureMapperLayer::replicaTransform() 237 255 { 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())); 239 258 } 240 259 … … 274 293 } 275 294 276 boundingRect = m_ currentTransform.combined().mapRect(boundingRect);295 boundingRect = m_layerTransforms.combined.mapRect(boundingRect); 277 296 278 297 // Count all masks and filters as overlap layers. … … 499 518 { 500 519 m_state.pos = position; 501 m_currentTransform.setPosition(adjustedPosition());502 520 } 503 521 … … 505 523 { 506 524 m_state.size = size; 507 m_currentTransform.setSize(size);508 525 } 509 526 … … 511 528 { 512 529 m_state.anchorPoint = anchorPoint; 513 m_currentTransform.setAnchorPoint(anchorPoint);514 530 } 515 531 … … 517 533 { 518 534 m_state.preserves3D = preserves3D; 519 m_currentTransform.setFlattening(!preserves3D);520 535 } 521 536 … … 523 538 { 524 539 m_state.transform = transform; 525 m_currentTransform.setLocalTransform(transform);526 540 } 527 541 … … 529 543 { 530 544 m_state.childrenTransform = childrenTransform; 531 m_currentTransform.setChildrenTransform(childrenTransform);532 545 } 533 546 … … 644 657 m_animations.apply(applicationResults, time); 645 658 646 m_ currentTransform.setLocalTransform(applicationResults.transform.value_or(m_state.transform));659 m_layerTransforms.localTransform = applicationResults.transform.value_or(m_state.transform); 647 660 m_currentOpacity = applicationResults.opacity.value_or(m_state.opacity); 648 661 m_currentFilters = applicationResults.filters.value_or(m_state.filters); … … 671 684 else 672 685 m_scrollPositionDelta = delta; 673 m_currentTransform.setPosition(adjustedPosition()); 674 } 675 676 } 686 } 687 688 } -
trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h
r230229 r230479 23 23 #include "FilterOperations.h" 24 24 #include "FloatRect.h" 25 #include "GraphicsLayerTransform.h"26 25 #include "TextureMapper.h" 27 26 #include "TextureMapperAnimation.h" … … 150 149 TextureMapperLayer* m_effectTarget { nullptr }; 151 150 RefPtr<TextureMapperBackingStore> m_backingStore; 152 GraphicsLayerTransform m_currentTransform;153 151 TextureMapperPlatformLayer* m_contentsLayer { nullptr }; 154 152 float m_currentOpacity { 1.0 }; … … 209 207 bool m_fixedToViewport { false }; 210 208 uint32_t m_id { 0 }; 209 210 struct { 211 TransformationMatrix localTransform; 212 213 TransformationMatrix combined; 214 TransformationMatrix combinedForChildren; 215 } m_layerTransforms; 211 216 }; 212 217
Note: See TracChangeset
for help on using the changeset viewer.