Make trace/debug filter as unique_ptr 23/298923/1
authorEunki, Hong <eunkiki.hong@samsung.com>
Fri, 15 Sep 2023 08:17:41 +0000 (17:17 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Fri, 15 Sep 2023 08:29:08 +0000 (17:29 +0900)
Since we don't deallocate global static filters default,
memory leak tooks (like valgrind) detact they are memory leak.

To avoid this tiny error message, just make them unique_ptr
and allow automatically released after app terminated

Change-Id: If8f9cf8cafb86ef66c41877ab254177d0a4fbb10
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali/utc-Dali-Actor.cpp
dali/integration-api/debug.cpp
dali/integration-api/debug.h
dali/integration-api/trace.cpp

index 23d6a85..e507fbd 100644 (file)
@@ -5564,6 +5564,7 @@ int UtcDaliActorRaiseLower(void)
   TestApplication application;
 
   Debug::Filter::SetGlobalLogLevel(Debug::Verbose);
+  Debug::Filter::EnableGlobalTrace();
 
   Integration::Scene stage(application.GetScene());
 
@@ -5685,6 +5686,7 @@ int UtcDaliActorRaiseLower(void)
 
   ResetTouchCallbacks();
 
+  Debug::Filter::DisableGlobalTrace();
   Debug::Filter::SetGlobalLogLevel(Debug::NoLogging);
 
   END_TEST;
index 858b4d8..dab8585 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
@@ -21,6 +21,7 @@
 // EXTERNAL INCLUDES
 #include <chrono>
 #include <cstdarg>
+#include <memory>
 
 namespace Dali
 {
@@ -84,11 +85,17 @@ Filter* Filter::gElement    = nullptr;
 Filter* Filter::gActor      = Filter::New(Debug::Concise, false, "LOG_ACTOR");
 Filter* Filter::gShader     = Filter::New(Debug::Concise, false, "LOG_SHADER");
 
-Filter::FilterList* Filter::GetActiveFilters()
+typedef std::list<std::unique_ptr<Filter>>           FilterList;
+typedef std::list<std::unique_ptr<Filter>>::iterator FilterIter;
+
+namespace
+{
+static FilterList& GetActiveFilters()
 {
-  static Filter::FilterList* activeFilters = new FilterList;
+  static FilterList activeFilters;
   return activeFilters;
 }
+} // namespace
 
 Filter* Filter::New(LogLevel level, bool trace, const char* environmentVariableName)
 {
@@ -118,7 +125,7 @@ Filter* Filter::New(LogLevel level, bool trace, const char* environmentVariableN
 
   Filter* filter = new Filter(level, trace);
   filter->mNesting++;
-  GetActiveFilters()->push_back(filter);
+  GetActiveFilters().push_back(std::unique_ptr<Filter>(filter));
   return filter;
 }
 
@@ -127,7 +134,7 @@ Filter* Filter::New(LogLevel level, bool trace, const char* environmentVariableN
  */
 void Filter::EnableGlobalTrace()
 {
-  for(FilterIter iter = GetActiveFilters()->begin(); iter != GetActiveFilters()->end(); iter++)
+  for(FilterIter iter = GetActiveFilters().begin(); iter != GetActiveFilters().end(); iter++)
   {
     (*iter)->EnableTrace();
   }
@@ -138,7 +145,7 @@ void Filter::EnableGlobalTrace()
  */
 void Filter::DisableGlobalTrace()
 {
-  for(FilterIter iter = GetActiveFilters()->begin(); iter != GetActiveFilters()->end(); iter++)
+  for(FilterIter iter = GetActiveFilters().begin(); iter != GetActiveFilters().end(); iter++)
   {
     (*iter)->DisableTrace();
   }
@@ -146,7 +153,7 @@ void Filter::DisableGlobalTrace()
 
 void Filter::SetGlobalLogLevel(LogLevel level)
 {
-  for(FilterIter iter = GetActiveFilters()->begin(); iter != GetActiveFilters()->end(); iter++)
+  for(FilterIter iter = GetActiveFilters().begin(); iter != GetActiveFilters().end(); iter++)
   {
     (*iter)->SetLogLevel(level);
   }
index 8533270..1a19291 100644 (file)
@@ -2,7 +2,7 @@
 #define DALI_INTEGRATION_DEBUG_H
 
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
@@ -217,10 +217,6 @@ enum LogLevel
 class DALI_CORE_API Filter
 {
 public:
-  using FilterList = std::list<Filter*>;
-  using FilterIter = std::list<Filter*>::iterator;
-
-public:
   /**
    * Test if the filter is enabled for the given logging level
    * @param[in] level - the level to test.
@@ -325,8 +321,6 @@ private:
   {
   }
 
-  static FilterList* GetActiveFilters();
-
 public:
   // High level filters. If these filters are too broad for your current requirement, then
   // you can add a filter to your own class or source file. If you do, use Filter::New()
index 5786f3a..b7af278 100644 (file)
@@ -21,6 +21,7 @@
 // EXTERNAL INCLUDES
 #include <cstdarg>
 #include <list>
+#include <memory>
 
 namespace Dali
 {
@@ -46,14 +47,14 @@ void LogContext(bool start, const char* tag, const char* message)
 
 #ifdef TRACE_ENABLED
 
-typedef std::list<Filter*>           FilterList;
-typedef std::list<Filter*>::iterator FilterIter;
+typedef std::list<std::unique_ptr<Filter>>           FilterList;
+typedef std::list<std::unique_ptr<Filter>>::iterator FilterIter;
 
 namespace
 {
-static FilterList* GetActiveFilters()
+static FilterList& GetActiveFilters()
 {
-  static FilterList* activeFilters = new FilterList;
+  static FilterList activeFilters;
   return activeFilters;
 }
 } // namespace
@@ -78,7 +79,8 @@ Filter* Filter::New(bool trace, const char* environmentVariableName)
   }
 
   Filter* filter = new Filter(trace);
-  GetActiveFilters()->push_back(filter);
+
+  GetActiveFilters().push_back(std::unique_ptr<Filter>(filter));
   return filter;
 }
 
@@ -87,7 +89,7 @@ Filter* Filter::New(bool trace, const char* environmentVariableName)
  */
 void Filter::EnableGlobalTrace()
 {
-  for(FilterIter iter = GetActiveFilters()->begin(); iter != GetActiveFilters()->end(); iter++)
+  for(FilterIter iter = GetActiveFilters().begin(); iter != GetActiveFilters().end(); iter++)
   {
     (*iter)->EnableTrace();
   }
@@ -98,7 +100,7 @@ void Filter::EnableGlobalTrace()
  */
 void Filter::DisableGlobalTrace()
 {
-  for(FilterIter iter = GetActiveFilters()->begin(); iter != GetActiveFilters()->end(); iter++)
+  for(FilterIter iter = GetActiveFilters().begin(); iter != GetActiveFilters().end(); iter++)
   {
     (*iter)->DisableTrace();
   }