lottie/vector: add clone method to copy data without increasing ref count 52/185752/2
authorYoungbok Shin <youngb.shin@samsung.com>
Thu, 2 Aug 2018 04:43:59 +0000 (13:43 +0900)
committerYoungbok Shin <youngb.shin@samsung.com>
Thu, 2 Aug 2018 04:55:36 +0000 (13:55 +0900)
It helps to improve performance by avoiding copy job from writing COW data.

Change-Id: I72d1c7106fc4fe53fa6db05e7ed8c74f1b70fe95

src/lottie/lottieitem.cpp
src/vector/vpath.h

index 5533379..c3ff6a7 100644 (file)
@@ -692,7 +692,7 @@ void LOTPathDataItem::update(int frameNo, const VMatrix &parentMatrix,
     // 3. compute the final path with parentMatrix
 
     if ((flag & DirtyFlagBit::Matrix) || mPathChanged) {
-        mFinalPath = tempPath;
+        mFinalPath.clone(tempPath);
         mFinalPath.transform(parentMatrix);
         mPathChanged = true;
     }
index 2d1858d..3292675 100644 (file)
@@ -45,6 +45,7 @@ public:
     float length() const;
     const std::vector<VPath::Element> &elements() const;
     const std::vector<VPointF> &       points() const;
+    void  clone(const VPath &srcPath);
 
 private:
     struct VPathData {
@@ -210,6 +211,11 @@ inline const std::vector<VPointF> &VPath::points() const
     return d->points();
 }
 
+inline void VPath::clone(const VPath &srcPath)
+{
+   d.write() = srcPath.d.read();
+}
+
 V_END_NAMESPACE
 
 #endif  // VPATH_H