sysstatemgmt/syslangutil/src/syslangutiltrace.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/syslangutil/src/syslangutiltrace.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of tracing functions for SysLangUtil module.
+*
+*/
+
+
+#ifdef _DEBUG
+    #include <e32debug.h>
+    #include "syslangutiltrace.h"
+#endif // _DEBUG
+
+#ifdef _DEBUG
+
+    _LIT( KModuleName, "SYSLANG" );
+    _LIT( KOverflowStr, "..." );
+    _LIT( KTraceFuncFmt, "%S # %S" );
+    _LIT( KTraceSeparator, " # " );
+    _LIT( KAssertionFmt, "%S # Assertion failed: file=%S, line=%d" );
+    _LIT( KFatalMemAllocFailure, "SYSLANG # Memory allocation failure during tracing" );
+
+    const TInt KTraceBufLen = 128;
+    typedef TBuf<KTraceBufLen> TTraceBuf;
+
+    const TInt KFileNameBufLen = 64;
+    typedef TBuf<KFileNameBufLen> TFileNameBuf;
+
+#endif // _DEBUG
+
+#if defined _DEBUG && defined __SYSLANG_TRACE__
+    _LIT( KTraceFuncExitFmt, "%S # %S finished" );
+    _LIT( KTraceFuncExitRetFmt, "%S # %S finished with %d" );
+    _LIT( KTraceCallerFmt, " (caller thread: %S)" );
+
+    const TInt KFuncNameBufLen = 64;
+    typedef TBuf<KFuncNameBufLen> TFuncNameBuf;
+#endif // _DEBUG && __SYSLANG_TRACE__
+
+#ifdef _DEBUG
+
+NONSHARABLE_CLASS( TTraceOverflowHandler ) : public TDes16Overflow
+    {
+    public: // Functions from base classes
+
+        /**
+        * Handle descriptor ovewflow.
+        */
+        virtual void Overflow( TDes16 &aDes )
+            {
+            aDes.RightTPtr( KOverflowStr().Length() ).Copy( KOverflowStr );
+            }
+    };
+
+#endif // _DEBUG
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+#ifdef _DEBUG
+
+// -----------------------------------------------------------------------------
+// AssertTraceFunc
+//
+// -----------------------------------------------------------------------------
+//
+void AssertTraceFunc( const TDesC8& aFile, TInt aLine )
+    {
+    TTraceOverflowHandler overflowHandler;
+
+    TFileNameBuf name;
+    name.Copy( aFile.Left( KFileNameBufLen ) ); // Change it to 16-bit descriptor
+
+    TTraceBuf buf;
+    buf.AppendFormat( KAssertionFmt, &overflowHandler,
+                      &KModuleName, &name, aLine );
+    RDebug::Print( buf );
+    }
+
+
+// -----------------------------------------------------------------------------
+// TraceFunc
+//
+// -----------------------------------------------------------------------------
+//
+void TraceFunc( TRefByValue<const TDesC16> aFmt, ... )
+    {
+    HBufC* fmtString = HBufC::New( KTraceFuncFmt().Length() +
+                                   KModuleName().Length() +
+                                   static_cast<const TDesC16&>( aFmt ).Length() );
+
+    if ( fmtString )
+        {
+        TPtr ptr( fmtString->Des() );
+        ptr.Append( KModuleName );
+        ptr.Append( KTraceSeparator );
+        ptr.Append( aFmt );
+
+        VA_LIST list;
+        VA_START( list, aFmt );
+
+        TTraceOverflowHandler overflowHandler;
+        TTraceBuf buf;
+        buf.AppendFormatList( *fmtString, list, &overflowHandler );
+        RDebug::Print( buf );
+
+        VA_END( list );
+
+        delete fmtString;
+        }
+    else
+        {
+        RDebug::Print( KFatalMemAllocFailure );
+        }
+    }
+
+
+#endif // _DEBUG
+
+#if defined _DEBUG && defined __SYSLANG_TRACE__
+
+// -----------------------------------------------------------------------------
+// FuncEntryTrace
+//
+// -----------------------------------------------------------------------------
+//
+void FuncEntryTrace( const TDesC8& aFunction, TBool aPrintCaller )
+    {
+    TTraceOverflowHandler overflowHandler;
+
+    TFuncNameBuf name;
+    name.Copy( aFunction.Left( KFuncNameBufLen ) ); // Change it to 16-bit descriptor
+
+    TTraceBuf buf;
+    buf.AppendFormat( KTraceFuncFmt, &overflowHandler, &KModuleName, &name );
+
+    if ( aPrintCaller )
+        {
+        const TName caller = RThread().Name();
+        buf.AppendFormat( KTraceCallerFmt, &overflowHandler, &caller );
+        }
+
+    RDebug::Print( buf );
+    }
+
+
+// -----------------------------------------------------------------------------
+// FuncExitTrace
+//
+// -----------------------------------------------------------------------------
+//
+void FuncExitTrace( const TDesC8& aFunction )
+    {
+    TTraceOverflowHandler overflowHandler;
+
+    TFuncNameBuf name;
+    name.Copy( aFunction.Left( KFuncNameBufLen ) ); // Change it to 16-bit descriptor
+
+    TTraceBuf buf;
+    buf.AppendFormat( KTraceFuncExitFmt, &overflowHandler, &KModuleName, &name );
+    RDebug::Print( buf );
+    }
+
+
+// -----------------------------------------------------------------------------
+// FuncExitTrace
+//
+// -----------------------------------------------------------------------------
+//
+void FuncExitTrace( const TDesC8& aFunction, const TInt aReturnValue )
+    {
+    TTraceOverflowHandler overflowHandler;
+
+    TFuncNameBuf name;
+    name.Copy( aFunction.Left( KFuncNameBufLen ) ); // Change it to 16-bit descriptor
+
+    TTraceBuf buf;
+    buf.AppendFormat( KTraceFuncExitRetFmt, &overflowHandler,
+                      &KModuleName, &name, aReturnValue );
+    RDebug::Print( buf );
+    }
+
+
+#endif // _DEBUG && __SYSLANG_TRACE__