javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtlog.h
branchRCL_3
changeset 65 ae942d28ec0e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/library/swtlog.h	Tue Aug 31 15:09:22 2010 +0300
@@ -0,0 +1,248 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Nokia Corporation - initial implementation
+ *******************************************************************************/
+
+#ifndef SWTLOG_H_
+#define SWTLOG_H_
+
+#include <QString>
+#include <QTime>
+
+// Un-comment the following line to enable JNI logging
+//#define SWT_ENABLE_LOGGING
+
+namespace Java { namespace eSWT {
+
+/*
+ * Categories/types of logs. 
+ */
+enum SwtLogType {
+    SwtLogUnknown,
+    SwtLogJNIEnter,
+    SwtLogJNIExit,
+    SwtLogFuncEnter,
+    SwtLogFuncExit,
+    SwtLogScopeEnter,
+    SwtLogScopeExit,
+    SwtLogEvent,
+    SwtLogFatal,
+    SwtLogDebugData,
+    GfxLogJNIEnter,
+    GfxLogJNIExit,
+    GfxLogFuncEnter,
+    GfxLogFuncExit,
+    GfxLogScopeEnter,
+    GfxLogScopeExit
+};
+
+// A Time stamp prefixed to all log entries
+#define SWT_LOG_TIMESTAMP QTime::currentTime().toString("HH:mm:ss.zzz").toLatin1().data()
+
+// The component name used as the prefix for all log entries
+static const char* const swtLogComponentName = "Java SWT";
+static const char* const gfxLogComponentName = "Java gfx";
+static const char* const unkLogComponentName = "Java N/A";
+
+// Descriptions of different types of logged data used for data log entries
+static const char* const swtLogFatalDescription = "Fatal";
+static const char* const swtLogEventDescription = "Event";
+static const char* const swtLogDebugDataDescription = "Data";
+static const char* const swtLogScopeEnteredDescription = "Entered";
+static const char* const swtLogScopeExitingDescription = "Exiting";
+static const char* const swtLogUnknownDataDescription = "Unknown";
+
+//
+// Macros for SWT component logging
+//
+
+#ifdef SWT_ENABLE_LOGGING
+
+#ifdef Q_CC_NOKIAX86
+#define SWT_FUNC_INFO (QString(__FILE__ ":") += QString::number(__LINE__)).toLatin1().data()
+#else
+#define SWT_FUNC_INFO Q_FUNC_INFO
+#endif
+
+// Logging of a JNI native method call, JNI functions have this
+#define SWT_LOG_JNI_CALL() SwtScopeLog __swtScopeLogger(SWT_FUNC_INFO, SwtLogJNIEnter, SwtLogJNIExit)
+
+// Logging of a function call other than the above
+#define SWT_LOG_FUNC_CALL() SwtScopeLog __swtScopeLogger(SWT_FUNC_INFO, SwtLogFuncEnter, SwtLogFuncExit)
+
+// Logging of a scope other than function call
+#define SWT_LOG_SCOPE_CALL() SwtScopeLog __swtScopeLogger(SWT_FUNC_INFO, SwtLogScopeEnter, SwtLogScopeExit)
+
+// Logging of events
+#define SWT_LOG_EVENT_1(format, field1) SwtDataLog::LogData(format, field1, SwtLogEvent)
+#define SWT_LOG_EVENT_2(format, field1, field2) SwtDataLog::LogData(format, field1, field2, SwtLogEvent)
+#define SWT_LOG_EVENT_3(format, field1, field2, field3) SwtDataLog::LogData(format, field1, field2, field3, SwtLogEvent)
+#define SWT_LOG_EVENT_4(format, field1, field2, field3, field4) SwtDataLog::LogData(format, field1, field2, field3, field4, SwtLogEvent)
+#define SWT_LOG_EVENT_5(format, field1, field2, field3, field4, field5) SwtDataLog::LogData(format, field1, field2, field3, field4, field5, SwtLogEvent)
+
+// Logging of debug data other than the above
+#define SWT_LOG_DATA_1(format, data1) SwtDataLog::LogData(format, data1, SwtLogDebugData)
+#define SWT_LOG_DATA_2(format, data1, data2) SwtDataLog::LogData(format, data1, data2, SwtLogDebugData)
+#define SWT_LOG_DATA_3(format, data1, data2, data3) SwtDataLog::LogData(format, data1, data2, data3, SwtLogDebugData)
+#define SWT_LOG_DATA_4(format, data1, data2, data3, data4) SwtDataLog::LogData(format, data1, data2, data3, data4, SwtLogDebugData)
+#define SWT_LOG_DATA_5(format, data1, data2, data3, data4, data5) SwtDataLog::LogData(format, data1, data2, data3, data4, data5, SwtLogDebugData)
+
+#else // SWT_ENABLE_LOGGING
+
+#define SWT_LOG_JNI_CALL()
+#define SWT_LOG_FUNC_CALL()
+#define SWT_LOG_SCOPE_CALL()
+
+#define SWT_LOG_EVENT_1(format, field1)
+#define SWT_LOG_EVENT_2(format, field1, field2)
+#define SWT_LOG_EVENT_3(format, field1, field2, field3)
+#define SWT_LOG_EVENT_4(format, field1, field2, field3, field4)
+#define SWT_LOG_EVENT_5(format, field1, field2, field3, field4, field5)
+
+//#define SWT_LOG_FATAL_1(format, field1)
+
+#define SWT_LOG_DATA_1(format, data1)
+#define SWT_LOG_DATA_2(format, data1, data2)
+#define SWT_LOG_DATA_3(format, data1, data2, data3)
+#define SWT_LOG_DATA_4(format, data1, data2, data3, data4)
+#define SWT_LOG_DATA_5(format, data1, data2, data3, data4, data5)
+
+#endif // SWT_ENABLE_LOGGING
+
+// Log fatal error conditions, application will automatically terminate with return value 1 when using this
+#define SWT_LOG_FATAL_1(format, field1) SwtDataLog::LogData(format, field1, SwtLogFatal)
+
+/**
+ * A class implementing logging of entering and leaving a scope. 
+ * Additional type parameter is added for doing run time variation 
+ * for different types of scope logs.  
+ */
+class SwtScopeLog
+{
+public:
+    SwtScopeLog( const char* aFunctionName, const SwtLogType& aEnterType, const SwtLogType& aExitType );
+    virtual ~SwtScopeLog();
+protected:
+    SwtScopeLog();
+private:
+    QString* mFunctionName;
+    SwtLogType mExitLogType;
+};
+
+/**
+ * Functions for logging data using the standard printf conventions. 
+ * Each function takes the format string and the parameters. Additional type parameter
+ * is added for doing run time variation for different types of debug data logs. 
+ */
+namespace SwtDataLog
+    {    
+    static inline void DoLog( const char* aLogEntry, const SwtLogType& aType )
+        {
+        const char* dataDescription = NULL;
+        const char* logComponentName = NULL;
+        switch( aType )
+            {
+            case SwtLogFatal:
+                logComponentName = swtLogComponentName;
+                dataDescription = swtLogFatalDescription;
+                break;
+            case SwtLogEvent:
+                logComponentName = swtLogComponentName;
+                dataDescription = swtLogEventDescription;
+                break;
+            case SwtLogDebugData:
+                logComponentName = swtLogComponentName;
+                dataDescription = swtLogDebugDataDescription;
+                break;
+            case SwtLogJNIEnter:
+            case SwtLogFuncEnter:
+            case SwtLogScopeEnter:
+                logComponentName = swtLogComponentName;
+                dataDescription = swtLogScopeEnteredDescription;
+                break;
+            case SwtLogJNIExit:
+            case SwtLogFuncExit:
+            case SwtLogScopeExit:
+                logComponentName = swtLogComponentName;
+                dataDescription = swtLogScopeExitingDescription;
+                break;                
+            case GfxLogJNIEnter:
+            case GfxLogFuncEnter:
+            case GfxLogScopeEnter:
+                logComponentName = gfxLogComponentName;
+                dataDescription = swtLogScopeEnteredDescription;
+                break;
+            case GfxLogJNIExit:
+            case GfxLogFuncExit:
+            case GfxLogScopeExit:  
+                logComponentName = gfxLogComponentName;
+                dataDescription = swtLogScopeExitingDescription;
+                break;
+            default:
+                break;
+            }
+        
+        if( !dataDescription )
+            {
+            dataDescription = swtLogUnknownDataDescription;
+            }
+        if( !logComponentName )
+            {
+            logComponentName = unkLogComponentName;
+            }
+        if( aType == SwtLogFatal )
+            {
+            qFatal( "%s %s %s: %s", SWT_LOG_TIMESTAMP, logComponentName, dataDescription, aLogEntry );
+            }
+        else
+            {
+            qDebug( "%s %s %s: %s", SWT_LOG_TIMESTAMP, logComponentName, dataDescription, aLogEntry );
+            }
+        }
+        
+    template<class T1> 
+    void LogData( const char* format, const T1& data1, const SwtLogType& type )
+        {
+        QString str;
+        DoLog( str.sprintf( format, data1 ).toLatin1().data(), type );
+        }
+        
+    template<class T1, class T2>
+    void LogData( const char* format, const T1& data1, const T2& data2, const SwtLogType& type )
+        {
+        QString str;
+        DoLog( str.sprintf( format, data1, data2 ).toLatin1().data(), type );
+        }
+        
+    template<class T1, class T2, class T3>
+    void LogData( const char* format, const T1& data1, const T2& data2, const T3& data3, const SwtLogType& type )
+        {
+        QString str;
+        DoLog( str.sprintf( format, data1, data2, data3 ).toLatin1().data(), type );
+        }
+        
+    template<class T1, class T2, class T3, class T4>
+    void LogData( const char* format, const T1& data1, const T2& data2, const T3& data3, const T4& data4, const SwtLogType& type )
+        {
+        QString str;
+        DoLog( str.sprintf( format, data1, data2, data3, data4 ).toLatin1().data(), type );
+        }
+        
+    template<class T1, class T2, class T3, class T4, class T5>
+    void LogData( const char* format, const T1& data1, const T2& data2, const T3& data3, const T4& data4, const T5& data5, const SwtLogType& type )
+        {
+        QString str;
+        DoLog( str.sprintf( format, data1, data2, data3, data4, data5 ).toLatin1().data(), type );
+        }
+    }
+
+}}
+
+#endif // SWTLOG_H_
+