Title: [123848] trunk/Source/WebCore
Revision
123848
Author
[email protected]
Date
2012-07-27 01:25:36 -0700 (Fri, 27 Jul 2012)

Log Message

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

Patch by Huang Dongsung <[email protected]> on 2012-07-27
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 (123847 => 123848)


--- trunk/Source/WebCore/ChangeLog	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/ChangeLog	2012-07-27 08:25:36 UTC (rev 123848)
@@ -1,3 +1,46 @@
+2012-07-27  Huang Dongsung  <[email protected]>
+
+        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-27  Dana Jansens  <[email protected]>
 
         [chromium] Don't add a HUD layer when there is no rootLayer

Modified: trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.cpp	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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 (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.h	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedCSSStyleSheet.h	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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 (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedImage.cpp	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedImage.cpp	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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 (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedImage.h	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedImage.h	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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 (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedResource.cpp	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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,20 @@
     // 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>*)
+{
+    destroyDecodedData();
+}
+
 void CachedResource::deleteIfPossible()
 {
     if (canDelete() && !inCache())

Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedResource.h	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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 (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedScript.cpp	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedScript.cpp	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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 (123847 => 123848)


--- trunk/Source/WebCore/loader/cache/CachedScript.h	2012-07-27 07:56:34 UTC (rev 123847)
+++ trunk/Source/WebCore/loader/cache/CachedScript.h	2012-07-27 08:25:36 UTC (rev 123848)
@@ -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
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to