OSDN Git Service

When in singlesurfacemode, resist switching out - DO NOT MERGE
authorChris Craik <ccraik@google.com>
Tue, 13 Dec 2011 23:44:47 +0000 (15:44 -0800)
committerChris Craik <ccraik@google.com>
Wed, 4 Jan 2012 21:15:49 +0000 (13:15 -0800)
cherry-pick of https://android-git.corp.google.com/g/#/c/155078/ into MR1 branch
bug:5660814

We want to avoid swapping in and out of singlesurface mode when we have enough
textures to hold the content, but not while the content is updating.

Change-Id: I3c45f2b9f3c8e06b397b701fb53ac6ac5ff8efdd

Source/WebCore/platform/graphics/android/GLWebViewState.cpp

index 273c478..2cc2d85 100644 (file)
@@ -132,6 +132,7 @@ void GLWebViewState::setBaseLayer(BaseLayerAndroid* layer, const SkRegion& inval
         // TODO: move this into TreeManager
         m_tiledPageA->discardTextures();
         m_tiledPageB->discardTextures();
+        m_layersRenderingMode = kAllTextures;
     }
     if (layer) {
         XLOG("new base layer %p, (inval region empty %d) with child %p", layer, inval.isEmpty(), layer->getChild(0));
@@ -376,6 +377,12 @@ bool GLWebViewState::setLayersRenderingMode(TexturesResult& nbTexturesNeeded)
     int maxTextures = TilesManager::instance()->maxLayerTextureCount();
     LayersRenderingMode layersRenderingMode = m_layersRenderingMode;
 
+    if (m_layersRenderingMode == kSingleSurfaceRendering) {
+        // only switch out of SingleSurface mode, if we have 2x needed textures
+        // to avoid changing too often
+        maxTextures /= 2;
+    }
+
     m_layersRenderingMode = kSingleSurfaceRendering;
     if (nbTexturesNeeded.fixed < maxTextures)
         m_layersRenderingMode = kFixedLayers;