lottieplayer: apply lazy update. 92/186692/5
authorHermet Park <hermetpark@gmail.com>
Mon, 13 Aug 2018 11:39:13 +0000 (20:39 +0900)
committerSubhransu Mohanty <sub.mohanty@samsung.com>
Tue, 14 Aug 2018 09:19:21 +0000 (09:19 +0000)
update size when it ready to go.

Change-Id: Ic1f27bc3f365526313059d7c9026478c41b557c8

src/lottie/lottieplayer.cpp

index 92566e5b4619a8508b8ffcbad3771c7d179fa5ac..f5fdcee5acfaa24854594864df1002ac3ad8cb21 100644 (file)
@@ -10,6 +10,7 @@ class LOTPlayerPrivate {
 
 private:
     bool                          setPos(float pos);
+    bool                          update(float pos);
 
 public:
     LOTPlayerPrivate();
@@ -35,11 +36,6 @@ private:
 void LOTPlayerPrivate::setSize(const VSize &sz)
 {
     mSize = sz;
-    if (!mCompItem) {
-        return;
-    }
-
-    mCompItem->resize(sz);
 }
 
 VSize LOTPlayerPrivate::size() const
@@ -53,11 +49,11 @@ VSize LOTPlayerPrivate::size() const
 
 const std::vector<LOTNode *> &LOTPlayerPrivate::renderList(float pos)
 {
-    if (!mCompItem) {
+    if (!mCompItem || !this->update(pos)) {
         static std::vector<LOTNode *> empty;
         return empty;
     }
-    this->setPos(pos);
+
     return mCompItem->renderList();
 }
 
@@ -69,19 +65,12 @@ float LOTPlayerPrivate::playTime() const
 
 bool LOTPlayerPrivate::setPos(float pos)
 {
-    if (!mModel || !mCompItem) {
-         vWarning << "Invalid data, mModel(?), mCompItem(?)";
-         return false;
-    }
-
     if (pos > 1.0) pos = 1.0;
     if (pos < 0) pos = 0;
-    if (mModel->isStatic()) pos = 0;
 
-    if (vCompare(pos, mPos)) return true;
+    mPos = pos;
 
-    int frameNumber = mModel->startFrame() + pos * mModel->frameDuration();
-    return mCompItem->update(frameNumber);
+    return true;
 }
 
 float LOTPlayerPrivate::pos()
@@ -89,6 +78,20 @@ float LOTPlayerPrivate::pos()
     return mPos;
 }
 
+bool LOTPlayerPrivate::update(float pos)
+{
+   mCompItem->resize(mSize);
+   this->setPos(pos);
+
+   int frameNumber;
+   if (mModel->isStatic()) frameNumber = 0;
+   else frameNumber = mModel->startFrame() + this->pos() * mModel->frameDuration();
+
+   if (!mCompItem->update(frameNumber)) return false;
+
+   return true;
+}
+
 bool LOTPlayerPrivate::render(float pos, const LOTBuffer &buffer)
 {
     if (!mCompItem) return false;
@@ -97,22 +100,23 @@ bool LOTPlayerPrivate::render(float pos, const LOTBuffer &buffer)
     if (renderInProgress)
         vCritical << "Already Rendering Scheduled for this Player";
 
-    mRenderInProgress.store(true);
+    bool result = false;
 
-    bool result;
-    if (setPos(pos)) {
-        if (mCompItem->render(buffer))
-            result = true;
-        else
-            result = false;
-    } else {
-        result = false;
+    if (this->update(pos)) {
+
+         mRenderInProgress.store(true);
+
+         if (mCompItem->render(buffer)) {
+              result = true;
+         }
+
+         mRenderInProgress.store(false);
     }
-    mRenderInProgress.store(false);
+
     return result;
 }
 
-LOTPlayerPrivate::LOTPlayerPrivate() : mRenderInProgress(false), mPos(-1) {}
+LOTPlayerPrivate::LOTPlayerPrivate() : mRenderInProgress(false), mPos(0) {}
 
 bool LOTPlayerPrivate::setFilePath(std::string path)
 {