mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-07-23 10:54:26 +02:00
Merge pull request #7673 from zzmp/fix/cache-tallies
Decrement cache tallies for uncached resources
This commit is contained in:
commit
c0f4b8573c
2 changed files with 21 additions and 14 deletions
|
@ -101,8 +101,7 @@ void ResourceCache::refresh(const QUrl& url) {
|
||||||
if (resource) {
|
if (resource) {
|
||||||
resource->refresh();
|
resource->refresh();
|
||||||
} else {
|
} else {
|
||||||
QWriteLocker locker(&_resourcesLock);
|
removeResource(url);
|
||||||
_resources.remove(url);
|
|
||||||
resetResourceCounters();
|
resetResourceCounters();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -196,11 +195,8 @@ void ResourceCache::addUnusedResource(const QSharedPointer<Resource>& resource)
|
||||||
// If it doesn't fit or its size is unknown, remove it from the cache.
|
// If it doesn't fit or its size is unknown, remove it from the cache.
|
||||||
if (resource->getBytes() == 0 || resource->getBytes() > _unusedResourcesMaxSize) {
|
if (resource->getBytes() == 0 || resource->getBytes() > _unusedResourcesMaxSize) {
|
||||||
resource->setCache(nullptr);
|
resource->setCache(nullptr);
|
||||||
|
removeResource(resource->getURL(), resource->getBytes());
|
||||||
_totalResourcesSize -= resource->getBytes();
|
|
||||||
_resources.remove(resource->getURL());
|
|
||||||
resetResourceCounters();
|
resetResourceCounters();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
reserveUnusedResource(resource->getBytes());
|
reserveUnusedResource(resource->getBytes());
|
||||||
|
@ -233,8 +229,7 @@ void ResourceCache::reserveUnusedResource(qint64 resourceSize) {
|
||||||
it.value()->setCache(nullptr);
|
it.value()->setCache(nullptr);
|
||||||
auto size = it.value()->getBytes();
|
auto size = it.value()->getBytes();
|
||||||
|
|
||||||
_totalResourcesSize -= size;
|
removeResource(it.value()->getURL(), size);
|
||||||
_resources.remove(it.value()->getURL());
|
|
||||||
|
|
||||||
_unusedResourcesSize -= size;
|
_unusedResourcesSize -= size;
|
||||||
_unusedResources.erase(it);
|
_unusedResources.erase(it);
|
||||||
|
@ -259,6 +254,12 @@ void ResourceCache::resetResourceCounters() {
|
||||||
emit dirty();
|
emit dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ResourceCache::removeResource(const QUrl& url, qint64 size) {
|
||||||
|
QWriteLocker locker(&_resourcesLock);
|
||||||
|
_resources.remove(url);
|
||||||
|
_totalResourcesSize -= size;
|
||||||
|
}
|
||||||
|
|
||||||
void ResourceCache::updateTotalSize(const qint64& oldSize, const qint64& newSize) {
|
void ResourceCache::updateTotalSize(const qint64& oldSize, const qint64& newSize) {
|
||||||
_totalResourcesSize += (newSize - oldSize);
|
_totalResourcesSize += (newSize - oldSize);
|
||||||
emit dirty();
|
emit dirty();
|
||||||
|
@ -454,12 +455,12 @@ void Resource::refresh() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Resource::allReferencesCleared() {
|
void Resource::allReferencesCleared() {
|
||||||
if (_cache && isCacheable()) {
|
if (QThread::currentThread() != thread()) {
|
||||||
if (QThread::currentThread() != thread()) {
|
QMetaObject::invokeMethod(this, "allReferencesCleared");
|
||||||
QMetaObject::invokeMethod(this, "allReferencesCleared");
|
return;
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if (_cache && isCacheable()) {
|
||||||
// create and reinsert new shared pointer
|
// create and reinsert new shared pointer
|
||||||
QSharedPointer<Resource> self(this, &Resource::allReferencesCleared);
|
QSharedPointer<Resource> self(this, &Resource::allReferencesCleared);
|
||||||
setSelf(self);
|
setSelf(self);
|
||||||
|
@ -467,8 +468,13 @@ void Resource::allReferencesCleared() {
|
||||||
|
|
||||||
// add to the unused list
|
// add to the unused list
|
||||||
_cache->addUnusedResource(self);
|
_cache->addUnusedResource(self);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
if (_cache) {
|
||||||
|
// remove from the cache
|
||||||
|
_cache->removeResource(getURL(), getBytes());
|
||||||
|
_cache->resetResourceCounters();
|
||||||
|
}
|
||||||
|
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,6 +153,7 @@ private:
|
||||||
void reserveUnusedResource(qint64 resourceSize);
|
void reserveUnusedResource(qint64 resourceSize);
|
||||||
void clearUnusedResource();
|
void clearUnusedResource();
|
||||||
void resetResourceCounters();
|
void resetResourceCounters();
|
||||||
|
void removeResource(const QUrl& url, qint64 size = 0);
|
||||||
|
|
||||||
QReadWriteLock _resourcesLock { QReadWriteLock::Recursive };
|
QReadWriteLock _resourcesLock { QReadWriteLock::Recursive };
|
||||||
QHash<QUrl, QWeakPointer<Resource>> _resources;
|
QHash<QUrl, QWeakPointer<Resource>> _resources;
|
||||||
|
|
Loading…
Reference in a new issue