Put cache max size/count as class members

This commit is contained in:
Atlante45 2015-01-11 22:48:42 -08:00
parent f18594cfdb
commit 5cdc76ad35
2 changed files with 8 additions and 12 deletions

View file

@ -73,22 +73,18 @@ QSharedPointer<Resource> ResourceCache::getResource(const QUrl& url, const QUrl&
} }
void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource) { void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource) {
static const int BYTES_PER_MEGABYTES = 1024 * 1024; while (_unusedResourcesSize + resource->getBytesTotal() > _unusedResourcesMaxSize &&
const int RETAINED_RESOURCE_COUNT = 50;
const int RETAINED_RESOURCE_SIZE = 100 * BYTES_PER_MEGABYTES;
while (_unusedResourcesTotalBytes + resource->getBytesTotal() > RETAINED_RESOURCE_SIZE &&
!_unusedResources.empty()) { !_unusedResources.empty()) {
// unload the oldest resource // unload the oldest resource
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin(); QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
_unusedResourcesTotalBytes -= it.value()->getBytesTotal(); _unusedResourcesSize -= it.value()->getBytesTotal();
it.value()->setCache(NULL); it.value()->setCache(NULL);
_unusedResources.erase(it); _unusedResources.erase(it);
} }
if (_unusedResources.size() > RETAINED_RESOURCE_COUNT) { if (_unusedResources.size() > _unusedResourcesMaxCount) {
// unload the oldest resource // unload the oldest resource
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin(); QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
it.value()->setCache(NULL); it.value()->setCache(NULL);
@ -96,13 +92,13 @@ void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource)
} }
resource->setLRUKey(++_lastLRUKey); resource->setLRUKey(++_lastLRUKey);
_unusedResources.insert(resource->getLRUKey(), resource); _unusedResources.insert(resource->getLRUKey(), resource);
_unusedResourcesTotalBytes += resource->getBytesTotal(); _unusedResourcesSize += resource->getBytesTotal();
} }
void ResourceCache::removeUnusedResource(const QSharedPointer<Resource>& resource) { void ResourceCache::removeUnusedResource(const QSharedPointer<Resource>& resource) {
if (_unusedResources.contains(resource->getLRUKey())) { if (_unusedResources.contains(resource->getLRUKey())) {
_unusedResources.remove(resource->getLRUKey()); _unusedResources.remove(resource->getLRUKey());
_unusedResourcesTotalBytes -= resource->getBytesTotal(); _unusedResourcesSize -= resource->getBytesTotal();
} }
} }

View file

@ -45,8 +45,9 @@ public:
void refresh(const QUrl& url); void refresh(const QUrl& url);
protected: protected:
int _unusedResourcesMaxCount = 50;
qint64 _unusedResourcesTotalBytes = 0; qint64 _unusedResourcesMaxSize = 100 * 1024 * 1024;
qint64 _unusedResourcesSize = 0;
QMap<int, QSharedPointer<Resource> > _unusedResources; QMap<int, QSharedPointer<Resource> > _unusedResources;
/// Loads a resource from the specified URL. /// Loads a resource from the specified URL.
@ -67,7 +68,6 @@ protected:
static void requestCompleted(Resource* resource); static void requestCompleted(Resource* resource);
private: private:
friend class Resource; friend class Resource;
QHash<QUrl, QWeakPointer<Resource> > _resources; QHash<QUrl, QWeakPointer<Resource> > _resources;