Introduce reserveUnusedResource

This commit is contained in:
Atlante45 2015-01-12 11:37:00 -08:00
parent cb3f07e6f5
commit ea0ffd0125
2 changed files with 18 additions and 8 deletions

View file

@ -73,15 +73,12 @@ QSharedPointer<Resource> ResourceCache::getResource(const QUrl& url, const QUrl&
}
void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource) {
while (_unusedResourcesSize + resource->getBytesTotal() > _unusedResourcesMaxSize &&
!_unusedResources.empty()) {
// unload the oldest resource
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
_unusedResourcesSize -= it.value()->getBytesTotal();
it.value()->setCache(NULL);
_unusedResources.erase(it);
if (resource->getBytesTotal() > _unusedResourcesMaxSize) {
// If it doesn't fit anyway, let's leave whatever is already in the cache.
resource->setCache(nullptr);
return;
}
reserveUnusedResource(resource->getBytesTotal());
resource->setLRUKey(++_lastLRUKey);
_unusedResources.insert(resource->getLRUKey(), resource);
@ -95,6 +92,18 @@ void ResourceCache::removeUnusedResource(const QSharedPointer<Resource>& resourc
}
}
void ResourceCache::reserveUnusedResource(qint64 resourceSize) {
while (!_unusedResources.empty() &&
_unusedResourcesSize + resourceSize > _unusedResourcesMaxSize) {
// unload the oldest resource
QMap<int, QSharedPointer<Resource> >::iterator it = _unusedResources.begin();
_unusedResourcesSize -= it.value()->getBytesTotal();
it.value()->setCache(NULL);
_unusedResources.erase(it);
}
}
void ResourceCache::attemptRequest(Resource* resource) {
if (_requestLimit <= 0) {
// wait until a slot becomes available

View file

@ -65,6 +65,7 @@ protected:
void addUnusedResource(const QSharedPointer<Resource>& resource);
void removeUnusedResource(const QSharedPointer<Resource>& resource);
void reserveUnusedResource(qint64 resourceSize);
static void attemptRequest(Resource* resource);
static void requestCompleted(Resource* resource);