Merge "Added memory pool logging" into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / update / nodes / node.cpp
index 5ae5e1c..87b4603 100644 (file)
@@ -27,8 +27,8 @@
 
 namespace
 {
-//Memory pool used to allocate new nodes. Memory used by this pool will be released when process dies
-// or DALI library is unloaded
+// Memory pool used to allocate new nodes. Memory used by this pool will be released when process dies
+//  or DALI library is unloaded
 Dali::Internal::MemoryPoolObjectAllocator<Dali::Internal::SceneGraph::Node> gNodeMemoryPool;
 #ifdef DEBUG_ENABLED
 // keep track of nodes alive, to ensure we have 0 when the process exits or DALi library is unloaded
@@ -59,8 +59,8 @@ Node* Node::New()
 
 void Node::Delete(Node* node)
 {
-  // check we have a node not a layer
-  if(!node->mIsLayer)
+  // check we have a node not a derived node
+  if(!node->mIsLayer && !node->mIsCamera)
   {
     // Manually call the destructor
     node->~Node();
@@ -76,16 +76,16 @@ void Node::Delete(Node* node)
 }
 
 Node::Node()
-: mOrientation(), // Initialized to identity by default
-  mVisible(true),
-  mCulled(false),
-  mColor(Color::WHITE),
-  mUpdateSizeHint(Vector3::ZERO),
+: mOrientation(),                                                               // Initialized to identity by default
   mWorldPosition(TRANSFORM_PROPERTY_WORLD_POSITION, Vector3(0.0f, 0.0f, 0.0f)), // Zero initialized by default
   mWorldScale(TRANSFORM_PROPERTY_WORLD_SCALE, Vector3(1.0f, 1.0f, 1.0f)),
   mWorldOrientation(), // Initialized to identity by default
   mWorldMatrix(),
+  mVisible(true),
+  mCulled(false),
+  mColor(Color::WHITE),
   mWorldColor(Color::WHITE),
+  mUpdateAreaHint(Vector4::ZERO),
   mClippingSortModifier(0u),
   mId(++mNodeCounter),
   mParent(nullptr),
@@ -100,6 +100,7 @@ Node::Node()
   mClippingMode(ClippingMode::DISABLED),
   mIsRoot(false),
   mIsLayer(false),
+  mIsCamera(false),
   mPositionUsesAnchorPoint(true),
   mTransparent(false)
 {
@@ -133,28 +134,14 @@ uint32_t Node::GetId() const
 
 void Node::CreateTransform(SceneGraph::TransformManager* transformManager)
 {
-  //Create a new transform
+  // Create a new transform
   mTransformManagerData.mManager = transformManager;
   TransformId createdTransformId = transformManager->CreateTransform();
 
-  //Initialize all the animatable properties
-  mPosition.Initialize(&mTransformManagerData);
-  mScale.Initialize(&mTransformManagerData);
-  mOrientation.Initialize(&mTransformManagerData);
-  mSize.Initialize(&mTransformManagerData);
-  mParentOrigin.Initialize(&mTransformManagerData);
-  mAnchorPoint.Initialize(&mTransformManagerData);
-
-  //Initialize all the input properties
-  mWorldPosition.Initialize(&mTransformManagerData);
-  mWorldScale.Initialize(&mTransformManagerData);
-  mWorldOrientation.Initialize(&mTransformManagerData);
-  mWorldMatrix.Initialize(&mTransformManagerData);
-
-  //Set whether the position should use the anchor point
+  // Set whether the position should use the anchor point
   transformManager->SetPositionUsesAnchorPoint(createdTransformId, mPositionUsesAnchorPoint);
 
-  //Set TransformId after initialize done.
+  // Set TransformId after initialize done.
   mTransformManagerData.mId = createdTransformId;
 }
 
@@ -269,6 +256,12 @@ NodePropertyFlags Node::GetDirtyFlags() const
     flags |= NodePropertyFlags::COLOR;
   }
 
+  // Check whether the update area property has changed
+  if(!mUpdateAreaHint.IsClean())
+  {
+    flags |= NodePropertyFlags::TRANSFORM;
+  }
+
   return flags;
 }
 
@@ -287,6 +280,20 @@ void Node::ResetDirtyFlags(BufferIndex updateBufferIndex)
   mDirtyFlags = NodePropertyFlags::NOTHING;
 }
 
+void Node::UpdateUniformHash(BufferIndex bufferIndex)
+{
+  uint64_t hash = 0xc70f6907UL;
+  for(uint32_t i = 0u, count = mUniformMaps.Count(); i < count; ++i)
+  {
+    hash = mUniformMaps[i].propertyPtr->Hash(bufferIndex, hash);
+  }
+  if(mUniformsHash != hash)
+  {
+    mUniformsHash = hash;
+    SetUpdated(true);
+  }
+}
+
 void Node::SetParent(Node& parentNode)
 {
   DALI_ASSERT_ALWAYS(this != &parentNode);
@@ -327,6 +334,11 @@ void Node::RecursiveDisconnectFromSceneGraph(BufferIndex updateBufferIndex)
   }
 }
 
+uint32_t Node::GetMemoryPoolCapacity()
+{
+  return gNodeMemoryPool.GetCapacity();
+}
+
 } // namespace SceneGraph
 
 } // namespace Internal