From: Hermet Park Date: Mon, 13 Aug 2018 11:39:13 +0000 (+0900) Subject: lottieplayer: apply lazy update. X-Git-Tag: submit/tizen/20180917.042405~118 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2d81a0920d85f4a2be56a963c9292f47a2a035a3;p=platform%2Fcore%2Fuifw%2Flottie-player.git lottieplayer: apply lazy update. update size when it ready to go. Change-Id: Ic1f27bc3f365526313059d7c9026478c41b557c8 --- diff --git a/src/lottie/lottieplayer.cpp b/src/lottie/lottieplayer.cpp index 92566e5..f5fdcee 100644 --- a/src/lottie/lottieplayer.cpp +++ b/src/lottie/lottieplayer.cpp @@ -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 &LOTPlayerPrivate::renderList(float pos) { - if (!mCompItem) { + if (!mCompItem || !this->update(pos)) { static std::vector 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) {