Title: [152148] trunk/Source/WebCore
Revision
152148
Author
an...@apple.com
Date
2013-06-27 19:00:45 -0700 (Thu, 27 Jun 2013)

Log Message

Use DeferrableOneShotTimer for deleting decoded data
https://bugs.webkit.org/show_bug.cgi?id=118150

Reviewed by Andreas Kling.

Up to 1% of page load time can be used under CachedScript::script() for restarting
the decoded data deletion timer.
        
Using DeferrableOneShotTimer instead of a plain Timer avoids unnecessary low level timer access.

* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::CachedResource):
(WebCore::CachedResource::destroyDecodedDataIfNeeded):
(WebCore::CachedResource::decodedDataDeletionTimerFired):
(WebCore::CachedResource::decodedDataDeletionTimerDelay):

    Adopt DeferrableOneShotTimer.

* loader/cache/CachedResource.h:
* loader/cache/CachedScript.cpp:
(WebCore::CachedScript::script):
(WebCore::CachedScript::decodedDataDeletionTimerDelay):
        
    Keep using zero delay for scripts.

* platform/Timer.h:
(WebCore::DeferrableOneShotTimer::stop):
        
    Avoid unnecessary restart after stopping and starting again.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (152147 => 152148)


--- trunk/Source/WebCore/ChangeLog	2013-06-28 01:53:32 UTC (rev 152147)
+++ trunk/Source/WebCore/ChangeLog	2013-06-28 02:00:45 UTC (rev 152148)
@@ -1,3 +1,35 @@
+2013-06-27  Antti Koivisto  <an...@apple.com>
+
+        Use DeferrableOneShotTimer for deleting decoded data
+        https://bugs.webkit.org/show_bug.cgi?id=118150
+
+        Reviewed by Andreas Kling.
+
+        Up to 1% of page load time can be used under CachedScript::script() for restarting
+        the decoded data deletion timer.
+        
+        Using DeferrableOneShotTimer instead of a plain Timer avoids unnecessary low level timer access.
+
+        * loader/cache/CachedResource.cpp:
+        (WebCore::CachedResource::CachedResource):
+        (WebCore::CachedResource::destroyDecodedDataIfNeeded):
+        (WebCore::CachedResource::decodedDataDeletionTimerFired):
+        (WebCore::CachedResource::decodedDataDeletionTimerDelay):
+
+            Adopt DeferrableOneShotTimer.
+
+        * loader/cache/CachedResource.h:
+        * loader/cache/CachedScript.cpp:
+        (WebCore::CachedScript::script):
+        (WebCore::CachedScript::decodedDataDeletionTimerDelay):
+        
+            Keep using zero delay for scripts.
+
+        * platform/Timer.h:
+        (WebCore::DeferrableOneShotTimer::stop):
+        
+            Avoid unnecessary restart after stopping and starting again.
+
 2013-06-27  Anders Carlsson  <ander...@apple.com>
 
         Add a new String::charactersWithNullTermination() function that returns a vector

Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (152147 => 152148)


--- trunk/Source/WebCore/loader/cache/CachedResource.cpp	2013-06-28 01:53:32 UTC (rev 152147)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp	2013-06-28 02:00:45 UTC (rev 152148)
@@ -188,7 +188,7 @@
     : m_resourceRequest(request)
     , m_loadPriority(defaultPriorityForResourceType(type))
     , m_responseTimestamp(currentTime())
-    , m_decodedDataDeletionTimer(this, &CachedResource::decodedDataDeletionTimerFired)
+    , m_decodedDataDeletionTimer(this, &CachedResource::decodedDataDeletionTimerFired, decodedDataDeletionTimerDelay())
     , m_lastDecodedAccessTime(0)
     , m_loadFinishTime(0)
     , m_encodedSize(0)
@@ -560,12 +560,12 @@
 {
     if (!m_decodedSize)
         return;
-
-    if (double interval = memoryCache()->deadDecodedDataDeletionInterval())
-        m_decodedDataDeletionTimer.startOneShot(interval);
+    if (!memoryCache()->deadDecodedDataDeletionInterval())
+        return;
+    m_decodedDataDeletionTimer.restart();
 }
 
-void CachedResource::decodedDataDeletionTimerFired(Timer<CachedResource>*)
+void CachedResource::decodedDataDeletionTimerFired(DeferrableOneShotTimer<CachedResource>*)
 {
     destroyDecodedData();
 }
@@ -888,6 +888,10 @@
         m_loader->didChangePriority(loadPriority);
 }
 
+double CachedResource::decodedDataDeletionTimerDelay() const
+{
+    return memoryCache()->deadDecodedDataDeletionInterval();
+}
 
 CachedResource::CachedResourceCallback::CachedResourceCallback(CachedResource* resource, CachedResourceClient* client)
     : m_resource(resource)

Modified: trunk/Source/WebCore/loader/cache/CachedResource.h (152147 => 152148)


--- trunk/Source/WebCore/loader/cache/CachedResource.h	2013-06-28 01:53:32 UTC (rev 152147)
+++ trunk/Source/WebCore/loader/cache/CachedResource.h	2013-06-28 02:00:45 UTC (rev 152148)
@@ -291,12 +291,14 @@
 
     RefPtr<ResourceBuffer> m_data;
     OwnPtr<PurgeableBuffer> m_purgeableData;
-    Timer<CachedResource> m_decodedDataDeletionTimer;
+    DeferrableOneShotTimer<CachedResource> m_decodedDataDeletionTimer;
 
 private:
     bool addClientToSet(CachedResourceClient*);
-    void decodedDataDeletionTimerFired(Timer<CachedResource>*);
 
+    virtual double decodedDataDeletionTimerDelay() const;
+    void decodedDataDeletionTimerFired(DeferrableOneShotTimer<CachedResource>*);
+
     virtual PurgePriority purgePriority() const { return PurgeDefault; }
     virtual bool mayTryReplaceEncodedData() const { return false; }
 

Modified: trunk/Source/WebCore/loader/cache/CachedScript.cpp (152147 => 152148)


--- trunk/Source/WebCore/loader/cache/CachedScript.cpp	2013-06-28 01:53:32 UTC (rev 152147)
+++ trunk/Source/WebCore/loader/cache/CachedScript.cpp	2013-06-28 02:00:45 UTC (rev 152148)
@@ -77,7 +77,7 @@
         m_script.append(m_decoder->flush());
         setDecodedSize(m_script.sizeInBytes());
     }
-    m_decodedDataDeletionTimer.startOneShot(0);
+    m_decodedDataDeletionTimer.restart();
     
     return m_script;
 }
@@ -97,6 +97,11 @@
         makePurgeable(true);
 }
 
+double CachedScript::decodedDataDeletionTimerDelay() const
+{
+    return 0;
+}
+
 #if ENABLE(NOSNIFF)
 bool CachedScript::mimeTypeAllowedByNosniff() const
 {

Modified: trunk/Source/WebCore/loader/cache/CachedScript.h (152147 => 152148)


--- trunk/Source/WebCore/loader/cache/CachedScript.h	2013-06-28 01:53:32 UTC (rev 152147)
+++ trunk/Source/WebCore/loader/cache/CachedScript.h	2013-06-28 02:00:45 UTC (rev 152148)
@@ -57,6 +57,7 @@
         virtual void finishLoading(ResourceBuffer*) OVERRIDE;
 
         virtual void destroyDecodedData() OVERRIDE;
+        virtual double decodedDataDeletionTimerDelay() const OVERRIDE;
 
         String m_script;
         RefPtr<TextResourceDecoder> m_decoder;

Modified: trunk/Source/WebCore/platform/Timer.h (152147 => 152148)


--- trunk/Source/WebCore/platform/Timer.h	2013-06-28 01:53:32 UTC (rev 152147)
+++ trunk/Source/WebCore/platform/Timer.h	2013-06-28 02:00:45 UTC (rev 152148)
@@ -148,8 +148,14 @@
         startOneShot(m_delay);
     }
 
-    using TimerBase::stop;
+    void stop()
+    {
+        m_shouldRestartWhenTimerFires = false;
+        TimerBase::stop();
+    }
+
     using TimerBase::isActive;
+
 private:
     virtual void fired()
     {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to