// EXTERNAL INCLUDES
#include <string>
+#include <sstream>
#include <list>
+#include <stdint.h>
+#include <dali/public-api/common/vector-wrapper.h>
+#include <dali/public-api/object/property-map.h>
// INTERNAL INCLUDES
#include <dali/public-api/common/dali-common.h>
class Matrix;
class Quaternion;
+#if defined(DEBUG_ENABLED)
+
+// Less opaque types for debugger
+typedef std::vector<Dali::Property::Value> DebugPropertyValueArray;
+typedef std::pair< Property::Index, Property::Value > DebugIndexValuePair;
+typedef std::vector<Dali::StringValuePair> DebugStringValueContainer;
+typedef std::vector< DebugIndexValuePair > DebugIndexValueContainer;
+
+struct DebugPropertyValueMap
+{
+ DebugStringValueContainer stringValues;
+ DebugIndexValueContainer intValues;
+};
+
+// Fake globals for gdb typedefs
+extern Dali::DebugPropertyValueArray gValueArray;
+extern Dali::DebugPropertyValueMap gValueMap;
+
+#endif
+
namespace Integration
{
namespace Log
{
-// environment variable for enabling/disabling fps tracking
-#define DALI_ENV_FPS_TRACKING "DALI_FPS_TRACKING"
-
-// environment variable for enabling/disabling fps tracking
-#define DALI_ENV_UPDATE_STATUS_INTERVAL "DALI_UPDATE_STATUS_INTERVAL"
-
enum DebugPriority
{
DebugInfo,
#define DALI_LOG_ERROR_NOFN(format, args...) Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugError, format, ## args)
+#define DALI_LOG_WARNING_NOFN(format, args...) Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugWarning, format, ## args)
+
/**
* Provides unfiltered logging for fps monitor
*/
*/
#define DALI_LOG_RENDER_INFO(format, args...) Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## args)
+/**
+ * Provides unfiltered logging for release
+ */
+#define DALI_LOG_RELEASE_INFO(format, args...) Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## args)
+
#ifdef DEBUG_ENABLED
/**
static Filter *gElement;
static Filter *gActor;
static Filter *gShader;
- static Filter *gDynamics;
private:
LogLevel mLoggingLevel;
std::string mDebugString;
/**
+ * Print all the actor tree names
+ **/
+#define DALI_LOG_ACTOR_TREE( node ) { \
+ std::stringstream branch; \
+ Node* tempNode = node; \
+ while( tempNode ) { \
+ branch << "<" << tempNode->mDebugString << ">::"; \
+ tempNode = tempNode->GetParent(); \
+ } \
+ DALI_LOG_ERROR_NOFN("Actor tree: %s\n", branch.str().c_str()); \
+}
+
+/**
* Allows one object to set another object's debug string
*/
#define DALI_LOG_SET_OBJECT_STRING(object, string) (object->mDebugString = string)
#else // DEBUG_ENABLED
#define DALI_LOG_OBJECT_STRING_DECLARATION
+#define DALI_LOG_ACTOR_TREE(node)
#define DALI_LOG_SET_OBJECT_STRING(object, string)
#define DALI_LOG_FMT_OBJECT_STRING(object, fmt, args...)
#define DALI_LOG_GET_OBJECT_STRING(object)
#endif
-}}} // Dali/Integration/Debug namespaces
+/********************************************************************************
+ * Time instrumentation *
+ ********************************************************************************/
+
+#if defined(DEBUG_ENABLED)
+
+void GetNanoseconds( uint64_t& timeInNanoseconds );
+
+#define DALI_LOG_TIMER_START( timeVariable ) \
+ uint64_t timeVariable##1; \
+ Debug::GetNanoseconds( timeVariable##1 );
+
+#define DALI_LOG_TIMER_END( timeVariable, filter, level, preString) \
+ uint64_t timeVariable##2; \
+ Debug::GetNanoseconds( timeVariable##2 ); \
+ DALI_LOG_INFO( filter, level, preString " %ld uSec\n", ((timeVariable##2-timeVariable##1)/1000));
+
+#else // DEBUG_ENABLED
+
+#define DALI_LOG_TIMER_START( timeVariable )
+#define DALI_LOG_TIMER_END( timeVariable, filter, level, preString)
+
+#endif
+
+} // Debug
+} // Integration
+} // Dali
#endif // __DALI_INTEGRATION_DEBUG_H__