Fix cache tallies for uncached resources

This commit is contained in:
Zach Pomerantz 2016-04-14 13:50:36 -07:00
parent 7b5075cce5
commit 32e9c49cf0
2 changed files with 20 additions and 13 deletions

View file

@ -53,7 +53,7 @@ void ResourceCache::refresh(const QUrl& url) {
if (!resource.isNull()) {
resource->refresh();
} else {
_resources.remove(url);
removeResource(url);
resetResourceCounters();
}
}
@ -140,11 +140,8 @@ void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource)
// If it doesn't fit or its size is unknown, remove it from the cache.
if (resource->getBytes() == 0 || resource->getBytes() > _unusedResourcesMaxSize) {
resource->setCache(nullptr);
_totalResourcesSize -= resource->getBytes();
_resources.remove(resource->getURL());
removeResource(resource->getURL(), resource->getBytes());
resetResourceCounters();
return;
}
reserveUnusedResource(resource->getBytes());
@ -173,8 +170,7 @@ void ResourceCache::reserveUnusedResource(qint64 resourceSize) {
it.value()->setCache(nullptr);
auto size = it.value()->getBytes();
_totalResourcesSize -= size;
_resources.remove(it.value()->getURL());
removeResource(it.value()->getURL(), size);
_unusedResourcesSize -= size;
_unusedResources.erase(it);
@ -198,6 +194,11 @@ void ResourceCache::resetResourceCounters() {
emit dirty();
}
void ResourceCache::removeResource(const QUrl& url, qint64 size) {
_resources.remove(url);
_totalResourcesSize -= size;
}
void ResourceCache::updateTotalSize(const qint64& oldSize, const qint64& newSize) {
_totalResourcesSize += (newSize - oldSize);
emit dirty();
@ -370,12 +371,12 @@ void Resource::refresh() {
}
void Resource::allReferencesCleared() {
if (_cache && isCacheable()) {
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "allReferencesCleared");
return;
}
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "allReferencesCleared");
return;
}
if (_cache && isCacheable()) {
// create and reinsert new shared pointer
QSharedPointer<Resource> self(this, &Resource::allReferencesCleared);
setSelf(self);
@ -383,8 +384,13 @@ void Resource::allReferencesCleared() {
// add to the unused list
_cache->addUnusedResource(self);
} else {
if (_cache) {
// remove from the cache
_cache->removeResource(getURL(), getBytes());
_cache->resetResourceCounters();
}
deleteLater();
}
}

View file

@ -153,6 +153,7 @@ private:
void reserveUnusedResource(qint64 resourceSize);
void clearUnusedResource();
void resetResourceCounters();
void removeResource(const QUrl& url, qint64 size = 0);
QHash<QUrl, QWeakPointer<Resource>> _resources;
int _lastLRUKey = 0;