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