diff --git a/libraries/networking/src/ResourceCache.cpp b/libraries/networking/src/ResourceCache.cpp index 96e05c8d09..fcf0e833e1 100644 --- a/libraries/networking/src/ResourceCache.cpp +++ b/libraries/networking/src/ResourceCache.cpp @@ -28,6 +28,80 @@ (((x) > (max)) ? (max) :\ (x))) +void ResourceCacheSharedItems::appendActiveRequest(QWeakPointer resource) { + Lock lock(_mutex); + _loadingRequests.append(resource); +} + +void ResourceCacheSharedItems::appendPendingRequest(QWeakPointer resource) { + Lock lock(_mutex); + _pendingRequests.append(resource); +} + +QList> ResourceCacheSharedItems::getPendingRequests() { + QList> result; + + { + Lock lock(_mutex); + foreach(QSharedPointer resource, _pendingRequests) { + if (resource) { + result.append(resource); + } + } + } + return result; +} + +uint32_t ResourceCacheSharedItems::getPendingRequestsCount() const { + Lock lock(_mutex); + return _pendingRequests.size(); +} + +QList> ResourceCacheSharedItems::getLoadingRequests() { + QList> result; + + { + Lock lock(_mutex); + foreach(QSharedPointer resource, _loadingRequests) { + if (resource) { + result.append(resource); + } + } + } + return result; +} + +void ResourceCacheSharedItems::removeRequest(QWeakPointer resource) { + Lock lock(_mutex); + _loadingRequests.removeAll(resource); +} + +QSharedPointer ResourceCacheSharedItems::getHighestPendingRequest() { + Lock lock(_mutex); + // look for the highest priority pending request + int highestIndex = -1; + float highestPriority = -FLT_MAX; + QSharedPointer highestResource; + for (int i = 0; i < _pendingRequests.size();) { + auto resource = _pendingRequests.at(i).lock(); + if (!resource) { + _pendingRequests.removeAt(i); + continue; + } + float priority = resource->getLoadPriority(); + if (priority >= highestPriority) { + highestPriority = priority; + highestIndex = i; + highestResource = resource; + } + i++; + } + if (highestIndex >= 0) { + _pendingRequests.takeAt(highestIndex); + } + return highestResource; +} + ResourceCache::ResourceCache(QObject* parent) : QObject(parent) { auto& domainHandler = DependencyManager::get()->getDomainHandler(); connect(&domainHandler, &DomainHandler::disconnectedFromDomain, @@ -264,81 +338,7 @@ void ResourceCache::updateTotalSize(const qint64& oldSize, const qint64& newSize _totalResourcesSize += (newSize - oldSize); emit dirty(); } - -void ResourceCacheSharedItems::appendActiveRequest(QWeakPointer resource) { - Lock lock(_mutex); - _loadingRequests.append(resource); -} - -void ResourceCacheSharedItems::appendPendingRequest(QWeakPointer resource) { - Lock lock(_mutex); - _pendingRequests.append(resource); -} - -QList> ResourceCacheSharedItems::getPendingRequests() { - QList> result; - - { - Lock lock(_mutex); - foreach(QSharedPointer resource, _pendingRequests) { - if (resource) { - result.append(resource); - } - } - } - return result; -} - -uint32_t ResourceCacheSharedItems::getPendingRequestsCount() const { - Lock lock(_mutex); - return _pendingRequests.size(); -} - -QList> ResourceCacheSharedItems::getLoadingRequests() { - QList> result; - - { - Lock lock(_mutex); - foreach(QSharedPointer resource, _loadingRequests) { - if (resource) { - result.append(resource); - } - } - } - return result; -} - -void ResourceCacheSharedItems::removeRequest(QWeakPointer resource) { - Lock lock(_mutex); - _loadingRequests.removeAll(resource); -} - -QSharedPointer ResourceCacheSharedItems::getHighestPendingRequest() { - Lock lock(_mutex); - // look for the highest priority pending request - int highestIndex = -1; - float highestPriority = -FLT_MAX; - QSharedPointer highestResource; - for (int i = 0; i < _pendingRequests.size();) { - auto resource = _pendingRequests.at(i).lock(); - if (!resource) { - _pendingRequests.removeAt(i); - continue; - } - float priority = resource->getLoadPriority(); - if (priority >= highestPriority) { - highestPriority = priority; - highestIndex = i; - highestResource = resource; - } - i++; - } - if (highestIndex >= 0) { - _pendingRequests.takeAt(highestIndex); - } - return highestResource; -} - + QList> ResourceCache::getLoadingRequests() { return DependencyManager::get()->getLoadingRequests(); }