mirror of
https://github.com/lubosz/overte.git
synced 2025-04-24 11:43:16 +02:00
Add byte limit to chaches
This commit is contained in:
parent
8dbaeeb646
commit
77e4a2ef35
2 changed files with 26 additions and 3 deletions
|
@ -67,13 +67,26 @@ QSharedPointer<Resource> ResourceCache::getResource(const QUrl& url, const QUrl&
|
|||
_resources.insert(url, resource);
|
||||
|
||||
} else {
|
||||
_unusedResources.remove(resource->getLRUKey());
|
||||
removeUnusedResource(resource);
|
||||
}
|
||||
return resource;
|
||||
}
|
||||
|
||||
void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource) {
|
||||
const int RETAINED_RESOURCE_COUNT = 50;
|
||||
const int RETAINED_RESOURCE_SIZE = 100 * 1024 * 1024;
|
||||
|
||||
while (_unusedResourcesTotalBytes + resource->getBytesTotal() > RETAINED_RESOURCE_SIZE &&
|
||||
!_unusedResources.empty()) {
|
||||
// unload the oldest resource
|
||||
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
|
||||
|
||||
_unusedResourcesTotalBytes -= it.value()->getBytesTotal();
|
||||
it.value()->setCache(NULL);
|
||||
_unusedResources.erase(it);
|
||||
}
|
||||
|
||||
|
||||
if (_unusedResources.size() > RETAINED_RESOURCE_COUNT) {
|
||||
// unload the oldest resource
|
||||
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
|
||||
|
@ -82,6 +95,14 @@ void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource)
|
|||
}
|
||||
resource->setLRUKey(++_lastLRUKey);
|
||||
_unusedResources.insert(resource->getLRUKey(), resource);
|
||||
_unusedResourcesTotalBytes += resource->getBytesTotal();
|
||||
}
|
||||
|
||||
void ResourceCache::removeUnusedResource(const QSharedPointer<Resource>& resource) {
|
||||
if (_unusedResources.contains(resource->getLRUKey())) {
|
||||
_unusedResources.remove(resource->getLRUKey());
|
||||
_unusedResourcesTotalBytes -= resource->getBytesTotal();
|
||||
}
|
||||
}
|
||||
|
||||
void ResourceCache::attemptRequest(Resource* resource) {
|
||||
|
|
|
@ -45,7 +45,8 @@ public:
|
|||
void refresh(const QUrl& url);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
qint64 _unusedResourcesTotalBytes = 0;
|
||||
QMap<int, QSharedPointer<Resource> > _unusedResources;
|
||||
|
||||
/// Loads a resource from the specified URL.
|
||||
|
@ -58,8 +59,9 @@ protected:
|
|||
/// Creates a new resource.
|
||||
virtual QSharedPointer<Resource> createResource(const QUrl& url,
|
||||
const QSharedPointer<Resource>& fallback, bool delayLoad, const void* extra) = 0;
|
||||
|
||||
|
||||
void addUnusedResource(const QSharedPointer<Resource>& resource);
|
||||
void removeUnusedResource(const QSharedPointer<Resource>& resource);
|
||||
|
||||
static void attemptRequest(Resource* resource);
|
||||
static void requestCompleted(Resource* resource);
|
||||
|
|
Loading…
Reference in a new issue