- Revision
- 233845
- Author
- [email protected]
- Date
- 2018-07-16 05:24:08 -0700 (Mon, 16 Jul 2018)
Log Message
[Nicosia] Add Nicosia::PlatformLayer, Nicosia::CompositionLayer classes
https://bugs.webkit.org/show_bug.cgi?id=187693
Reviewed by Carlos Garcia Campos.
Add the Nicosia::PlatformLayer class. This will be the base platform
layer class from which different derivatives will be created, addressing
different use cases. The generic PlatformLayer type alias will point to
this class in the future.
First class deriving from Nicosia::PlatformLayer is
Nicosia::CompositionLayer, purpose of which will be to mirror the state
that's stored in the platform-specific GraphicsLayer derivative. It will
also allow making thread-safe updates to that state.
CoordinatedGraphicsLayer implementation now spawns a CompositionLayer
object and tracks state changes in a separate
CompositionLayer::LayerState::Delta object. During flushing, the changed
state is applied to the layer's pending state before the delta is nulled
out. The updated state isn't used anywhere yet, but future changes will
implement committing this state into the rendering pipeline.
There's bits of state not yet being managed by CompositionLayer, e.g.
debug visuals, filters and animations. These will be addressed later.
The m_solidColor member variable is added to CoordinatedGraphicsLayer in
order to properly store the solid color value. Normally this would be
contained by the parent GraphicsLayer class, but no such member variable
exists there.
* platform/TextureMapper.cmake:
* platform/graphics/nicosia/NicosiaPlatformLayer.cpp: Added.
(Nicosia::PlatformLayer::PlatformLayer):
(Nicosia::CompositionLayer::CompositionLayer):
* platform/graphics/nicosia/NicosiaPlatformLayer.h: Added.
(Nicosia::PlatformLayer::isCompositionLayer const):
(Nicosia::PlatformLayer::id const):
(Nicosia::CompositionLayer::create):
(Nicosia::CompositionLayer::LayerState::Flags::Flags):
(Nicosia::CompositionLayer::updateState):
* platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
(WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
(WebCore::CoordinatedGraphicsLayer::setPosition):
(WebCore::CoordinatedGraphicsLayer::setAnchorPoint):
(WebCore::CoordinatedGraphicsLayer::setSize):
(WebCore::CoordinatedGraphicsLayer::setTransform):
(WebCore::CoordinatedGraphicsLayer::setChildrenTransform):
(WebCore::CoordinatedGraphicsLayer::setPreserves3D):
(WebCore::CoordinatedGraphicsLayer::setMasksToBounds):
(WebCore::CoordinatedGraphicsLayer::setDrawsContent):
(WebCore::CoordinatedGraphicsLayer::setContentsVisible):
(WebCore::CoordinatedGraphicsLayer::setContentsOpaque):
(WebCore::CoordinatedGraphicsLayer::setBackfaceVisibility):
(WebCore::CoordinatedGraphicsLayer::setOpacity):
(WebCore::CoordinatedGraphicsLayer::setContentsRect):
(WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
(WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
(WebCore::CoordinatedGraphicsLayer::setContentsToSolidColor):
(WebCore::CoordinatedGraphicsLayer::setMaskLayer):
(WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
(WebCore::CoordinatedGraphicsLayer::syncChildren):
(WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
* platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
Modified Paths
Added Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (233844 => 233845)
--- trunk/Source/WebCore/ChangeLog 2018-07-16 11:58:11 UTC (rev 233844)
+++ trunk/Source/WebCore/ChangeLog 2018-07-16 12:24:08 UTC (rev 233845)
@@ -1,3 +1,69 @@
+2018-07-16 Zan Dobersek <[email protected]>
+
+ [Nicosia] Add Nicosia::PlatformLayer, Nicosia::CompositionLayer classes
+ https://bugs.webkit.org/show_bug.cgi?id=187693
+
+ Reviewed by Carlos Garcia Campos.
+
+ Add the Nicosia::PlatformLayer class. This will be the base platform
+ layer class from which different derivatives will be created, addressing
+ different use cases. The generic PlatformLayer type alias will point to
+ this class in the future.
+
+ First class deriving from Nicosia::PlatformLayer is
+ Nicosia::CompositionLayer, purpose of which will be to mirror the state
+ that's stored in the platform-specific GraphicsLayer derivative. It will
+ also allow making thread-safe updates to that state.
+
+ CoordinatedGraphicsLayer implementation now spawns a CompositionLayer
+ object and tracks state changes in a separate
+ CompositionLayer::LayerState::Delta object. During flushing, the changed
+ state is applied to the layer's pending state before the delta is nulled
+ out. The updated state isn't used anywhere yet, but future changes will
+ implement committing this state into the rendering pipeline.
+
+ There's bits of state not yet being managed by CompositionLayer, e.g.
+ debug visuals, filters and animations. These will be addressed later.
+
+ The m_solidColor member variable is added to CoordinatedGraphicsLayer in
+ order to properly store the solid color value. Normally this would be
+ contained by the parent GraphicsLayer class, but no such member variable
+ exists there.
+
+ * platform/TextureMapper.cmake:
+ * platform/graphics/nicosia/NicosiaPlatformLayer.cpp: Added.
+ (Nicosia::PlatformLayer::PlatformLayer):
+ (Nicosia::CompositionLayer::CompositionLayer):
+ * platform/graphics/nicosia/NicosiaPlatformLayer.h: Added.
+ (Nicosia::PlatformLayer::isCompositionLayer const):
+ (Nicosia::PlatformLayer::id const):
+ (Nicosia::CompositionLayer::create):
+ (Nicosia::CompositionLayer::LayerState::Flags::Flags):
+ (Nicosia::CompositionLayer::updateState):
+ * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
+ (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
+ (WebCore::CoordinatedGraphicsLayer::setPosition):
+ (WebCore::CoordinatedGraphicsLayer::setAnchorPoint):
+ (WebCore::CoordinatedGraphicsLayer::setSize):
+ (WebCore::CoordinatedGraphicsLayer::setTransform):
+ (WebCore::CoordinatedGraphicsLayer::setChildrenTransform):
+ (WebCore::CoordinatedGraphicsLayer::setPreserves3D):
+ (WebCore::CoordinatedGraphicsLayer::setMasksToBounds):
+ (WebCore::CoordinatedGraphicsLayer::setDrawsContent):
+ (WebCore::CoordinatedGraphicsLayer::setContentsVisible):
+ (WebCore::CoordinatedGraphicsLayer::setContentsOpaque):
+ (WebCore::CoordinatedGraphicsLayer::setBackfaceVisibility):
+ (WebCore::CoordinatedGraphicsLayer::setOpacity):
+ (WebCore::CoordinatedGraphicsLayer::setContentsRect):
+ (WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
+ (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
+ (WebCore::CoordinatedGraphicsLayer::setContentsToSolidColor):
+ (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
+ (WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
+ (WebCore::CoordinatedGraphicsLayer::syncChildren):
+ (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
+ * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
+
2018-07-15 Wenson Hsieh <[email protected]>
[iOS apps on macOS] Playing embedded Twitter videos in the News app crashes the web process
Modified: trunk/Source/WebCore/platform/TextureMapper.cmake (233844 => 233845)
--- trunk/Source/WebCore/platform/TextureMapper.cmake 2018-07-16 11:58:11 UTC (rev 233844)
+++ trunk/Source/WebCore/platform/TextureMapper.cmake 2018-07-16 12:24:08 UTC (rev 233845)
@@ -50,6 +50,7 @@
platform/graphics/nicosia/NicosiaPaintingEngine.cpp
platform/graphics/nicosia/NicosiaPaintingEngineBasic.cpp
platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp
+ platform/graphics/nicosia/NicosiaPlatformLayer.cpp
platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp
platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp
Added: trunk/Source/WebCore/platform/graphics/nicosia/NicosiaPlatformLayer.cpp (0 => 233845)
--- trunk/Source/WebCore/platform/graphics/nicosia/NicosiaPlatformLayer.cpp (rev 0)
+++ trunk/Source/WebCore/platform/graphics/nicosia/NicosiaPlatformLayer.cpp 2018-07-16 12:24:08 UTC (rev 233845)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "NicosiaPlatformLayer.h"
+
+namespace Nicosia {
+
+PlatformLayer::PlatformLayer(uint64_t id)
+ : m_id(id)
+{
+}
+
+PlatformLayer::~PlatformLayer() = default;
+
+CompositionLayer::CompositionLayer(uint64_t id)
+ : PlatformLayer(id)
+{
+}
+
+CompositionLayer::~CompositionLayer() = default;
+
+} // namespace Nicosia
Added: trunk/Source/WebCore/platform/graphics/nicosia/NicosiaPlatformLayer.h (0 => 233845)
--- trunk/Source/WebCore/platform/graphics/nicosia/NicosiaPlatformLayer.h (rev 0)
+++ trunk/Source/WebCore/platform/graphics/nicosia/NicosiaPlatformLayer.h 2018-07-16 12:24:08 UTC (rev 233845)
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "Color.h"
+#include "FloatPoint.h"
+#include "FloatPoint3D.h"
+#include "FloatRect.h"
+#include "FloatSize.h"
+#include "TransformationMatrix.h"
+#include <wtf/Lock.h>
+#include <wtf/ThreadSafeRefCounted.h>
+#include <wtf/TypeCasts.h>
+
+namespace Nicosia {
+
+class PlatformLayer : public ThreadSafeRefCounted<PlatformLayer> {
+public:
+ virtual ~PlatformLayer();
+
+ virtual bool isCompositionLayer() const { return false; }
+
+ uint64_t id() const { return m_id; }
+
+protected:
+ explicit PlatformLayer(uint64_t);
+
+ uint64_t m_id;
+
+ struct {
+ Lock lock;
+ } m_state;
+};
+
+class CompositionLayer : public PlatformLayer {
+public:
+ static Ref<CompositionLayer> create(uint64_t id)
+ {
+ return adoptRef(*new CompositionLayer(id));
+ }
+ virtual ~CompositionLayer();
+
+ bool isCompositionLayer() const override { return true; }
+
+ struct LayerState {
+ struct Delta {
+ Delta() = default;
+
+ union {
+ struct {
+ bool positionChanged : 1;
+ bool anchorPointChanged : 1;
+ bool sizeChanged : 1;
+ bool transformChanged : 1;
+ bool childrenTransformChanged : 1;
+ bool contentsRectChanged : 1;
+ bool contentsTilingChanged : 1;
+ bool opacityChanged : 1;
+ bool solidColorChanged : 1;
+ bool childrenChanged : 1;
+ bool maskChanged : 1;
+ bool replicaChanged : 1;
+ bool flagsChanged : 1;
+ };
+ uint32_t value { 0 };
+ };
+ } delta;
+
+ struct Flags {
+ Flags()
+ : contentsVisible(true)
+ , backfaceVisible(true)
+ { }
+
+ union {
+ struct {
+ bool contentsOpaque : 1;
+ bool drawsContent : 1;
+ bool contentsVisible : 1;
+ bool backfaceVisible : 1;
+ bool masksToBounds : 1;
+ bool preserves3D : 1;
+ };
+ uint32_t value { 0 };
+ };
+ } flags;
+
+ WebCore::FloatPoint position;
+ WebCore::FloatPoint3D anchorPoint;
+ WebCore::FloatSize size;
+
+ WebCore::TransformationMatrix transform;
+ WebCore::TransformationMatrix childrenTransform;
+
+ WebCore::FloatRect contentsRect;
+ WebCore::FloatSize contentsTilePhase;
+ WebCore::FloatSize contentsTileSize;
+
+ float opacity { 0 };
+ WebCore::Color solidColor;
+
+ Vector<RefPtr<CompositionLayer>> children;
+ RefPtr<CompositionLayer> replica;
+ RefPtr<CompositionLayer> mask;
+ };
+
+ template<typename T>
+ void updateState(const T& functor)
+ {
+ LockHolder locker(PlatformLayer::m_state.lock);
+ functor(m_state.pending);
+ }
+
+private:
+ explicit CompositionLayer(uint64_t);
+
+ struct {
+ LayerState pending;
+ } m_state;
+};
+
+} // namespace Nicosia
+
+#define SPECIALIZE_TYPE_TRAITS_NICOSIA_PLATFORMLAYER(ToClassName, predicate) \
+ SPECIALIZE_TYPE_TRAITS_BEGIN(Nicosia::ToClassName) \
+ static bool isType(const Nicosia::PlatformLayer& layer) { return layer.predicate; } \
+ SPECIALIZE_TYPE_TRAITS_END()
+
+SPECIALIZE_TYPE_TRAITS_NICOSIA_PLATFORMLAYER(CompositionLayer, isCompositionLayer());
Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp (233844 => 233845)
--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp 2018-07-16 11:58:11 UTC (rev 233844)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp 2018-07-16 12:24:08 UTC (rev 233845)
@@ -143,6 +143,8 @@
{
static CoordinatedLayerID nextLayerID = 1;
m_id = nextLayerID++;
+
+ m_nicosia.layer = Nicosia::CompositionLayer::create(m_id);
}
CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer()
@@ -217,6 +219,7 @@
GraphicsLayer::setPosition(p);
m_layerState.positionChanged = true;
+ m_nicosia.delta.positionChanged = true;
didChangeGeometry();
}
@@ -227,6 +230,7 @@
GraphicsLayer::setAnchorPoint(p);
m_layerState.anchorPointChanged = true;
+ m_nicosia.delta.anchorPointChanged = true;
didChangeGeometry();
}
@@ -237,6 +241,7 @@
GraphicsLayer::setSize(size);
m_layerState.sizeChanged = true;
+ m_nicosia.delta.sizeChanged = true;
if (maskLayer())
maskLayer()->setSize(size);
@@ -250,6 +255,7 @@
GraphicsLayer::setTransform(t);
m_layerState.transformChanged = true;
+ m_nicosia.delta.transformChanged = true;
didChangeGeometry();
}
@@ -261,6 +267,7 @@
GraphicsLayer::setChildrenTransform(t);
m_layerState.childrenTransformChanged = true;
+ m_nicosia.delta.childrenTransformChanged = true;
didChangeGeometry();
}
@@ -273,6 +280,7 @@
GraphicsLayer::setPreserves3D(b);
m_layerState.preserves3D = b;
m_layerState.flagsChanged = true;
+ m_nicosia.delta.flagsChanged = true;
didChangeGeometry();
}
@@ -284,6 +292,7 @@
GraphicsLayer::setMasksToBounds(b);
m_layerState.masksToBounds = b;
m_layerState.flagsChanged = true;
+ m_nicosia.delta.flagsChanged = true;
didChangeGeometry();
}
@@ -295,6 +304,7 @@
GraphicsLayer::setDrawsContent(b);
m_layerState.drawsContent = b;
m_layerState.flagsChanged = true;
+ m_nicosia.delta.flagsChanged = true;
didChangeLayerState();
}
@@ -306,6 +316,7 @@
GraphicsLayer::setContentsVisible(b);
m_layerState.contentsVisible = b;
m_layerState.flagsChanged = true;
+ m_nicosia.delta.flagsChanged = true;
if (maskLayer())
maskLayer()->setContentsVisible(b);
@@ -321,6 +332,7 @@
GraphicsLayer::setContentsOpaque(b);
m_layerState.contentsOpaque = b;
m_layerState.flagsChanged = true;
+ m_nicosia.delta.flagsChanged = true;
// Demand a repaint of the whole layer.
if (!m_needsDisplay.completeLayer) {
@@ -341,6 +353,7 @@
GraphicsLayer::setBackfaceVisibility(b);
m_layerState.backfaceVisible = b;
m_layerState.flagsChanged = true;
+ m_nicosia.delta.flagsChanged = true;
didChangeLayerState();
}
@@ -353,6 +366,7 @@
GraphicsLayer::setOpacity(opacity);
m_layerState.opacity = opacity;
m_layerState.opacityChanged = true;
+ m_nicosia.delta.opacityChanged = true;
didChangeLayerState();
}
@@ -365,6 +379,7 @@
GraphicsLayer::setContentsRect(r);
m_layerState.contentsRect = r;
m_layerState.contentsRectChanged = true;
+ m_nicosia.delta.contentsRectChanged = true;
didChangeLayerState();
}
@@ -377,6 +392,7 @@
GraphicsLayer::setContentsTileSize(s);
m_layerState.contentsTileSize = s;
m_layerState.contentsTilingChanged = true;
+ m_nicosia.delta.contentsTilingChanged = true;
didChangeLayerState();
}
@@ -388,6 +404,7 @@
GraphicsLayer::setContentsTilePhase(p);
m_layerState.contentsTilePhase = p;
m_layerState.contentsTilingChanged = true;
+ m_nicosia.delta.contentsTilingChanged = true;
didChangeLayerState();
}
@@ -453,11 +470,13 @@
void CoordinatedGraphicsLayer::setContentsToSolidColor(const Color& color)
{
- if (m_layerState.solidColor == color)
+ if (m_solidColor == color)
return;
+ m_solidColor = color;
m_layerState.solidColor = color;
m_layerState.solidColorChanged = true;
+ m_nicosia.delta.solidColorChanged = true;
didChangeLayerState();
}
@@ -516,6 +535,7 @@
m_layerState.mask = coordinatedLayer.id();
m_layerState.maskChanged = true;
+ m_nicosia.delta.maskChanged = true;
didChangeLayerState();
}
@@ -540,6 +560,7 @@
GraphicsLayer::setReplicatedByLayer(layer);
m_layerState.replica = toCoordinatedLayerID(layer);
m_layerState.replicaChanged = true;
+ m_nicosia.delta.replicaChanged = true;
didChangeLayerState();
}
@@ -602,6 +623,8 @@
return;
m_shouldSyncChildren = false;
m_layerState.childrenChanged = true;
+ m_nicosia.delta.childrenChanged = true;
+
m_layerState.children.clear();
for (auto& child : children())
m_layerState.children.append(toCoordinatedLayerID(child));
@@ -750,6 +773,69 @@
// Only unset m_movingVisibleRect after we have updated the visible rect after the animation stopped.
if (!hasActiveTransformAnimation)
m_movingVisibleRect = false;
+
+ {
+ m_nicosia.layer->updateState(
+ [this](Nicosia::CompositionLayer::LayerState& state)
+ {
+ // OR the local delta value into the layer's pending state delta. After that,
+ // go through each local change and update the pending state accordingly.
+ auto& localDelta = m_nicosia.delta;
+ state.delta.value |= localDelta.value;
+
+ if (localDelta.positionChanged)
+ state.position = position();
+ if (localDelta.anchorPointChanged)
+ state.anchorPoint = anchorPoint();
+ if (localDelta.sizeChanged)
+ state.size = size();
+
+ if (localDelta.transformChanged)
+ state.transform = transform();
+ if (localDelta.childrenTransformChanged)
+ state.childrenTransform = childrenTransform();
+
+ if (localDelta.contentsRectChanged)
+ state.contentsRect = contentsRect();
+ if (localDelta.contentsTilingChanged) {
+ state.contentsTilePhase = contentsTilePhase();
+ state.contentsTileSize = contentsTileSize();
+ }
+
+ if (localDelta.opacityChanged)
+ state.opacity = opacity();
+ if (localDelta.solidColorChanged)
+ state.solidColor = m_solidColor;
+
+ if (localDelta.childrenChanged) {
+ state.children = WTF::map(children(),
+ [](auto* child)
+ {
+ return downcast<CoordinatedGraphicsLayer>(child)->m_nicosia.layer;
+ });
+ }
+
+ if (localDelta.maskChanged) {
+ auto* mask = downcast<CoordinatedGraphicsLayer>(maskLayer());
+ state.mask = mask ? mask->m_nicosia.layer : nullptr;
+ }
+
+ if (localDelta.replicaChanged) {
+ auto* replica = downcast<CoordinatedGraphicsLayer>(replicaLayer());
+ state.replica = replica ? replica->m_nicosia.layer : nullptr;
+ }
+
+ if (localDelta.flagsChanged) {
+ state.flags.contentsOpaque = contentsOpaque();
+ state.flags.drawsContent = drawsContent();
+ state.flags.contentsVisible = contentsAreVisible();
+ state.flags.backfaceVisible = backfaceVisibility();
+ state.flags.masksToBounds = masksToBounds();
+ state.flags.preserves3D = preserves3D();
+ }
+ });
+ m_nicosia.delta = { };
+ }
}
void CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers()
Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h (233844 => 233845)
--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h 2018-07-16 11:58:11 UTC (rev 233844)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h 2018-07-16 12:24:08 UTC (rev 233845)
@@ -31,6 +31,7 @@
#include "Image.h"
#include "IntSize.h"
#include "NicosiaBuffer.h"
+#include "NicosiaPlatformLayer.h"
#include "TextureMapperAnimation.h"
#include "TiledBackingStore.h"
#include "TiledBackingStoreClient.h"
@@ -186,6 +187,8 @@
FloatPoint m_adjustedPosition;
FloatPoint3D m_adjustedAnchorPoint;
+ Color m_solidColor;
+
#ifndef NDEBUG
bool m_isPurging;
#endif
@@ -220,6 +223,11 @@
Timer m_animationStartedTimer;
TextureMapperAnimations m_animations;
MonotonicTime m_lastAnimationStartTime;
+
+ struct {
+ RefPtr<Nicosia::CompositionLayer> layer;
+ Nicosia::CompositionLayer::LayerState::Delta delta;
+ } m_nicosia;
};
} // namespace WebCore