Fix minor coverity issues
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / particle-system / particle-emitter-impl.cpp
index e55a0e2..150d857 100644 (file)
@@ -32,7 +32,6 @@
 
 namespace Dali::Toolkit::ParticleSystem::Internal
 {
-
 constexpr uint32_t DEFAULT_PARTICLE_COUNT = 100u; ///< Default number of particles in system if not set by user
 
 /**
@@ -52,9 +51,10 @@ public:
   ~FrameCallback() = default;
 
 private:
-  void Update(Dali::UpdateProxy& updateProxy, float elapsedSeconds) override
+  bool Update(Dali::UpdateProxy& updateProxy, float elapsedSeconds) override
   {
     mEmitter->Update();
+    return true;
   }
 
   Internal::ParticleEmitter* mEmitter;
@@ -89,13 +89,21 @@ void ParticleEmitter::SetRenderer(const ParticleSystem::ParticleRenderer& render
 
 void ParticleEmitter::SetParticleCount(uint32_t maxParticleCount)
 {
-  // Default particle list has no data streams, it will replace old list
-  mParticleList = ParticleSystem::ParticleList::New(maxParticleCount,
-                                                    ParticleStream::POSITION_STREAM_BIT |
-                                                      ParticleStream::COLOR_STREAM_BIT |
-                                                      ParticleStream::VELOCITY_STREAM_BIT |
-                                                      ParticleStream::SCALE_STREAM_BIT |
-                                                      ParticleStream::LIFETIME_STREAM_BIT);
+  if(!mParticleList || maxParticleCount != GetImplementation(mParticleList).GetParticleCount())
+  {
+    // Default particle list has no data streams, it will replace old list
+    mParticleList = ParticleSystem::ParticleList::New(maxParticleCount,
+                                                      ParticleStream::POSITION_STREAM_BIT |
+                                                        ParticleStream::COLOR_STREAM_BIT |
+                                                        ParticleStream::VELOCITY_STREAM_BIT |
+                                                        ParticleStream::SCALE_STREAM_BIT |
+                                                        ParticleStream::LIFETIME_STREAM_BIT);
+  }
+}
+
+uint32_t ParticleEmitter::GetParticleCount()
+{
+  return GetImplementation(mParticleList).GetParticleCount();
 }
 
 ParticleSystem::ParticleList& ParticleEmitter::GetParticleList()
@@ -126,7 +134,7 @@ ParticleSystem::ParticleModifier ParticleEmitter::GetModifierAt(uint32_t index)
 
 void ParticleEmitter::RemoveModifierAt(uint32_t index)
 {
-  mModifiers.erase(mModifiers.begin()+index);
+  mModifiers.erase(mModifiers.begin() + index);
 }
 
 void ParticleEmitter::Start()
@@ -340,10 +348,7 @@ void ParticleEmitter::UpdateModifierMT(Dali::Toolkit::ParticleSystem::ParticleMo
     }
 
     updateTasks.emplace_back(GetImplementation(modifier), mParticleList, index, count);
-    tasks.emplace_back([&task = updateTasks.back()](uint32_t n)
-                       {
-      //printf("Updating modifier: %d\n", n);
-      task.Update(); });
+    tasks.emplace_back([&task = updateTasks.back()](uint32_t n) { task.Update(); });
   }
 
   auto future = threadPool.SubmitTasks(tasks, 0);
@@ -424,6 +429,14 @@ ParticleEmitter::ParticleEmitter()
   SetParticleCount(DEFAULT_PARTICLE_COUNT);
 }
 
+ParticleEmitter::~ParticleEmitter()
+{
+  if(mParticleRenderer)
+  {
+    GetImplementation(mParticleRenderer).PrepareToDie();
+  }
+}
+
 } // namespace Dali::Toolkit::ParticleSystem::Internal
 namespace Dali::Toolkit::ParticleSystem
 {
@@ -436,8 +449,7 @@ Dali::ThreadPool& GetThreadPool()
   // NOTE: this function shouldn't be called from multiple thread anyway
   if(!gThreadPool)
   {
-    std::call_once(onceFlag, [&threadPool = gThreadPool]
-                   { threadPool = std::make_unique<Dali::ThreadPool>();
+    std::call_once(onceFlag, [&threadPool = gThreadPool] { threadPool = std::make_unique<Dali::ThreadPool>();
                      threadPool->Initialize(4u); });
   }