Title: [114191] trunk/Source/WebCore
Revision
114191
Author
dan...@chromium.org
Date
2012-04-13 17:42:00 -0700 (Fri, 13 Apr 2012)

Log Message

[chromium] Remove viewport memory restrictions
https://bugs.webkit.org/show_bug.cgi?id=83316

Reviewed by Adrienne Walker.

We remove the memory restriction on web pages based on viewport size
on desktop. This is causing pages that have complex use of layers to
end up hitting our memory limits, and moreso when the window is small.
Page complexity is not really a function of the viewport size.

We drop the mininum memory limit entirely, and just evict all
unprotected textures instead.

Covered by existing tests.

* platform/graphics/chromium/TextureManager.cpp:
(WebCore::TextureManager::highLimitBytes):
(WebCore::TextureManager::reclaimLimitBytes):
* platform/graphics/chromium/TextureManager.h:
(TextureManager):
* platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
(WebCore::CCLayerTreeHost::beginCommitOnImplThread):
(WebCore::CCLayerTreeHost::setVisible):
(WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
(WebCore::CCLayerTreeHost::updateLayers):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (114190 => 114191)


--- trunk/Source/WebCore/ChangeLog	2012-04-14 00:38:25 UTC (rev 114190)
+++ trunk/Source/WebCore/ChangeLog	2012-04-14 00:42:00 UTC (rev 114191)
@@ -1,3 +1,31 @@
+2012-04-13  Dana Jansens  <dan...@chromium.org>
+
+        [chromium] Remove viewport memory restrictions
+        https://bugs.webkit.org/show_bug.cgi?id=83316
+
+        Reviewed by Adrienne Walker.
+
+        We remove the memory restriction on web pages based on viewport size
+        on desktop. This is causing pages that have complex use of layers to
+        end up hitting our memory limits, and moreso when the window is small.
+        Page complexity is not really a function of the viewport size.
+
+        We drop the mininum memory limit entirely, and just evict all
+        unprotected textures instead.
+
+        Covered by existing tests.
+
+        * platform/graphics/chromium/TextureManager.cpp:
+        (WebCore::TextureManager::highLimitBytes):
+        (WebCore::TextureManager::reclaimLimitBytes):
+        * platform/graphics/chromium/TextureManager.h:
+        (TextureManager):
+        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
+        (WebCore::CCLayerTreeHost::beginCommitOnImplThread):
+        (WebCore::CCLayerTreeHost::setVisible):
+        (WebCore::CCLayerTreeHost::didBecomeInvisibleOnImplThread):
+        (WebCore::CCLayerTreeHost::updateLayers):
+
 2012-04-13  Ken Buchanan  <ke...@chromium.org>
 
         Optimize tracking of intruding floats being removed from RenderBlock during layout

Modified: trunk/Source/WebCore/platform/graphics/chromium/TextureManager.cpp (114190 => 114191)


--- trunk/Source/WebCore/platform/graphics/chromium/TextureManager.cpp	2012-04-14 00:38:25 UTC (rev 114190)
+++ trunk/Source/WebCore/platform/graphics/chromium/TextureManager.cpp	2012-04-14 00:42:00 UTC (rev 114191)
@@ -39,6 +39,8 @@
 namespace {
 size_t memoryLimitBytes(size_t viewportMultiplier, const IntSize& viewportSize, size_t minMegabytes, size_t maxMegabytes)
 {
+    if (!viewportMultiplier)
+        return maxMegabytes * 1024 * 1024;
     if (viewportSize.isEmpty())
         return minMegabytes * 1024 * 1024;
     return max(minMegabytes * 1024 * 1024, min(maxMegabytes * 1024 * 1024, viewportMultiplier * TextureManager::memoryUseBytes(viewportSize, GraphicsContext3D::RGBA)));
@@ -48,12 +50,13 @@
 size_t TextureManager::highLimitBytes(const IntSize& viewportSize)
 {
     size_t viewportMultiplier, minMegabytes, maxMegabytes;
-    viewportMultiplier = 12;
 #if OS(ANDROID)
-    minMegabytes = 24;
-    maxMegabytes = 40;
+    viewportMultiplier = 16;
+    minMegabytes = 32;
+    maxMegabytes = 64;
 #else
-    minMegabytes = 64;
+    viewportMultiplier = 0;
+    minMegabytes = 0;
     maxMegabytes = 128;
 #endif
     return memoryLimitBytes(viewportMultiplier, viewportSize, minMegabytes, maxMegabytes);
@@ -62,26 +65,18 @@
 size_t TextureManager::reclaimLimitBytes(const IntSize& viewportSize)
 {
     size_t viewportMultiplier, minMegabytes, maxMegabytes;
-    viewportMultiplier = 6;
 #if OS(ANDROID)
-    minMegabytes = 9;
+    viewportMultiplier = 8;
+    minMegabytes = 16;
     maxMegabytes = 32;
 #else
-    minMegabytes = 32;
+    viewportMultiplier = 0;
+    minMegabytes = 0;
     maxMegabytes = 64;
 #endif
     return memoryLimitBytes(viewportMultiplier, viewportSize, minMegabytes, maxMegabytes);
 }
 
-size_t TextureManager::lowLimitBytes(const IntSize& viewportSize)
-{
-    size_t viewportMultiplier, minMegabytes, maxMegabytes;
-    viewportMultiplier = 1;
-    minMegabytes = 2;
-    maxMegabytes = 3;
-    return memoryLimitBytes(viewportMultiplier, viewportSize, minMegabytes, maxMegabytes);
-}
-
 size_t TextureManager::memoryUseBytes(const IntSize& size, GC3Denum textureFormat)
 {
     // FIXME: This assumes all textures are 1 byte/component.

Modified: trunk/Source/WebCore/platform/graphics/chromium/TextureManager.h (114190 => 114191)


--- trunk/Source/WebCore/platform/graphics/chromium/TextureManager.h	2012-04-14 00:38:25 UTC (rev 114190)
+++ trunk/Source/WebCore/platform/graphics/chromium/TextureManager.h	2012-04-14 00:42:00 UTC (rev 114191)
@@ -62,8 +62,6 @@
     static size_t highLimitBytes(const IntSize& viewportSize);
     // Preferred texture size limit given the viewport size.
     static size_t reclaimLimitBytes(const IntSize& viewportSize);
-    // The maximum texture memory usage when asked to release textures.
-    static size_t lowLimitBytes(const IntSize& viewport);
 
     static size_t memoryUseBytes(const IntSize&, GC3Denum format);
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp (114190 => 114191)


--- trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2012-04-14 00:38:25 UTC (rev 114190)
+++ trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp	2012-04-14 00:42:00 UTC (rev 114191)
@@ -202,7 +202,7 @@
     ASSERT(CCProxy::isImplThread());
     TRACE_EVENT("CCLayerTreeHost::commitTo", this, 0);
 
-    m_contentsTextureManager->reduceMemoryToLimit(TextureManager::reclaimLimitBytes(viewportSize()));
+    m_contentsTextureManager->reduceMemoryToLimit(m_contentsTextureManager->preferredMemoryLimitBytes());
     m_contentsTextureManager->deleteEvictedTextures(hostImpl->contentsTextureAllocator());
 }
 
@@ -370,7 +370,8 @@
     m_visible = visible;
 
     if (!visible && m_layerRendererInitialized) {
-        m_contentsTextureManager->reduceMemoryToLimit(TextureManager::lowLimitBytes(viewportSize()));
+        // Drop all unprotected textures.
+        m_contentsTextureManager->reduceMemoryToLimit(0);
         m_contentsTextureManager->unprotectAllTextures();
     }
 
@@ -389,7 +390,7 @@
     if (m_proxy->layerRendererCapabilities().contextHasCachedFrontBuffer)
         contentsTextureManager()->evictAndDeleteAllTextures(hostImpl->contentsTextureAllocator());
     else {
-        contentsTextureManager()->reduceMemoryToLimit(TextureManager::reclaimLimitBytes(viewportSize()));
+        contentsTextureManager()->reduceMemoryToLimit(m_contentsTextureManager->preferredMemoryLimitBytes());
         contentsTextureManager()->deleteEvictedTextures(hostImpl->contentsTextureAllocator());
     }
 
@@ -481,8 +482,8 @@
     if (!m_triggerIdlePaints)
         return;
 
-    size_t preferredLimitBytes = TextureManager::reclaimLimitBytes(m_viewportSize);
-    size_t maxLimitBytes = TextureManager::highLimitBytes(m_viewportSize);
+    size_t preferredLimitBytes = m_contentsTextureManager->preferredMemoryLimitBytes();
+    size_t maxLimitBytes = m_contentsTextureManager->maxMemoryLimitBytes();
     m_contentsTextureManager->reduceMemoryToLimit(preferredLimitBytes);
     if (m_contentsTextureManager->currentMemoryUseBytes() >= preferredLimitBytes)
         return;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to