lottieplayer: simple optmization for deffered update. 51/186751/2
authorHermet Park <hermetpark@gmail.com>
Tue, 14 Aug 2018 05:57:36 +0000 (14:57 +0900)
committerSubhransu Mohanty <sub.mohanty@samsung.com>
Tue, 14 Aug 2018 09:22:44 +0000 (09:22 +0000)
This skips unnecessary update process from every user render-request.

Change-Id: Id3123bdb31879e1c559b6048ccf60d88dccb690f

src/lottie/lottieplayer.cpp

index f5fdcee..1b23fd8 100644 (file)
@@ -30,12 +30,16 @@ public:
     std::atomic<bool>            mRenderInProgress;
 
 private:
-    float mPos;
+    float mPos = 0.0;
+    bool mChanged = true;
 };
 
 void LOTPlayerPrivate::setSize(const VSize &sz)
 {
-    mSize = sz;
+    if (mSize != sz) {
+        mChanged = true;
+        mSize = sz;
+    }
 }
 
 VSize LOTPlayerPrivate::size() const
@@ -68,6 +72,8 @@ bool LOTPlayerPrivate::setPos(float pos)
     if (pos > 1.0) pos = 1.0;
     if (pos < 0) pos = 0;
 
+    if (!vCompare(pos, mPos)) mChanged = true;
+
     mPos = pos;
 
     return true;
@@ -80,6 +86,9 @@ float LOTPlayerPrivate::pos()
 
 bool LOTPlayerPrivate::update(float pos)
 {
+   //Nothing updated, skip it.
+   if (!mChanged) return true;
+
    mCompItem->resize(mSize);
    this->setPos(pos);
 
@@ -89,6 +98,8 @@ bool LOTPlayerPrivate::update(float pos)
 
    if (!mCompItem->update(frameNumber)) return false;
 
+   mChanged = false;
+
    return true;
 }
 
@@ -116,7 +127,7 @@ bool LOTPlayerPrivate::render(float pos, const LOTBuffer &buffer)
     return result;
 }
 
-LOTPlayerPrivate::LOTPlayerPrivate() : mRenderInProgress(false), mPos(0) {}
+LOTPlayerPrivate::LOTPlayerPrivate() : mRenderInProgress(false) {}
 
 bool LOTPlayerPrivate::setFilePath(std::string path)
 {