summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/WebCore/ChangeLog57
-rw-r--r--Source/WebCore/WebCore.pri4
-rw-r--r--Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp2
-rw-r--r--Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp35
-rw-r--r--Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h17
5 files changed, 105 insertions, 10 deletions
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index b30aba2ab..8ee46f4b5 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,15 @@
+2013-02-19 Andras Becsi <andras.becsi@digia.com>
+
+ [Qt] Fix compilation if Qt was configured with -no-rtti
+ https://bugs.webkit.org/show_bug.cgi?id=110234
+
+ Reviewed by Noam Rosenthal.
+
+ Availability of dynamic_cast should be checked.
+
+ * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
+ (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):
+
2013-01-31 Allan Sandfeld Jensen <allan.jensen@digia.com>
[Qt] Box shadows on a transparency layer is very slow
@@ -35,6 +47,51 @@
* dom/Element.h:
(Element):
+2013-01-25 Alexander Paschenko <alexander.pashenko@lge.com>
+
+ [TexMap] Flickering after transitions on Apple HTML5 demo
+ https://bugs.webkit.org/show_bug.cgi?id=102501
+
+ Reviewed by Noam Rosenthal.
+
+ The problem is caused by inconsistent state of TextureMapperLayer's transformation matrix
+ and opacity data during and after the end of animation.
+ This patch solves the problem by introducing three additional private flags
+ to TextureMapperLayer:
+ m_shouldUpdateCurrentTransformFromGraphicsLayer,
+ m_shouldUpdateCurrentOpacityFromGraphicsLayer, and
+ m_shouldUpdateCurrentFiltersFromGraphicsLayer.
+ The latter has been introduced in order to avoid similar future problems
+ with m_currentFilters.
+ On these flags' basis, TextureMapperLayer is able to decide whether to update
+ its inner state or not.
+ These flags themselves are set based on GraphicsLayerTextureMapper's changeMask
+ which indicates what details of the state have been changed since the last sync.
+
+ No new tests - this doesn't expose any testable surface.
+ Eyes-only check has been made to ensure that the problem is gone now.
+
+ * platform/graphics/texmap/TextureMapperLayer.cpp:
+ (WebCore::TextureMapperLayer::setAnimatedTransform):
+ sets m_shouldUpdateCurrentTransformFromGraphicsLayer to false and
+ updates m_currentTransform based on the updated state from GraphicsLayerAnimation.
+ (WebCore):
+ (WebCore::TextureMapperLayer::setAnimatedOpacity):
+ sets m_shouldUpdateCurrentOpacityFromGraphicsLayer to false and
+ updates m_currentOpacity based on the updated state from GraphicsLayerAnimation.
+ (WebCore::TextureMapperLayer::setAnimatedFilters):
+ sets m_shouldUpdateCurrentFiltersFromGraphicsLayer to false and
+ updates m_currentFilters based on the updated state from GraphicsLayerAnimation.
+ (WebCore::TextureMapperLayer::flushCompositingStateForThisLayerOnly):
+ sets m_shouldUpdateCurrent* flags based on GLTM's changeMask. Also illegal modification
+ of m_currentTransform that caused flickering has been removed from this method.
+ (WebCore::TextureMapperLayer::syncAnimations): updates m_currentTransform and/or
+ m_currentOpacity and/or m_currentFilters if corresponding flags allow to do so.
+ * platform/graphics/texmap/TextureMapperLayer.h:
+ (WebCore::TextureMapperLayer::TextureMapperLayer): aforementioned flags
+ get initialized in ctor.
+ (TextureMapperLayer): aforementioned flags are declared in the class.
+
2013-01-04 John Mellor <johnme@chromium.org>
Early out from FontCache::releaseFontData if cached font data not found.
diff --git a/Source/WebCore/WebCore.pri b/Source/WebCore/WebCore.pri
index 2ac0dd7ad..6c9ce5c9e 100644
--- a/Source/WebCore/WebCore.pri
+++ b/Source/WebCore/WebCore.pri
@@ -302,10 +302,6 @@ unix:!mac:*-g++*:QMAKE_CXXFLAGS += -fdata-sections
unix:!mac:*-g++*:QMAKE_LFLAGS += -Wl,--gc-sections
linux*-g++*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
-unix|win32-g++* {
- QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui QtNetwork QtWidgets
-}
-
contains(DEFINES, ENABLE_OPENCL=1) {
LIBS += -lOpenCL
diff --git a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
index 88b3e97bd..c13f892b0 100644
--- a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
+++ b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
@@ -452,7 +452,9 @@ void GraphicsLayerTextureMapper::prepareBackingStore()
if (!m_backingStore)
m_backingStore = TextureMapperTiledBackingStore::create();
+#ifndef QT_NO_DYNAMIC_CAST
ASSERT(dynamic_cast<TextureMapperTiledBackingStore*>(m_backingStore.get()));
+#endif
TextureMapperTiledBackingStore* backingStore = static_cast<TextureMapperTiledBackingStore*>(m_backingStore.get());
if (isShowingRepaintCounter())
diff --git a/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp b/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp
index d2a10aa66..9d8a21010 100644
--- a/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp
+++ b/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp
@@ -264,7 +264,25 @@ void TextureMapperLayer::paintSelfAndChildrenWithReplica(const TextureMapperPain
paintSelfAndChildren(options);
}
+void TextureMapperLayer::setAnimatedTransform(const TransformationMatrix& matrix)
+{
+ m_shouldUpdateCurrentTransformFromGraphicsLayer = false;
+ setTransform(matrix);
+}
+
+void TextureMapperLayer::setAnimatedOpacity(float opacity)
+{
+ m_shouldUpdateCurrentOpacityFromGraphicsLayer = false;
+ setOpacity(opacity);
+}
+
#if ENABLE(CSS_FILTERS)
+void TextureMapperLayer::setAnimatedFilters(const FilterOperations& filters)
+{
+ m_shouldUpdateCurrentFiltersFromGraphicsLayer = false;
+ setFilters(filters);
+}
+
static bool shouldKeepContentTexture(const FilterOperations& filters)
{
for (size_t i = 0; i < filters.size(); ++i) {
@@ -412,6 +430,17 @@ void TextureMapperLayer::flushCompositingStateSelf(GraphicsLayerTextureMapper* g
if (changeMask & AnimationChange)
m_animations = graphicsLayer->m_animations;
+
+ if (changeMask & TransformChange)
+ m_shouldUpdateCurrentTransformFromGraphicsLayer = true;
+
+ if (changeMask & OpacityChange)
+ m_shouldUpdateCurrentOpacityFromGraphicsLayer = true;
+
+#if ENABLE(CSS_FILTERS)
+ if (changeMask & FilterChange)
+ m_shouldUpdateCurrentFiltersFromGraphicsLayer = true;
+#endif
m_state.maskLayer = toTextureMapperLayer(graphicsLayer->maskLayer());
m_state.replicaLayer = toTextureMapperLayer(graphicsLayer->replicaLayer());
@@ -466,12 +495,12 @@ void TextureMapperLayer::applyAnimationsRecursively()
void TextureMapperLayer::syncAnimations()
{
m_animations.apply(this);
- if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyWebkitTransform))
+ if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyWebkitTransform) && m_shouldUpdateCurrentTransformFromGraphicsLayer)
setTransform(m_state.transform);
- if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyOpacity))
+ if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyOpacity) && m_shouldUpdateCurrentOpacityFromGraphicsLayer)
setOpacity(m_state.opacity);
#if ENABLE(CSS_FILTERS)
- if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyWebkitFilter))
+ if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyWebkitFilter) && m_shouldUpdateCurrentFiltersFromGraphicsLayer)
setFilters(m_state.filters);
#endif
}
diff --git a/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h b/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h
index 27a77f6fe..08c273740 100644
--- a/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h
+++ b/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h
@@ -98,6 +98,11 @@ public:
, m_contentsLayer(0)
, m_opacity(1)
, m_centerZ(0)
+ , m_shouldUpdateCurrentTransformFromGraphicsLayer(true)
+ , m_shouldUpdateCurrentOpacityFromGraphicsLayer(true)
+#if ENABLE(CSS_FILTERS)
+ , m_shouldUpdateCurrentFiltersFromGraphicsLayer(true)
+#endif
, m_textureMapper(0)
{ }
@@ -151,10 +156,10 @@ private:
void paintSelfAndChildrenWithReplica(const TextureMapperPaintOptions&);
// GraphicsLayerAnimation::Client
- void setAnimatedTransform(const TransformationMatrix& matrix) { setTransform(matrix); }
- void setAnimatedOpacity(float opacity) { setOpacity(opacity); }
+ virtual void setAnimatedTransform(const TransformationMatrix& matrix) OVERRIDE;
+ virtual void setAnimatedOpacity(float opacity) OVERRIDE;
#if ENABLE(CSS_FILTERS)
- virtual void setAnimatedFilters(const FilterOperations& filters) { setFilters(filters); }
+ virtual void setAnimatedFilters(const FilterOperations& filters) OVERRIDE;
#endif
void syncAnimations();
@@ -188,6 +193,12 @@ private:
float m_centerZ;
String m_name;
+ bool m_shouldUpdateCurrentTransformFromGraphicsLayer;
+ bool m_shouldUpdateCurrentOpacityFromGraphicsLayer;
+#if ENABLE(CSS_FILTERS)
+ bool m_shouldUpdateCurrentFiltersFromGraphicsLayer;
+#endif
+
struct State {
FloatPoint pos;
FloatPoint3D anchorPoint;