MCPcopy Create free account
hub / github.com/CesiumGS/cesium-native / get

Method get

CesiumAsync/src/CachingAssetAccessor.cpp:163–328  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

161CachingAssetAccessor::~CachingAssetAccessor() noexcept = default;
162
163Future<std::shared_ptr<IAssetRequest>> CachingAssetAccessor::get(
164 const AsyncSystem& asyncSystem,
165 const std::string& url,
166 const std::vector<THeader>& headers) {
167 const int32_t requestSinceLastPrune = ++this->_requestSinceLastPrune;
168 if (requestSinceLastPrune == this->_requestsPerCachePrune) {
169 // More requests may have started and incremented _requestSinceLastPrune
170 // beyond _requestsPerCachePrune before this next line. That's ok.
171 this->_requestSinceLastPrune = 0;
172
173 CESIUM_TRACE_USE_TRACK_SET(this->_pruneSlots);
174 asyncSystem.runInThreadPool(this->_cacheThreadPool, [this]() {
175 this->_pCacheDatabase->prune();
176 });
177 }
178
179 CESIUM_TRACE_BEGIN_IN_TRACK("IAssetAccessor::get (cached)");
180
181 const ThreadPool& threadPool = this->_cacheThreadPool;
182
183 return asyncSystem
184 .runInThreadPool(
185 this->_cacheThreadPool,
186 [asyncSystem,
187 pAssetAccessor = this->_pAssetAccessor,
188 pCacheDatabase = this->_pCacheDatabase,
189 pLogger = this->_pLogger,
190 url = url,
191 headers = headers,
192 threadPool]() mutable -> Future<std::shared_ptr<IAssetRequest>> {
193 std::optional<CacheItem> cacheLookup =
194 pCacheDatabase->getEntry(url);
195 if (!cacheLookup) {
196 // No cache item found, request directly from the server
197 return pAssetAccessor->get(asyncSystem, url, headers)
198 .thenInThreadPool(
199 threadPool,
200 [pCacheDatabase, pLogger](
201 std::shared_ptr<IAssetRequest>&& pCompletedRequest) {
202 const IAssetResponse* pResponse =
203 pCompletedRequest->response();
204 if (!pResponse) {
205 return std::move(pCompletedRequest);
206 }
207
208 const std::optional<ResponseCacheControl> cacheControl =
209 ResponseCacheControl::parseFromResponseHeaders(
210 pResponse->headers());
211
212 if (pResponse && shouldCacheRequest(
213 *pCompletedRequest,
214 cacheControl)) {
215 pCacheDatabase->storeEntry(
216 calculateCacheKey(*pCompletedRequest),
217 calculateExpiryTime(
218 *pCompletedRequest,
219 cacheControl),
220 pCompletedRequest->url(),

Callers

nothing calls this directly

Calls 15

shouldCacheRequestFunction · 0.85
calculateCacheKeyFunction · 0.85
calculateExpiryTimeFunction · 0.85
shouldRevalidateCacheFunction · 0.85
updateCacheItemFunction · 0.85
pruneMethod · 0.45
thenImmediatelyMethod · 0.45
getEntryMethod · 0.45
thenInThreadPoolMethod · 0.45
responseMethod · 0.45
storeEntryMethod · 0.45
statusCodeMethod · 0.45

Tested by

no test coverage detected