summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-05-26 10:19:01 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-05-26 10:19:01 +0200
commit64a79a104ded96a5ecc092a38ca4a6a58ee85be5 (patch)
treeac551b772b407b422d063c7178397b8466094463
parent90d5224e69b7841e6f82c9fac316fa5fae5a357a (diff)
parentef31021c3ec96a70777217f1f613f7d27d6f5a15 (diff)
Merge remote-tracking branch 'origin/5.4' into 5.5
-rw-r--r--Source/WebCore/html/ImageDocument.cpp6
-rw-r--r--Source/WebCore/platform/Length.h5
-rw-r--r--Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp40
-rw-r--r--Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h1
-rw-r--r--dist/changes-5.4.254
5 files changed, 102 insertions, 4 deletions
diff --git a/Source/WebCore/html/ImageDocument.cpp b/Source/WebCore/html/ImageDocument.cpp
index 7d9bcc589..594ccad90 100644
--- a/Source/WebCore/html/ImageDocument.cpp
+++ b/Source/WebCore/html/ImageDocument.cpp
@@ -135,6 +135,8 @@ void ImageDocumentParser::appendBytes(DocumentWriter*, const char*, size_t)
return;
CachedImage* cachedImage = document()->cachedImage();
+ if (!cachedImage)
+ return;
RefPtr<ResourceBuffer> resourceData = frame->loader()->documentLoader()->mainResourceData();
cachedImage->addDataBuffer(resourceData.get());
@@ -143,8 +145,8 @@ void ImageDocumentParser::appendBytes(DocumentWriter*, const char*, size_t)
void ImageDocumentParser::finish()
{
- if (!isStopped() && document()->imageElement()) {
- CachedImage* cachedImage = document()->cachedImage();
+ CachedImage* cachedImage = 0;
+ if (!isStopped() && document()->imageElement() && (cachedImage = document()->cachedImage())) {
RefPtr<ResourceBuffer> data = document()->frame()->loader()->documentLoader()->mainResourceData();
// If this is a multipart image, make a copy of the current part, since the resource data
diff --git a/Source/WebCore/platform/Length.h b/Source/WebCore/platform/Length.h
index 2f91550da..72263b045 100644
--- a/Source/WebCore/platform/Length.h
+++ b/Source/WebCore/platform/Length.h
@@ -233,6 +233,11 @@ public:
Length blend(const Length& from, double progress) const
{
// Blend two lengths to produce a new length that is in between them. Used for animation.
+ if (from.isUndefined())
+ return *this;
+ if (isUndefined())
+ return from;
+
if (from.type() == Calculated || type() == Calculated)
return blendMixedTypes(from, progress);
diff --git a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
index e390792a3..73a6afc02 100644
--- a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
+++ b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp
@@ -48,6 +48,31 @@ PassOwnPtr<GraphicsLayer> GraphicsLayer::create(GraphicsLayerClient* client)
return adoptPtr(new GraphicsLayerTextureMapper(client));
}
+// A fallback layer to handle painting when we decide dynamically to avoid compositing due to layer size.
+class DirectPaintLayer : public TextureMapperPlatformLayer {
+public:
+ DirectPaintLayer(GraphicsLayer* sourceLayer) : m_sourceLayer(sourceLayer)
+ { }
+ void paintToTextureMapper(TextureMapper*, const FloatRect&, const TransformationMatrix& modelViewMatrix, float opacity) OVERRIDE;
+
+private:
+ GraphicsLayer* m_sourceLayer;
+};
+
+void DirectPaintLayer::paintToTextureMapper(TextureMapper* textureMapper, const FloatRect& targetRect, const TransformationMatrix& matrix, float opacity)
+{
+ GraphicsContext* context = textureMapper->graphicsContext();
+ context->save();
+ context->setAlpha(opacity);
+#if ENABLE(3D_RENDERING)
+ context->concat3DTransform(matrix);
+#else
+ context->concatCTM(matrix.toAffineTransform());
+#endif
+ m_sourceLayer->paintGraphicsLayerContents(*context, enclosingIntRect(targetRect));
+ context->restore();
+}
+
GraphicsLayerTextureMapper::GraphicsLayerTextureMapper(GraphicsLayerClient* client)
: GraphicsLayer(client)
, m_layer(adoptPtr(new TextureMapperLayer()))
@@ -57,6 +82,7 @@ GraphicsLayerTextureMapper::GraphicsLayerTextureMapper(GraphicsLayerClient* clie
, m_fixedToViewport(false)
, m_debugBorderWidth(0)
, m_contentsLayer(0)
+ , m_directLayer(0)
, m_animationStartTime(0)
, m_isScrollable(false)
{
@@ -79,7 +105,8 @@ GraphicsLayerTextureMapper::~GraphicsLayerTextureMapper()
{
if (m_contentsLayer)
m_contentsLayer->setClient(0);
-
+ delete m_directLayer;
+ m_directLayer = 0;
willBeDestroyed();
}
@@ -233,6 +260,15 @@ void GraphicsLayerTextureMapper::setSize(const FloatSize& value)
if (maskLayer())
maskLayer()->setSize(value);
notifyChange(SizeChange);
+
+ if (m_size.width() * m_size.height() <= 8192*8192) {
+ if (m_contentsLayer == m_directLayer)
+ setContentsToMedia(0);
+ } else if (!m_contentsLayer) {
+ if (!m_directLayer)
+ m_directLayer = new DirectPaintLayer(this);
+ setContentsToMedia(m_directLayer);
+ }
}
/* \reimp (GraphicsLayer.h)
@@ -627,7 +663,7 @@ void GraphicsLayerTextureMapper::updateBackingStoreIfNeeded()
bool GraphicsLayerTextureMapper::shouldHaveBackingStore() const
{
- return drawsContent() && contentsAreVisible() && !m_size.isEmpty() && (m_size.width() * m_size.height() <= 8192*8192);
+ return drawsContent() && contentsAreVisible() && !m_size.isEmpty() && !m_contentsLayer;
}
bool GraphicsLayerTextureMapper::addAnimation(const KeyframeValueList& valueList, const IntSize& boxSize, const Animation* anim, const String& keyframesName, double timeOffset)
diff --git a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h
index 16e4ebad0..548a95c29 100644
--- a/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h
+++ b/Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.h
@@ -176,6 +176,7 @@ private:
float m_debugBorderWidth;
TextureMapperPlatformLayer* m_contentsLayer;
+ TextureMapperPlatformLayer* m_directLayer;
FloatRect m_needsDisplayRect;
GraphicsLayerAnimations m_animations;
double m_animationStartTime;
diff --git a/dist/changes-5.4.2 b/dist/changes-5.4.2
new file mode 100644
index 000000000..913001e3e
--- /dev/null
+++ b/dist/changes-5.4.2
@@ -0,0 +1,54 @@
+Qt 5.4.2 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.4.1.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+ http://doc.qt.io/qt-5.4
+
+The Qt version 5.4 series is binary compatible with the 5.3.x series.
+Applications compiled for 5.3 will continue to run with 5.4.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+ http://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+QtWebkit
+--------
+ - Fixed privacy breaking icon database usage in private browsing mode.
+ - Fixed possible OpenGL crashes on exit.
+ - [QTBUG-44475] Improved performance of initializing large JSON objects.
+ - [QTBUG-44829] Fixed g++5 builds.
+ - [QTBUG-44912] Fixed crash on loading svg.js
+ - [QTBUG-44524] Fixed possible out-of-memory crash and performance issues
+ on some pages caused by very large accelerated layers.
+ - [QTBUG-45299] Fixed segmentation fault in JSC::DFG::prepareOSREntry.
+
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+Windows
+-------
+ - [QTBUG-44401,QTBUG-42588,QTBUG-43024] Forwarding show and hide events so
+ videos in non-visible widgets are hidden.
+
+ARM
+-------
+ - [QTBUG-44700] Fixed JavaScript crash caused by misbehaving gold linker.
+ - [QTBUG-44740] Fixed alignment issue in WebKit2 IPC.
+
+Linux
+-------
+ - [QTBUG-44245] Fixed crash on some HTML5 videos caused by invalid
+ frame-data from GStreamer.
+ - [QTBUG-44714] Fixed linking with glib 2.43 and newer.