diff options
author | Huyen Chau Nguyen <hello@chau-nguyen.de> | 2018-10-17 20:15:08 +0200 |
---|---|---|
committer | Huyen Chau Nguyen <hello@chau-nguyen.de> | 2018-10-23 12:47:10 +0200 |
commit | fa78bcadfddb2c1179d929e4a2abcc1b1dd758c6 (patch) | |
tree | f22c92a9fd5051a57753b2a8d26d0bf51ba79d10 /platform/default | |
parent | 40693e00a897a9ab2fa7b15fce21041990745b4b (diff) | |
download | qtlocation-mapboxgl-fa78bcadfddb2c1179d929e4a2abcc1b1dd758c6.tar.gz |
[core] add tests for handling requests with different priorities
- ensure that low priority requests are handled last
- add option to set the number of maximum concurrent requests for tests
- some style fixups
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/online_file_source.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/platform/default/online_file_source.cpp b/platform/default/online_file_source.cpp index 47ebbbeb45..6c930b3fec 100644 --- a/platform/default/online_file_source.cpp +++ b/platform/default/online_file_source.cpp @@ -98,7 +98,7 @@ public: assert(activeRequests.find(request) == activeRequests.end()); assert(!request->request); - if (activeRequests.size() >= HTTPFileSource::maximumConcurrentRequests()) { + if (activeRequests.size() >= getMaximumConcurrentRequests()) { queueRequest(request); } else { activateRequest(request); @@ -134,7 +134,9 @@ public: auto request = pendingRequests.pop(); - if (request) activateRequest(*request); + if (request) { + activateRequest(*request); + } } bool isPending(OnlineFileRequest* request) { @@ -154,15 +156,19 @@ public: networkIsReachableAgain(); } - void setMaximumConcurrentRequestsOverride(const uint32_t override) { - maximumConcurrentRequestsOverride = override; + void setMaximumConcurrentRequestsOverride(const uint32_t maximumConcurrentRequestsOverride_) { + maximumConcurrentRequestsOverride = maximumConcurrentRequestsOverride_; } private: - uint32_t getMaximumConcurrentRequests() { - if (maximumConcurrentRequestsOverride > 0) return maximumConcurrentRequestsOverride; - else return HTTPFileSource::maximumConcurrentRequests(); + uint32_t getMaximumConcurrentRequests() const { + if (maximumConcurrentRequestsOverride > 0) { + return maximumConcurrentRequestsOverride; + } + else { + return HTTPFileSource::maximumConcurrentRequests(); + } } void networkIsReachableAgain() { @@ -188,17 +194,13 @@ private: std::list<OnlineFileRequest*> queue; std::list<OnlineFileRequest*>::iterator firstLowPriorityRequest; - void remove(OnlineFileRequest* request) { + void remove(const OnlineFileRequest* request) { auto it = std::find(queue.begin(), queue.end(), request); if (it != queue.end()) { if (it == firstLowPriorityRequest) { firstLowPriorityRequest++; } queue.erase(it); - - if (queue.empty()) { - first_low = queue.begin(); - } } } @@ -232,7 +234,7 @@ private: return optional<OnlineFileRequest*>(next); } - bool contains(OnlineFileRequest* request) { + bool contains(OnlineFileRequest* request) const { return (std::find(queue.begin(), queue.end(), request) != queue.end()); } @@ -258,6 +260,7 @@ private: std::unordered_set<OnlineFileRequest*> activeRequests; bool online = true; + uint32_t maximumConcurrentRequestsOverride = 0; HTTPFileSource httpFileSource; util::AsyncTask reachability { std::bind(&Impl::networkIsReachableAgain, this) }; }; @@ -475,4 +478,8 @@ void OnlineFileSource::setOnlineStatus(const bool status) { impl->setOnlineStatus(status); } +void OnlineFileSource::setMaximumConcurrentRequestsOverride(const uint32_t maximumConcurrentRequestsOverride) { + impl->setMaximumConcurrentRequestsOverride(maximumConcurrentRequestsOverride); +} + } // namespace mbgl |