summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2012-07-19 16:38:37 -0700
committerChris Craik <ccraik@google.com>2012-07-19 17:00:59 -0700
commitf762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8 (patch)
tree604c0502e3adfe8ce1c38f9f062e05e825c17e54
parent3f669b52cf5578458bd55479634a565c581ca213 (diff)
downloadexternal_webkit-f762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8.zip
external_webkit-f762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8.tar.gz
external_webkit-f762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8.tar.bz2
SurfaceBackings are always zoomable once zoomable
Previously toggling hasText for the content of the SurfaceBacking was enough to cause it to change scale entirely each time the value was changed. Now the allowZoom flag is sticky to avoid unnecessary full-SurfaceBacking repaints. Additionally, changes from allowZoom true->false will not trigger delay. Change-Id: Ie6a13850f86d21f5a12a184c08b940aa2156ef07
-rw-r--r--Source/WebCore/platform/graphics/android/rendering/BaseRenderer.cpp1
-rw-r--r--Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp28
-rw-r--r--Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.h1
3 files changed, 21 insertions, 9 deletions
diff --git a/Source/WebCore/platform/graphics/android/rendering/BaseRenderer.cpp b/Source/WebCore/platform/graphics/android/rendering/BaseRenderer.cpp
index 37f9013..65e28f9 100644
--- a/Source/WebCore/platform/graphics/android/rendering/BaseRenderer.cpp
+++ b/Source/WebCore/platform/graphics/android/rendering/BaseRenderer.cpp
@@ -148,7 +148,6 @@ void BaseRenderer::checkForPureColor(TileRenderInfo& renderInfo, InstrumentedPla
{
renderInfo.isPureColor = canvas.isSolidColor();
renderInfo.pureColor = canvas.solidColor();
- ALOGD("isPureColor = %d, pureColor = %d", renderInfo.isPureColor, renderInfo.pureColor);
deviceCheckForPureColor(renderInfo, &canvas);
}
diff --git a/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp b/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
index d7f6535..5b11df6 100644
--- a/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
+++ b/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.cpp
@@ -40,13 +40,15 @@
namespace WebCore {
SurfaceBacking::SurfaceBacking(bool isBaseSurface)
+ : m_frontTileGrid(new TileGrid(isBaseSurface))
+ , m_backTileGrid(new TileGrid(isBaseSurface))
+ , m_lowResTileGrid(new TileGrid(isBaseSurface))
+ , m_scale(-1)
+ , m_futureScale(-1)
+ , m_zooming(false)
+ , m_hasAllowedZoom(false)
+
{
- m_frontTileGrid = new TileGrid(isBaseSurface);
- m_backTileGrid = new TileGrid(isBaseSurface);
- m_lowResTileGrid = new TileGrid(isBaseSurface);
- m_scale = -1;
- m_futureScale = -1;
- m_zooming = false;
#ifdef DEBUG_COUNT
ClassTracker::instance()->increment("SurfaceBacking");
#endif
@@ -67,9 +69,16 @@ void SurfaceBacking::prepareGL(GLWebViewState* state, bool allowZoom,
TilePainter* painter, bool aggressiveRendering,
bool updateWithBlit)
{
+ // If the surface backing has ever zoomed beyond 1.0 scale, it's always
+ // allowed to (so repaints aren't necessary when allowZoom toggles). If not,
+ // and allowZoom is false, don't allow scale greater than 1.0
+ m_hasAllowedZoom |= allowZoom;
float scale = state->scale();
- if (scale > 1 && !allowZoom)
+ bool scaleOverridden = false;
+ if (scale > 1 && !m_hasAllowedZoom) {
scale = 1;
+ scaleOverridden = true;
+ }
if (m_scale == -1) {
m_scale = scale;
@@ -78,7 +87,10 @@ void SurfaceBacking::prepareGL(GLWebViewState* state, bool allowZoom,
if (m_futureScale != scale) {
m_futureScale = scale;
- m_zoomUpdateTime = WTF::currentTime() + SurfaceBacking::s_zoomUpdateDelay;
+ if (scaleOverridden)
+ m_zoomUpdateTime = 0; // start rendering immediately
+ else
+ m_zoomUpdateTime = WTF::currentTime() + SurfaceBacking::s_zoomUpdateDelay;
m_zooming = true;
// release back TileGrid's TileTextures, so they can be reused immediately
diff --git a/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.h b/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.h
index 5709f2a..06929e1 100644
--- a/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.h
+++ b/Source/WebCore/platform/graphics/android/rendering/SurfaceBacking.h
@@ -95,6 +95,7 @@ private:
float m_futureScale;
double m_zoomUpdateTime;
bool m_zooming;
+ bool m_hasAllowedZoom;
};
} // namespace WebCore