Added memory pool logging
[platform/core/uifw/dali-core.git] / dali / internal / event / images / pixel-data-impl.h
index cf2b299..746d347 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_INTERNAL_PIXEL_DATA_H__
-#define __DALI_INTERNAL_PIXEL_DATA_H__
+#ifndef DALI_INTERNAL_PIXEL_DATA_H
+#define DALI_INTERNAL_PIXEL_DATA_H
 
 /*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 
 // INTERNAL INCLUDES
-#include <dali/devel-api/images/pixel-data.h>
+#include <dali/devel-api/images/pixel-data-devel.h>
+#include <dali/integration-api/debug.h>
+#include <dali/public-api/images/pixel-data.h>
 #include <dali/public-api/object/base-object.h>
 
 namespace Dali
 {
-
 namespace Internal
 {
-
 class PixelData;
-typedef IntrusivePtr<PixelData> PixelDataPtr;
+using PixelDataPtr = IntrusivePtr<PixelData>;
 
 class PixelData : public BaseObject
 {
 public:
-
   /**
    * @brief Create a PixelData object.
    *
    * @param [in] buffer           The raw pixel data.
+   * @param [in] bufferSize       The size of the buffer in bytes
    * @param [in] width            Buffer width in pixels
    * @param [in] height           Buffer height in pixels
+   * @param [in] stride           Buffer stride in pixels, 0 means the buffer is tightly packed
    * @param [in] pixelFormat      The pixel format
    * @param [in] releaseFunction  The function used to release the memory.
    */
-  static PixelDataPtr New( unsigned char* buffer,
-                           unsigned int width,
-                           unsigned int height,
-                           Pixel::Format pixelFormat,
-                           Dali::PixelData::ReleaseFunction releaseFunction);
+  static PixelDataPtr New(uint8_t*                         buffer,
+                          uint32_t                         bufferSize,
+                          uint32_t                         width,
+                          uint32_t                         height,
+                          uint32_t                         stride,
+                          Pixel::Format                    pixelFormat,
+                          Dali::PixelData::ReleaseFunction releaseFunction);
 
   /**
    * @brief Constructor.
    *
    * @param [in] buffer           The raw pixel data.
+   * @param [in] bufferSize       The size of the buffer in bytes
    * @param [in] width            Buffer width in pixels
    * @param [in] height           Buffer height in pixels
+   * @param [in] stride           Buffer stride in pixels, 0 means the buffer is tightly packed
    * @param [in] pixelFormat      The pixel format
    * @param [in] releaseFunction  The function used to release the memory.
    */
-  PixelData( unsigned char* buffer,
-             unsigned int width,
-             unsigned int height,
-             Pixel::Format pixelFormat,
-             Dali::PixelData::ReleaseFunction releaseFunction );
+  PixelData(uint8_t*                         buffer,
+            uint32_t                         bufferSize,
+            uint32_t                         width,
+            uint32_t                         height,
+            uint32_t                         stride,
+            Pixel::Format                    pixelFormat,
+            Dali::PixelData::ReleaseFunction releaseFunction);
 
 protected:
-
   /**
    * @brief Destructor.
    *
    * Release the pixel buffer if exists.
    */
-  ~PixelData();
+  ~PixelData() override;
 
 public:
-
   /**
    * Get the width of the buffer in pixels.
    * @return The width of the buffer in pixels
    */
-  unsigned int GetWidth() const;
+  uint32_t GetWidth() const;
 
   /**
    * Get the height of the buffer in pixels
    * @return The height of the buffer in pixels
    */
-  unsigned int GetHeight() const;
+  uint32_t GetHeight() const;
 
   /**
    * Get the pixel format
@@ -98,10 +103,38 @@ public:
    * Get the pixel buffer if it's present.
    * @return The buffer if exists, or NULL if there is no pixel buffer.
    */
-  unsigned char* GetBuffer() const;
+  uint8_t* GetBuffer() const;
 
-private:
+  /**
+   * Get the size of the buffer in bytes
+   * @return The size of the buffer
+   */
+  uint32_t GetBufferSize() const;
 
+  /**
+   * Return the buffer pointer and reset the internal buffer to zero.
+   * @return The buffer pointer and associated data.
+   */
+  DevelPixelData::PixelDataBuffer ReleaseBuffer();
+
+  /**
+   * @copydoc PixelData::GetStride()
+   */
+  uint32_t GetStride() const;
+
+  /**
+   * Class method to get the total currently allocated size of pixel buffers
+   */
+  static uint32_t GetTotalAllocatedSize()
+  {
+#if defined(DEBUG_ENABLED)
+    return gPixelDataAllocationTotal;
+#else
+    return 0;
+#endif
+  }
+
+private:
   /*
    * Undefined copy constructor.
    */
@@ -110,15 +143,20 @@ private:
   /*
    * Undefined assignment operator.
    */
-  PixelData& operator = (const PixelData& other);
+  PixelData& operator=(const PixelData& other);
 
 private:
-
-  unsigned char* mBuffer;           ///< The raw pixel data.
-  unsigned int   mWidth;            ///< Buffer width in pixels.
-  unsigned int   mHeight;           ///< Buffer height in pixels.
-  Pixel::Format  mPixelFormat;      ///< Pixel format
-  Dali::PixelData::ReleaseFunction mReleaseFunction;  ///< Function for releasing memory
+  uint8_t*                         mBuffer;          ///< The raw pixel data
+  uint32_t                         mBufferSize;      ///< Buffer size in bytes
+  uint32_t                         mWidth;           ///< Buffer width in pixels
+  uint32_t                         mHeight;          ///< Buffer height in pixels
+  uint32_t                         mStride;          ///< Buffer stride in pixels, 0 means the buffer is tightly packed
+  Pixel::Format                    mPixelFormat;     ///< Pixel format
+  Dali::PixelData::ReleaseFunction mReleaseFunction; ///< Function for releasing memory
+
+#if defined(DEBUG_ENABLED)
+  static uint32_t gPixelDataAllocationTotal;
+#endif
 };
 
 } // namespace Internal
@@ -126,22 +164,22 @@ private:
 /**
  * Helper methods for public API
  */
-inline Internal::PixelData& GetImplementation( Dali::PixelData& handle )
+inline Internal::PixelData& GetImplementation(Dali::PixelData& handle)
 {
-  DALI_ASSERT_ALWAYS( handle && "handle is empty" );
+  DALI_ASSERT_ALWAYS(handle && "handle is empty");
 
   BaseObject& object = handle.GetBaseObject();
 
-  return static_cast<Internal::PixelData&>( object );
+  return static_cast<Internal::PixelData&>(object);
 }
 
-inline const Internal::PixelData& GetImplementation( const Dali::PixelData& handle )
+inline const Internal::PixelData& GetImplementation(const Dali::PixelData& handle)
 {
-  DALI_ASSERT_ALWAYS( handle && "handle is empty" );
+  DALI_ASSERT_ALWAYS(handle && "handle is empty");
 
   const BaseObject& object = handle.GetBaseObject();
 
-  return static_cast<const Internal::PixelData&>( object );
+  return static_cast<const Internal::PixelData&>(object);
 }
 
 } // namespace Dali