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