From c6790a80438ec66fbffc8bb549c7c757787f80cc Mon Sep 17 00:00:00 2001 From: subhransu mohanty Date: Thu, 1 Aug 2019 14:55:09 +0900 Subject: [PATCH] optimization: read content of the file directly to std::string to avoid creating temporary memory. As json format is one big string we can directly read the content of file with one call to getline() without going through generic interface to first read into stringstream and then create again a temorary string from the stringstream buffer. --- src/lottie/lottieloader.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/lottie/lottieloader.cpp b/src/lottie/lottieloader.cpp index 5fc7c8f895..82e21e315f 100644 --- a/src/lottie/lottieloader.cpp +++ b/src/lottie/lottieloader.cpp @@ -119,10 +119,15 @@ bool LottieLoader::load(const std::string &path, bool cachePolicy) vCritical << "failed to open file = " << path.c_str(); return false; } else { - std::stringstream buf; - buf << f.rdbuf(); + std::string content; - LottieParser parser(const_cast(buf.str().data()), + std::getline(f, content, '\0') ; + f.close(); + + if (content.empty()) return false; + + const char *str = content.c_str(); + LottieParser parser(const_cast(str), dirname(path).c_str()); mModel = parser.model(); @@ -130,8 +135,6 @@ bool LottieLoader::load(const std::string &path, bool cachePolicy) if (cachePolicy) LottieModelCache::instance().add(path, mModel); - - f.close(); } return true;