diff options
author | Chris Craik <ccraik@google.com> | 2012-07-19 16:38:37 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2012-07-19 17:00:59 -0700 |
commit | f762138fb2c8ec33fe3dec8e6bfd47e459f8f6c8 (patch) | |
tree | 604c0502e3adfe8ce1c38f9f062e05e825c17e54 /Source/WebCore | |
parent | 3f669b52cf5578458bd55479634a565c581ca213 (diff) | |
download | external_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
Diffstat (limited to 'Source/WebCore')
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 |