Showing the changes to libraries/networking/src/ResourceCache.cpp (1 of 3 files). Show all
Unified · Split
| @@ -112,27 +112,31 @@ void ResourceCache::reserveUnusedResource(qint64 resourceSize) { · 111 unmodified lines | |||
| 112 | } | 112 | } |
| 113 | 113 | ||
| 114 | void ResourceCache::attemptRequest(Resource* resource) { | 114 | void ResourceCache::attemptRequest(Resource* resource) { |
| 115 | auto sharedItems = DependencyManager::get<ResouceCacheSharedItems>(); | ||
| 115 | if (_requestLimit <= 0) { | 116 | if (_requestLimit <= 0) { |
| 116 | // wait until a slot becomes available | 117 | // wait until a slot becomes available |
| 117 | _pendingRequests.append(resource); | 118 | sharedItems->_pendingRequests.append(resource); |
| 118 | return; | 119 | return; |
| 119 | } | 120 | } |
| 120 | _requestLimit--; | 121 | _requestLimit--; |
| 121 | _loadingRequests.append(resource); | 122 | sharedItems->_loadingRequests.append(resource); |
| 122 | resource->makeRequest(); | 123 | resource->makeRequest(); |
| 123 | } | 124 | } |
| 124 | 125 | ||
| 125 | void ResourceCache::requestCompleted(Resource* resource) { | 126 | void ResourceCache::requestCompleted(Resource* resource) { |
| 126 | _loadingRequests.removeOne(resource); | 127 | |
| 128 | auto sharedItems = DependencyManager::get<ResouceCacheSharedItems>(); | ||
| 129 | sharedItems->_loadingRequests.removeOne(resource); | ||
| 127 | _requestLimit++; | 130 | _requestLimit++; |
| 128 | 131 | ||
| 129 | // look for the highest priority pending request | 132 | // look for the highest priority pending request |
| 130 | int highestIndex = -1; | 133 | int highestIndex = -1; |
| 131 | float highestPriority = -FLT_MAX; | 134 | float highestPriority = -FLT_MAX; |
| 132 | for (int i = 0; i < _pendingRequests.size(); ) { | 135 | int pendingRequests = sharedItems->_pendingRequests.size(); |
| 133 | Resource* resource = _pendingRequests.at(i).data(); | 136 | for (int i = 0; i < pendingRequests; ) { |
| 137 | Resource* resource = sharedItems->_pendingRequests.at(i).data(); | ||
| 134 | if (!resource) { | 138 | if (!resource) { |
| 135 | _pendingRequests.removeAt(i); | 139 | sharedItems->_pendingRequests.removeAt(i); |
| 136 | continue; | 140 | continue; |
| 137 | } | 141 | } |
| 138 | float priority = resource->getLoadPriority(); | 142 | float priority = resource->getLoadPriority(); |
| @@ -143,16 +147,13 @@ void ResourceCache::requestCompleted(Resource* resource) { · 4 unmodified lines | |||
| 143 | i++; | 147 | i++; |
| 144 | } | 148 | } |
| 145 | if (highestIndex >= 0) { | 149 | if (highestIndex >= 0) { |
| 146 | attemptRequest(_pendingRequests.takeAt(highestIndex)); | 150 | attemptRequest(sharedItems->_pendingRequests.takeAt(highestIndex)); |
| 147 | } | 151 | } |
| 148 | } | 152 | } |
| 149 | 153 | ||
| 150 | const int DEFAULT_REQUEST_LIMIT = 10; | 154 | const int DEFAULT_REQUEST_LIMIT = 10; |
| 151 | int ResourceCache::_requestLimit = DEFAULT_REQUEST_LIMIT; | 155 | int ResourceCache::_requestLimit = DEFAULT_REQUEST_LIMIT; |
| 152 | 156 | ||
| 153 | QList<QPointer<Resource> > ResourceCache::_pendingRequests; | ||
| 154 | QList<Resource*> ResourceCache::_loadingRequests; | ||
| 155 | |||
| 156 | Resource::Resource(const QUrl& url, bool delayLoad) : | 157 | Resource::Resource(const QUrl& url, bool delayLoad) : |
| 157 | _url(url), | 158 | _url(url), |
| 158 | _request(url) { | 159 | _request(url) { |