optimization: read content of the file directly to std::string to avoid creating...
authorsubhransu mohanty <sub.mohanty@samsung.com>
Thu, 1 Aug 2019 05:55:09 +0000 (14:55 +0900)
committerHermet Park <hermetpark@gmail.com>
Mon, 12 Aug 2019 08:30:43 +0000 (17:30 +0900)
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

index 5fc7c8f..82e21e3 100644 (file)
@@ -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<char *>(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<char *>(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;