Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(535)

Unified Diff: sky/engine/core/fetch/MemoryCache.h

Issue 1223793006: Delete sky/engine/core/fetch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/engine/core/fetch/ImageResourceClient.h ('k') | sky/engine/core/fetch/MemoryCache.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/core/fetch/MemoryCache.h
diff --git a/sky/engine/core/fetch/MemoryCache.h b/sky/engine/core/fetch/MemoryCache.h
deleted file mode 100644
index 2bdf55258a42cf9a5a474766d0ec6cbdff227e22..0000000000000000000000000000000000000000
--- a/sky/engine/core/fetch/MemoryCache.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de)
- Copyright (C) 2001 Dirk Mueller <mueller@kde.org>
- Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-
- This class provides all functionality needed for loading images, style sheets and html
- pages from the web. It has a memory cache for these objects.
-*/
-
-#ifndef SKY_ENGINE_CORE_FETCH_MEMORYCACHE_H_
-#define SKY_ENGINE_CORE_FETCH_MEMORYCACHE_H_
-
-#include "base/cancelable_callback.h"
-#include "sky/engine/core/fetch/Resource.h"
-#include "sky/engine/core/fetch/ResourcePtr.h"
-#include "sky/engine/public/platform/WebThread.h"
-#include "sky/engine/wtf/HashMap.h"
-#include "sky/engine/wtf/Noncopyable.h"
-#include "sky/engine/wtf/Vector.h"
-#include "sky/engine/wtf/text/StringHash.h"
-#include "sky/engine/wtf/text/WTFString.h"
-
-namespace blink {
-
-class Resource;
-class ResourceFetcher;
-class KURL;
-class ExecutionContext;
-
-// This cache holds subresources used by Web pages: images, scripts, stylesheets, etc.
-
-// The cache keeps a flexible but bounded window of dead resources that grows/shrinks
-// depending on the live resource load. Here's an example of cache growth over time,
-// with a min dead resource capacity of 25% and a max dead resource capacity of 50%:
-
-// |-----| Dead: -
-// |----------| Live: +
-// --|----------| Cache boundary: | (objects outside this mark have been evicted)
-// --|----------++++++++++|
-// -------|-----+++++++++++++++|
-// -------|-----+++++++++++++++|+++++
-
-// Enable this macro to periodically log information about the memory cache.
-#undef MEMORY_CACHE_STATS
-
-// Determines the order in which CachedResources are evicted
-// from the decoded resources cache.
-enum MemoryCacheLiveResourcePriority {
- MemoryCacheLiveResourcePriorityLow = 0,
- MemoryCacheLiveResourcePriorityHigh,
- MemoryCacheLiveResourcePriorityUnknown
-};
-
-enum UpdateReason {
- UpdateForAccess,
- UpdateForPropertyChange
-};
-
-// MemoryCacheEntry class is used only in MemoryCache class, but we don't make
-// MemoryCacheEntry class an inner class of MemoryCache because of dependency
-// from MemoryCacheLRUList.
-class MemoryCacheEntry final {
-public:
- static PassOwnPtr<MemoryCacheEntry> create(Resource* resource) { return adoptPtr(new MemoryCacheEntry(resource)); }
-
- ResourcePtr<Resource> m_resource;
- bool m_inLiveDecodedResourcesList;
- unsigned m_accessCount;
- MemoryCacheLiveResourcePriority m_liveResourcePriority;
- double m_lastDecodedAccessTime; // Used as a thrash guard
-
- RawPtr<MemoryCacheEntry> m_previousInLiveResourcesList;
- RawPtr<MemoryCacheEntry> m_nextInLiveResourcesList;
- RawPtr<MemoryCacheEntry> m_previousInAllResourcesList;
- RawPtr<MemoryCacheEntry> m_nextInAllResourcesList;
-
-private:
- explicit MemoryCacheEntry(Resource* resource)
- : m_resource(resource)
- , m_inLiveDecodedResourcesList(false)
- , m_accessCount(0)
- , m_liveResourcePriority(MemoryCacheLiveResourcePriorityLow)
- , m_lastDecodedAccessTime(0.0)
- , m_previousInLiveResourcesList(nullptr)
- , m_nextInLiveResourcesList(nullptr)
- , m_previousInAllResourcesList(nullptr)
- , m_nextInAllResourcesList(nullptr)
- {
- }
-};
-
-// MemoryCacheLRUList is used only in MemoryCache class, but we don't make
-// MemoryCacheLRUList an inner struct of MemoryCache because we can't define
-// VectorTraits for inner structs.
-struct MemoryCacheLRUList final {
- ALLOW_ONLY_INLINE_ALLOCATION();
-public:
- RawPtr<MemoryCacheEntry> m_head;
- RawPtr<MemoryCacheEntry> m_tail;
-
- MemoryCacheLRUList() : m_head(nullptr), m_tail(nullptr) { }
-};
-
-}
-
-WTF_ALLOW_MOVE_INIT_AND_COMPARE_WITH_MEM_FUNCTIONS(blink::MemoryCacheLRUList);
-
-namespace blink {
-
-class MemoryCache final {
- WTF_MAKE_NONCOPYABLE(MemoryCache); WTF_MAKE_FAST_ALLOCATED;
-public:
- static PassOwnPtr<MemoryCache> create();
- ~MemoryCache();
-
- struct TypeStatistic {
- int count;
- int size;
- int liveSize;
- int decodedSize;
- int encodedSize;
- int encodedSizeDuplicatedInDataURLs;
- int purgeableSize;
- int purgedSize;
-
- TypeStatistic()
- : count(0)
- , size(0)
- , liveSize(0)
- , decodedSize(0)
- , encodedSize(0)
- , encodedSizeDuplicatedInDataURLs(0)
- , purgeableSize(0)
- , purgedSize(0)
- {
- }
-
- void addResource(Resource*);
- };
-
- struct Statistics {
- TypeStatistic images;
- TypeStatistic cssStyleSheets;
- TypeStatistic scripts;
- TypeStatistic xslStyleSheets;
- TypeStatistic fonts;
- TypeStatistic other;
- };
-
- Resource* resourceForURL(const KURL&);
-
- void add(Resource*);
- void replace(Resource* newResource, Resource* oldResource);
- void remove(Resource*);
- bool contains(const Resource*) const;
-
- static KURL removeFragmentIdentifierIfNeeded(const KURL& originalURL);
-
- // Sets the cache's memory capacities, in bytes. These will hold only approximately,
- // since the decoded cost of resources like scripts and stylesheets is not known.
- // - minDeadBytes: The maximum number of bytes that dead resources should consume when the cache is under pressure.
- // - maxDeadBytes: The maximum number of bytes that dead resources should consume when the cache is not under pressure.
- // - totalBytes: The maximum number of bytes that the cache should consume overall.
- void setCapacities(size_t minDeadBytes, size_t maxDeadBytes, size_t totalBytes);
- void setDelayBeforeLiveDecodedPrune(double seconds) { m_delayBeforeLiveDecodedPrune = seconds; }
- void setMaxPruneDeferralDelay(double seconds) { m_maxPruneDeferralDelay = seconds; }
-
- void evictResources();
-
- void prune(Resource* justReleasedResource = 0);
-
- // Called to adjust a resource's size, lru list position, and access count.
- void update(Resource*, size_t oldSize, size_t newSize, bool wasAccessed = false);
- void updateForAccess(Resource* resource) { update(resource, resource->size(), resource->size(), true); }
- void updateDecodedResource(Resource*, UpdateReason, MemoryCacheLiveResourcePriority = MemoryCacheLiveResourcePriorityUnknown);
-
- void makeLive(Resource*);
- void makeDead(Resource*);
-
- // This should be called when a Resource object is created.
- void registerLiveResource(Resource&);
- // This should be called when a Resource object becomes unnecesarry.
- void unregisterLiveResource(Resource&);
-
- static void removeURLFromCache(ExecutionContext*, const KURL&);
-
- Statistics getStatistics();
-
- size_t minDeadCapacity() const { return m_minDeadCapacity; }
- size_t maxDeadCapacity() const { return m_maxDeadCapacity; }
- size_t capacity() const { return m_capacity; }
- size_t liveSize() const { return m_liveSize; }
- size_t deadSize() const { return m_deadSize; }
-
- // Exposed for testing
- MemoryCacheLiveResourcePriority priority(Resource*) const;
-
-private:
- MemoryCache();
-
- MemoryCacheLRUList* lruListFor(unsigned accessCount, size_t);
-
-#ifdef MEMORY_CACHE_STATS
- void dumpStats(Timer<MemoryCache>*);
- void dumpLRULists(bool includeLive) const;
-#endif
-
- // Calls to put the cached resource into and out of LRU lists.
- void insertInLRUList(MemoryCacheEntry*, MemoryCacheLRUList*);
- void removeFromLRUList(MemoryCacheEntry*, MemoryCacheLRUList*);
-
- // Track decoded resources that are in the cache and referenced by a Web page.
- void insertInLiveDecodedResourcesList(MemoryCacheEntry*);
- void removeFromLiveDecodedResourcesList(MemoryCacheEntry*);
-
- size_t liveCapacity() const;
- size_t deadCapacity() const;
-
- void pruneMicrotask();
- // pruneDeadResources() - Flush decoded and encoded data from resources not referenced by Web pages.
- // pruneLiveResources() - Flush decoded data from resources still referenced by Web pages.
- void pruneDeadResources(); // Automatically decide how much to prune.
- void pruneLiveResources();
- void pruneNow(double currentTime);
-
- bool evict(MemoryCacheEntry*);
-
- bool prunePending() const { return !m_pendingPrune.IsCancelled(); }
-
- static void removeURLFromCacheInternal(ExecutionContext*, const KURL&);
-
- bool m_inPruneResources;
- double m_maxPruneDeferralDelay;
- double m_pruneTimeStamp;
- double m_pruneFrameTimeStamp;
-
- size_t m_capacity;
- size_t m_minDeadCapacity;
- size_t m_maxDeadCapacity;
- size_t m_maxDeferredPruneDeadCapacity;
- double m_delayBeforeLiveDecodedPrune;
-
- size_t m_liveSize; // The number of bytes currently consumed by "live" resources in the cache.
- size_t m_deadSize; // The number of bytes currently consumed by "dead" resources in the cache.
-
- base::CancelableClosure m_pendingPrune;
-
- // Size-adjusted and popularity-aware LRU list collection for cache objects. This collection can hold
- // more resources than the cached resource map, since it can also hold "stale" multiple versions of objects that are
- // waiting to die when the clients referencing them go away.
- Vector<MemoryCacheLRUList, 32> m_allResources;
-
- // Lists just for live resources with decoded data. Access to this list is based off of painting the resource.
- // The lists are ordered by decode priority, with higher indices having higher priorities.
- MemoryCacheLRUList m_liveDecodedResources[MemoryCacheLiveResourcePriorityHigh + 1];
-
- // A URL-based map of all resources that are in the cache (including the freshest version of objects that are currently being
- // referenced by a Web page).
- typedef HashMap<String, OwnPtr<MemoryCacheEntry> > ResourceMap;
- ResourceMap m_resources;
-
- friend class MemoryCacheTest;
-#ifdef MEMORY_CACHE_STATS
- Timer<MemoryCache> m_statsTimer;
-#endif
-};
-
-// Returns the global cache.
-MemoryCache* memoryCache();
-
-// Sets the global cache, used to swap in a test instance. Returns the old
-// MemoryCache object.
-PassOwnPtr<MemoryCache> replaceMemoryCacheForTesting(PassOwnPtr<MemoryCache>);
-
-}
-
-#endif // SKY_ENGINE_CORE_FETCH_MEMORYCACHE_H_
« no previous file with comments | « sky/engine/core/fetch/ImageResourceClient.h ('k') | sky/engine/core/fetch/MemoryCache.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698