diff options
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/WebCore/ChangeLog | 57 | ||||
| -rw-r--r-- | Source/WebCore/WebCore.pri | 4 | ||||
| -rw-r--r-- | Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp | 2 | ||||
| -rw-r--r-- | Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp | 35 | ||||
| -rw-r--r-- | Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h | 17 |
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; |
