| 404 | } |
| 405 | |
| 406 | void Executor::RuntimeManager::updateCache() { |
| 407 | if (nullptr == mInside->mCache) { |
| 408 | return; |
| 409 | } |
| 410 | std::lock_guard<std::mutex> _l(mLock); |
| 411 | |
| 412 | // Backend_Auto and no Async work, then don't need updateCache |
| 413 | if(mInside->mContent->modes.backendMode == Interpreter::Session_Backend_Auto && !(mInside->mInfo->hasAsyncWork())) { |
| 414 | return; |
| 415 | } |
| 416 | |
| 417 | // Set mCancelled for quickly ending |
| 418 | mInside->mInfo->mCancelled = true; |
| 419 | mInside->mInfo->waitAsyncWork(); |
| 420 | auto buffer = getCache(mInside->mInfo); |
| 421 | |
| 422 | //When current cacheSize bigger than previous, update |
| 423 | if (buffer.first != nullptr && buffer.second > mInside->mCache->lastCacheSize) { |
| 424 | MNN_PRINT("Update cache to %s, size = %zu\n", mInside->mCache->cacheFile.c_str(), buffer.second); |
| 425 | writeCacheFile(mInside->mCache, buffer); |
| 426 | mInside->mCache->lastCacheSize = buffer.second; |
| 427 | // Reset cache |
| 428 | loadCache(mInside->mInfo, buffer.first, buffer.second); |
| 429 | } |
| 430 | } |
| 431 | |
| 432 | std::vector<bool> Executor::RuntimeManager::isBackendSupport(const std::vector<MNNForwardType> types) { |
| 433 | std::vector<bool> res; |