diff options
author | Nicolas Roard <nicolasroard@google.com> | 2012-05-15 14:11:20 -0700 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2012-05-16 18:46:20 -0700 |
commit | ed2ce36a1fac9f85b65edf34a1c241c2f73d806c (patch) | |
tree | cd96c66cb53e1cce08e4021f086ca1dfb102d4c8 /Source/WebCore/platform/graphics/android/rendering/Surface.cpp | |
parent | 7b17ee7dc951f404d93a458a61884d5c1bf6e40f (diff) | |
download | external_webkit-ed2ce36a1fac9f85b65edf34a1c241c2f73d806c.zip external_webkit-ed2ce36a1fac9f85b65edf34a1c241c2f73d806c.tar.gz external_webkit-ed2ce36a1fac9f85b65edf34a1c241c2f73d806c.tar.bz2 |
Allow more layers to be merged (merging fixed)
This will reduce the need to go to single surface rendering mode,
as well as improving jank by reducing the number of surfaces we need.
(tested on a set of popular sites, we now need up to 16 times less
surfaces, commonly 4-5 times less)
bug:5683630 bug:6499283 bug:6366440
Change-Id: I761c6a60279e5b21dca8bc1faccd956be58e3702
Diffstat (limited to 'Source/WebCore/platform/graphics/android/rendering/Surface.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/android/rendering/Surface.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/Source/WebCore/platform/graphics/android/rendering/Surface.cpp b/Source/WebCore/platform/graphics/android/rendering/Surface.cpp index 2ec2659..7e4e918 100644 --- a/Source/WebCore/platform/graphics/android/rendering/Surface.cpp +++ b/Source/WebCore/platform/graphics/android/rendering/Surface.cpp @@ -226,19 +226,20 @@ void Surface::prepareGL(bool layerTilesDisabled, bool updateWithBlit) bool Surface::drawGL(bool layerTilesDisabled) { bool tilesDisabled = layerTilesDisabled && !isBase(); - if (!getFirstLayer()->visible()) + if (singleLayer() && !getFirstLayer()->visible()) return false; bool isBaseLayer = isBase() || getFirstLayer()->subclassType() == LayerAndroid::FixedBackgroundImageLayer || getFirstLayer()->subclassType() == LayerAndroid::ForegroundBaseLayer; - if (!isBaseLayer) { - // TODO: why are clipping regions wrong for base layer? - FloatRect drawClip = getFirstLayer()->drawClip(); - FloatRect clippingRect = TilesManager::instance()->shader()->rectInInvViewCoord(drawClip); - TilesManager::instance()->shader()->clip(clippingRect); + FloatRect drawClip = getFirstLayer()->drawClip(); + if (!singleLayer()) { + for (unsigned int i = 1; i < m_layers.size(); i++) + drawClip.unite(m_layers[i]->drawClip()); } + FloatRect clippingRect = TilesManager::instance()->shader()->rectInInvViewCoord(drawClip); + TilesManager::instance()->shader()->clip(clippingRect); bool askRedraw = false; if (m_surfaceBacking && !tilesDisabled) { |