Title: [123808] trunk/Source/WebCore
Revision
123808
Author
k...@webkit.org
Date
2012-07-26 16:03:40 -0700 (Thu, 26 Jul 2012)

Log Message

Gather the duplicated timer code into CachedResource.
https://bugs.webkit.org/show_bug.cgi?id=92332

Patch by Huang Dongsung <luxte...@company100.net> on 2012-07-26
Reviewed by Nate Chapin.

Internal review by Jae Hyun Park.

When all clients are removed, CachedImage, CachedScript and CachedCSSStyleSheet
start the timer to destroy decoded data. Those three classes have their own
timer.
Changed CachedCSSStyleSheet::didAddClient to call super class method in order to
stop the timer. This change does not have any side effect because
CachedResource::didAddClient only stops the timer in this case.

No new tests - no new testable functionality.

* loader/cache/CachedCSSStyleSheet.cpp:
(WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
(WebCore::CachedCSSStyleSheet::didAddClient):
* loader/cache/CachedCSSStyleSheet.h:
(CachedCSSStyleSheet):
* loader/cache/CachedImage.cpp:
(WebCore::CachedImage::CachedImage):
(WebCore::CachedImage::didAddClient):
(WebCore::CachedImage::allClientsRemoved):
* loader/cache/CachedImage.h:
(CachedImage):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::CachedResource):
(WebCore::CachedResource::didAddClient):
(WebCore::CachedResource::removeClient):
(WebCore::CachedResource::destroyDecodedDataIfNeeded):
(WebCore):
(WebCore::CachedResource::decodedDataDeletionTimerFired):
* loader/cache/CachedResource.h:
(CachedResource):
* loader/cache/CachedScript.cpp:
(WebCore::CachedScript::CachedScript):
* loader/cache/CachedScript.h:
(CachedScript):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (123807 => 123808)


--- trunk/Source/WebCore/ChangeLog	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/ChangeLog	2012-07-26 23:03:40 UTC (rev 123808)
@@ -1,3 +1,46 @@
+2012-07-26  Huang Dongsung  <luxte...@company100.net>
+
+        Gather the duplicated timer code into CachedResource.
+        https://bugs.webkit.org/show_bug.cgi?id=92332
+
+        Reviewed by Nate Chapin.
+
+        Internal review by Jae Hyun Park.
+
+        When all clients are removed, CachedImage, CachedScript and CachedCSSStyleSheet
+        start the timer to destroy decoded data. Those three classes have their own
+        timer.
+        Changed CachedCSSStyleSheet::didAddClient to call super class method in order to
+        stop the timer. This change does not have any side effect because
+        CachedResource::didAddClient only stops the timer in this case.
+
+        No new tests - no new testable functionality.
+
+        * loader/cache/CachedCSSStyleSheet.cpp:
+        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
+        (WebCore::CachedCSSStyleSheet::didAddClient):
+        * loader/cache/CachedCSSStyleSheet.h:
+        (CachedCSSStyleSheet):
+        * loader/cache/CachedImage.cpp:
+        (WebCore::CachedImage::CachedImage):
+        (WebCore::CachedImage::didAddClient):
+        (WebCore::CachedImage::allClientsRemoved):
+        * loader/cache/CachedImage.h:
+        (CachedImage):
+        * loader/cache/CachedResource.cpp:
+        (WebCore::CachedResource::CachedResource):
+        (WebCore::CachedResource::didAddClient):
+        (WebCore::CachedResource::removeClient):
+        (WebCore::CachedResource::destroyDecodedDataIfNeeded):
+        (WebCore):
+        (WebCore::CachedResource::decodedDataDeletionTimerFired):
+        * loader/cache/CachedResource.h:
+        (CachedResource):
+        * loader/cache/CachedScript.cpp:
+        (WebCore::CachedScript::CachedScript):
+        * loader/cache/CachedScript.h:
+        (CachedScript):
+
 2012-07-26  Benjamin Poulain  <bpoul...@apple.com>
 
         Use the constant count of Tags/Attributes names instead of getting the size when obtaining the tags/attributes

Modified: trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp	2012-07-26 23:03:40 UTC (rev 123808)
@@ -43,7 +43,6 @@
 CachedCSSStyleSheet::CachedCSSStyleSheet(const ResourceRequest& resourceRequest, const String& charset)
     : CachedResource(resourceRequest, CSSStyleSheet)
     , m_decoder(TextResourceDecoder::create("text/css", charset))
-    , m_decodedDataDeletionTimer(this, &CachedCSSStyleSheet::decodedDataDeletionTimerFired)
 {
     // Prefer text/css but accept any type (dell.com serves a stylesheet
     // as text/html; see <http://bugs.webkit.org/show_bug.cgi?id=11451>).
@@ -59,17 +58,10 @@
 void CachedCSSStyleSheet::didAddClient(CachedResourceClient* c)
 {
     ASSERT(c->resourceClientType() == CachedStyleSheetClient::expectedType());
-    if (m_decodedDataDeletionTimer.isActive())
-        m_decodedDataDeletionTimer.stop();
-
     if (!isLoading())
         static_cast<CachedStyleSheetClient*>(c)->setCSSStyleSheet(m_resourceRequest.url(), m_response.url(), m_decoder->encoding().name(), this);
-}
 
-void CachedCSSStyleSheet::allClientsRemoved()
-{
-    if (double interval = memoryCache()->deadDecodedDataDeletionInterval())
-        m_decodedDataDeletionTimer.startOneShot(interval);
+    CachedResource::didAddClient(c);
 }
 
 void CachedCSSStyleSheet::setEncoding(const String& chs)
@@ -172,11 +164,6 @@
         makePurgeable(true);
 }
 
-void CachedCSSStyleSheet::decodedDataDeletionTimerFired(Timer<CachedCSSStyleSheet>*)
-{
-    destroyDecodedData();
-}
-
 PassRefPtr<StyleSheetContents> CachedCSSStyleSheet::restoreParsedStyleSheet(const CSSParserContext& context)
 {
     if (!m_parsedStyleSheetCache)

Modified: trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.h (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.h	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.h	2012-07-26 23:03:40 UTC (rev 123808)
@@ -27,7 +27,6 @@
 #define CachedCSSStyleSheet_h
 
 #include "CachedResource.h"
-#include "Timer.h"
 #include <wtf/Vector.h>
 
 namespace WebCore {
@@ -47,8 +46,6 @@
 
         virtual void didAddClient(CachedResourceClient*);
         
-        virtual void allClientsRemoved();
-
         virtual void setEncoding(const String&);
         virtual String encoding() const;
         virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
@@ -62,14 +59,12 @@
         void saveParsedStyleSheet(PassRefPtr<StyleSheetContents>);
     
     private:
-        void decodedDataDeletionTimerFired(Timer<CachedCSSStyleSheet>*);
         bool canUseSheet(bool enforceMIMEType, bool* hasValidMIMEType) const;
         virtual PurgePriority purgePriority() const { return PurgeLast; }
 
     protected:
         RefPtr<TextResourceDecoder> m_decoder;
         String m_decodedSheetText;
-        Timer<CachedCSSStyleSheet> m_decodedDataDeletionTimer;
 
         RefPtr<StyleSheetContents> m_parsedStyleSheetCache;
     };

Modified: trunk/Source/WebCore/loader/cache/CachedImage.cpp (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedImage.cpp	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedImage.cpp	2012-07-26 23:03:40 UTC (rev 123808)
@@ -57,7 +57,6 @@
 CachedImage::CachedImage(const ResourceRequest& resourceRequest)
     : CachedResource(resourceRequest, ImageResource)
     , m_image(0)
-    , m_decodedDataDeletionTimer(this, &CachedImage::decodedDataDeletionTimerFired)
     , m_shouldPaintBrokenImage(true)
 {
     setStatus(Unknown);
@@ -66,7 +65,6 @@
 CachedImage::CachedImage(Image* image)
     : CachedResource(ResourceRequest(), ImageResource)
     , m_image(image)
-    , m_decodedDataDeletionTimer(this, &CachedImage::decodedDataDeletionTimerFired)
     , m_shouldPaintBrokenImage(true)
 {
     setStatus(Cached);
@@ -78,12 +76,6 @@
     clearImage();
 }
 
-void CachedImage::decodedDataDeletionTimerFired(Timer<CachedImage>*)
-{
-    ASSERT(!hasClients());
-    destroyDecodedData();
-}
-
 void CachedImage::load(CachedResourceLoader* cachedResourceLoader, const ResourceLoaderOptions& options)
 {
     if (!cachedResourceLoader || cachedResourceLoader->autoLoadImages())
@@ -94,9 +86,6 @@
 
 void CachedImage::didAddClient(CachedResourceClient* c)
 {
-    if (m_decodedDataDeletionTimer.isActive())
-        m_decodedDataDeletionTimer.stop();
-    
     if (m_data && !m_image && !errorOccurred()) {
         createImage();
         m_image->setData(m_data, true);
@@ -124,8 +113,6 @@
 {
     if (m_image && !errorOccurred())
         m_image->resetAnimation();
-    if (double interval = memoryCache()->deadDecodedDataDeletionInterval())
-        m_decodedDataDeletionTimer.startOneShot(interval);
 }
 
 pair<Image*, float> CachedImage::brokenImage(float deviceScaleFactor) const

Modified: trunk/Source/WebCore/loader/cache/CachedImage.h (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedImage.h	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedImage.h	2012-07-26 23:03:40 UTC (rev 123808)
@@ -28,7 +28,6 @@
 #include "SVGImageCache.h"
 #include "ImageObserver.h"
 #include "IntRect.h"
-#include "Timer.h"
 #include <wtf/Vector.h>
 
 namespace WebCore {
@@ -104,7 +103,6 @@
     size_t maximumDecodedImageSize();
     // If not null, changeRect is the changed part of the image.
     void notifyObservers(const IntRect* changeRect = 0);
-    void decodedDataDeletionTimerFired(Timer<CachedImage>*);
     virtual PurgePriority purgePriority() const { return PurgeFirst; }
     void checkShouldPaintBrokenImage();
 
@@ -112,7 +110,6 @@
 #if ENABLE(SVG)
     OwnPtr<SVGImageCache> m_svgImageCache;
 #endif
-    Timer<CachedImage> m_decodedDataDeletionTimer;
     bool m_shouldPaintBrokenImage;
 };
 

Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedResource.cpp	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp	2012-07-26 23:03:40 UTC (rev 123808)
@@ -136,6 +136,7 @@
     : m_resourceRequest(request)
     , m_loadPriority(defaultPriorityForResourceType(type))
     , m_responseTimestamp(currentTime())
+    , m_decodedDataDeletionTimer(this, &CachedResource::decodedDataDeletionTimerFired)
     , m_lastDecodedAccessTime(0)
     , m_loadFinishTime(0)
     , m_encodedSize(0)
@@ -380,6 +381,9 @@
 
 void CachedResource::didAddClient(CachedResourceClient* c)
 {
+    if (m_decodedDataDeletionTimer.isActive())
+        m_decodedDataDeletionTimer.stop();
+
     if (m_clientsAwaitingCallback.contains(c)) {
         m_clients.add(c);
         m_clientsAwaitingCallback.remove(c);
@@ -436,6 +440,7 @@
         memoryCache()->removeFromLiveResourcesSize(this);
         memoryCache()->removeFromLiveDecodedResourcesList(this);
         allClientsRemoved();
+        destroyDecodedDataIfNeeded();
         if (response().cacheControlContainsNoStore()) {
             // RFC2616 14.9.2:
             // "no-store: ... MUST make a best-effort attempt to remove the information from volatile storage as promptly as possible"
@@ -449,6 +454,21 @@
     // This object may be dead here.
 }
 
+void CachedResource::destroyDecodedDataIfNeeded()
+{
+    if (!m_decodedSize)
+        return;
+
+    if (double interval = memoryCache()->deadDecodedDataDeletionInterval())
+        m_decodedDataDeletionTimer.startOneShot(interval);
+}
+
+void CachedResource::decodedDataDeletionTimerFired(Timer<CachedResource>*)
+{
+    ASSERT(!hasClients());
+    destroyDecodedData();
+}
+
 void CachedResource::deleteIfPossible()
 {
     if (canDelete() && !inCache())

Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedResource.h	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h	2012-07-26 23:03:40 UTC (rev 123808)
@@ -128,6 +128,7 @@
     virtual void didAddClient(CachedResourceClient*);
     virtual void didRemoveClient(CachedResourceClient*) { }
     virtual void allClientsRemoved() { }
+    void destroyDecodedDataIfNeeded();
 
     unsigned count() const { return m_clients.size(); }
 
@@ -286,9 +287,11 @@
 
     RefPtr<SharedBuffer> m_data;
     OwnPtr<PurgeableBuffer> m_purgeableData;
+    Timer<CachedResource> m_decodedDataDeletionTimer;
 
 private:
     bool addClientToSet(CachedResourceClient*);
+    void decodedDataDeletionTimerFired(Timer<CachedResource>*);
 
     virtual PurgePriority purgePriority() const { return PurgeDefault; }
 

Modified: trunk/Source/WebCore/loader/cache/CachedScript.cpp (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedScript.cpp	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedScript.cpp	2012-07-26 23:03:40 UTC (rev 123808)
@@ -43,7 +43,6 @@
 CachedScript::CachedScript(const ResourceRequest& resourceRequest, const String& charset)
     : CachedResource(resourceRequest, Script)
     , m_decoder(TextResourceDecoder::create("application/_javascript_", charset))
-    , m_decodedDataDeletionTimer(this, &CachedScript::decodedDataDeletionTimerFired)
 {
     // It's _javascript_ we want.
     // But some websites think their scripts are <some wrong mimetype here>
@@ -55,20 +54,6 @@
 {
 }
 
-void CachedScript::didAddClient(CachedResourceClient* c)
-{
-    if (m_decodedDataDeletionTimer.isActive())
-        m_decodedDataDeletionTimer.stop();
-
-    CachedResource::didAddClient(c);
-}
-
-void CachedScript::allClientsRemoved()
-{
-    if (double interval = memoryCache()->deadDecodedDataDeletionInterval())
-        m_decodedDataDeletionTimer.startOneShot(interval);
-}
-
 void CachedScript::setEncoding(const String& chs)
 {
     m_decoder->setEncoding(chs, TextResourceDecoder::EncodingFromHTTPHeader);
@@ -127,11 +112,6 @@
         makePurgeable(true);
 }
 
-void CachedScript::decodedDataDeletionTimerFired(Timer<CachedScript>*)
-{
-    destroyDecodedData();
-}
-
 #if USE(JSC)
 JSC::SourceProviderCache* CachedScript::sourceProviderCache() const
 {   

Modified: trunk/Source/WebCore/loader/cache/CachedScript.h (123807 => 123808)


--- trunk/Source/WebCore/loader/cache/CachedScript.h	2012-07-26 23:01:05 UTC (rev 123807)
+++ trunk/Source/WebCore/loader/cache/CachedScript.h	2012-07-26 23:03:40 UTC (rev 123808)
@@ -27,7 +27,6 @@
 #define CachedScript_h
 
 #include "CachedResource.h"
-#include "Timer.h"
 
 #if USE(JSC)
 namespace JSC {
@@ -47,9 +46,6 @@
 
         const String& script();
 
-        virtual void didAddClient(CachedResourceClient*);
-        virtual void allClientsRemoved();
-
         virtual void setEncoding(const String&);
         virtual String encoding() const;
         virtual void data(PassRefPtr<SharedBuffer> data, bool allDataReceived);
@@ -62,12 +58,10 @@
         void sourceProviderCacheSizeChanged(int delta);
 #endif
     private:
-        void decodedDataDeletionTimerFired(Timer<CachedScript>*);
         virtual PurgePriority purgePriority() const { return PurgeLast; }
 
         String m_script;
         RefPtr<TextResourceDecoder> m_decoder;
-        Timer<CachedScript> m_decodedDataDeletionTimer;
 #if USE(JSC)        
         mutable OwnPtr<JSC::SourceProviderCache> m_sourceProviderCache;
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to