Improve the WebCore cache so that the maximum cacheable object size is scaled based...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Nov 2004 07:21:50 +0000 (07:21 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Nov 2004 07:21:50 +0000 (07:21 +0000)
size.

        Reviewed by mjs

        * khtml/misc/loader.cpp:
        (CachedObject::finish):
        (Cache::flush):
        (Cache::setSize):
        * khtml/misc/loader.h:
        (khtml::Cache::maxCacheableObjectSize):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8072 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/misc/loader.cpp
WebCore/khtml/misc/loader.h

index e4c5f18..4867c05 100644 (file)
@@ -1,5 +1,19 @@
 2004-11-22  David Hyatt  <hyatt@apple.com>
 
+       Improve the WebCore cache so that the maximum cacheable object size is scaled based off the total cache
+       size.
+       
+        Reviewed by mjs
+
+        * khtml/misc/loader.cpp:
+        (CachedObject::finish):
+        (Cache::flush):
+        (Cache::setSize):
+        * khtml/misc/loader.h:
+        (khtml::Cache::maxCacheableObjectSize):
+
+2004-11-22  David Hyatt  <hyatt@apple.com>
+
        Fix for 3673381, huge directory listing so slow it seems like a hang.  Rework painting and hit testing so that
        it crawls the line box tree instead of the render tree.  This allows more precise intersection/containment testing
        that lets us short circuit earlier when painting and hit testing.
index c0bf58b..2168446 100644 (file)
@@ -95,7 +95,7 @@ CachedObject::~CachedObject()
 
 void CachedObject::finish()
 {
-    if( m_size > MAXCACHEABLE )
+    if (m_size > Cache::maxCacheableObjectSize())
         m_status = Uncacheable;
     else
         m_status = Cached;
@@ -1607,6 +1607,7 @@ QPtrList<DocLoader>* Cache::docloader = 0;
 Loader *Cache::m_loader = 0;
 
 int Cache::maxSize = DEFCACHESIZE;
+int Cache::maxCacheable = MAXCACHEABLE;
 int Cache::flushCount = 0;
 
 QPixmap *Cache::nullPixmap = 0;
@@ -2085,14 +2086,13 @@ void Cache::flush(bool force)
 
     while (m_headOfUncacheableList)
         removeCacheEntry(m_headOfUncacheableList);
-    
+
     for (int i = MAX_LRU_LISTS-1; i>=0; i--) {
         if (m_totalSizeOfLRULists <= maxSize)
             break;
             
-        while (m_totalSizeOfLRULists > maxSize && m_LRULists[i].m_tail) {
+        while (m_totalSizeOfLRULists > maxSize && m_LRULists[i].m_tail)
             removeCacheEntry(m_LRULists[i].m_tail);
-        }
     }
 
     flushCount = m_countOfLRUAndUncacheableLists+10; // Flush again when the cache has grown.
@@ -2141,6 +2141,8 @@ void Cache::checkLRUAndUncacheableListIntegrity()
 void Cache::setSize( int bytes )
 {
     maxSize = bytes;
+    maxCacheable = maxSize / 128;
+
     // may be we need to clear parts of the cache
     flushCount = 0;
     flush(true);
index a49177e..00c7c81 100644 (file)
@@ -594,6 +594,8 @@ protected:
         */
        static int size() { return maxSize; };
 
+        static int maxCacheableObjectSize() { return maxCacheable; }
+
        /**
         * prints some statistics to stdout
         */
@@ -657,6 +659,7 @@ protected:
         static QPtrList<DocLoader>* docloader;
     
         static int maxSize;
+        static int maxCacheable;
         static int flushCount;
     
         static Loader *m_loader;