From: subhransu mohanty Date: Tue, 23 Jul 2019 01:46:57 +0000 (+0900) Subject: lottie/cache: make lottie model cache thread safe X-Git-Tag: submit/tizen/20190812.090759~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e35601f958cdebe910883f4c3ba4207396bcbc17;p=platform%2Fcore%2Fuifw%2Flottie-player.git lottie/cache: make lottie model cache thread safe --- diff --git a/src/lottie/lottieloader.cpp b/src/lottie/lottieloader.cpp index 158486a..fffd349 100644 --- a/src/lottie/lottieloader.cpp +++ b/src/lottie/lottieloader.cpp @@ -21,45 +21,48 @@ #include #include -#include -using namespace std; #ifdef LOTTIE_CACHE_SUPPORT -class LottieFileCache { +#include +#include + +class LottieModelCache { public: - static LottieFileCache &instance() + static LottieModelCache &instance() { - static LottieFileCache CACHE; + static LottieModelCache CACHE; return CACHE; } std::shared_ptr find(const std::string &key) { + std::lock_guard guard(mMutex); + auto search = mHash.find(key); - if (search != mHash.end()) { - return search->second; - } else { - return nullptr; - } + + return (search != mHash.end()) ? search->second : nullptr; + } void add(const std::string &key, std::shared_ptr value) { + std::lock_guard guard(mMutex); mHash[key] = std::move(value); } private: - LottieFileCache() = default; + LottieModelCache() = default; - std::unordered_map> mHash; + std::unordered_map> mHash; + std::mutex mMutex; }; #else -class LottieFileCache { +class LottieModelCache { public: - static LottieFileCache &instance() + static LottieModelCache &instance() { - static LottieFileCache CACHE; + static LottieModelCache CACHE; return CACHE; } std::shared_ptr find(const std::string &) { return nullptr; } @@ -80,7 +83,7 @@ static std::string dirname(const std::string &path) bool LottieLoader::load(const std::string &path) { - mModel = LottieFileCache::instance().find(path); + mModel = LottieModelCache::instance().find(path); if (mModel) return true; std::ifstream f; @@ -99,7 +102,7 @@ bool LottieLoader::load(const std::string &path) if (!mModel) return false; - LottieFileCache::instance().add(path, mModel); + LottieModelCache::instance().add(path, mModel); f.close(); } @@ -110,7 +113,7 @@ bool LottieLoader::load(const std::string &path) bool LottieLoader::loadFromData(std::string &&jsonData, const std::string &key, const std::string &resourcePath) { - mModel = LottieFileCache::instance().find(key); + mModel = LottieModelCache::instance().find(key); if (mModel) return true; LottieParser parser(const_cast(jsonData.c_str()), @@ -119,7 +122,7 @@ bool LottieLoader::loadFromData(std::string &&jsonData, const std::string &key, if (!mModel) return false; - LottieFileCache::instance().add(key, mModel); + LottieModelCache::instance().add(key, mModel); return true; }