--- a/uiservicetab/inc/uiservicetabtracer.h Thu Aug 19 09:41:53 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,425 +0,0 @@
-/*
-* Copyright (c) 2008 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: trace logs
- *
-*/
-
-#ifndef UISERVICETABTRACER_H
-#define UISERVICETABTRACER_H
-
-#include <e32base.h>
-#include <flogger.h>
-#include "vimpstbuilddefinitions.h"
-
-#ifdef CHAT_ENABLE_DEBUG_PRINT
-
-// --------------------------------------------------------------------------
-// Define tracer logging method
-// 0 = Logging off
-// 1 = Log to RDebug
-// 2 = Log to file (RFileLogger)
-// --------------------------------------------------------------------------
-//
-
-#ifdef __WINS__
- #ifdef _DEBUG
- #define TRACER_LOG_METHOD 1 // for WINS UDEB
- #else
- #define TRACER_LOG_METHOD 0 // for WINS UREL
- #endif
-#else
- #ifdef _DEBUG
- #define TRACER_LOG_METHOD 2 // for Armv5 UDEB
- #else
- #define TRACER_LOG_METHOD 0 // for Armv5 UREL
- #endif
-#endif
-
-#endif
-
-// --------------------------------------------------------------------------
-// Whether to use TRAP_INSTRUMENTATIONs to
-// log trapped leaves
-// --------------------------------------------------------------------------
-//
-#define TRACE_TRAPS
-//============================================================================
-
-// Logging off, define empty macros and skip all the rest
-#if TRACER_LOG_METHOD == 0
-
-#define TRACER(func)
-#define TRACER_AUTO
-#define TRACER_RET(func,format)
-#define TRACER_AUTO_RET(format)
-#define TRACER_LEAVE(func)
-#define TRACER_AUTO_LEAVE
-#define TRACE(args...)
-#define TRACE8(args...)
-#define TRACER_TO16(a,b)
-#define TRACER_TO8(a,b)
-#define TRACER_CLOSELOG
-
-#else // Logging on
-
-// --------------------------------------------------------------------------
-// Change these to modify line syntax
-// --------------------------------------------------------------------------
-//
-_LIT( KLogBase, "UiServiceTab %S(%d): %S");
-_LIT( KLogEnter, "UiServiceTab %S: ENTER" );
-_LIT( KLogExit, "UiServiceTab %S: EXIT" );
-_LIT( KLogLeave, "UiServiceTab %S: LEAVE!" );
-_LIT( KLogTrappedLeave, "UiServiceTab %S(%d): TRAPPED LEAVE, code %d!" );
-_LIT( KLogExitRet, "UiServiceTab %S: EXIT, Returning " );
-_LIT( KLogDir, "UiServiceTab" );
-_LIT( KLogFile, "UiServiceTab.log" );
-
-#define TRACER_PARAMS_LENGTH 200
-
-// --------------------------------------------------------------------------
-// Macro to print only function leaves (not entries or exits).
-// Example: TRACER_LEAVE( "CMyClass::MyFunction" );
-// --------------------------------------------------------------------------
-//
-#define TRACER_LEAVE(func) TTracer function_tracer( _S(func), _S(""), EFalse )
-
-// --------------------------------------------------------------------------
-// Same as above, except that function name is generated automatically
-// Example: TRACER_AUTO_LEAVE;
-// --------------------------------------------------------------------------
-//
-#define TRACER_AUTO_LEAVE TTracer \
- function_tracer( ((const TText8*)__PRETTY_FUNCTION__), _S(""), EFalse )
-
-// --------------------------------------------------------------------------
-// Macro to print function entry, exit and leave.
-// Example: TRACER( "CMyClass::MyFunction" );
-// --------------------------------------------------------------------------
-//
-#define TRACER(func) TTracer function_tracer( _S(func), _S(""), ETrue )
-
-// --------------------------------------------------------------------------
-// Same as above, except that function name is generated automatically
-// Example: TRACER_AUTO;
-// --------------------------------------------------------------------------
-//
-#define TRACER_AUTO \
- TTracer function_tracer \
- ( ((const TText8*)__PRETTY_FUNCTION__), _S(""), ETrue )
-
-// --------------------------------------------------------------------------
-// Macro to print function return value in addition to entry, exit
-// and leave conditions. Second parameter is a formatting string used
-// to print the return value Example to print an integer return value:
-// TRACER_RET("CMyclass::MyFunction", "%d");
-// --------------------------------------------------------------------------
-//
-#define TRACER_RET(func,format) \
- TTracer function_tracer( _S(func), _S(format), ETrue )
-
-// --------------------------------------------------------------------------
-// Same as above, except that function name is generated automatically
-// Example: TRACER_AUTO_RET( "%d" );
-// --------------------------------------------------------------------------
-//
-#define TRACER_AUTO_RET(format) \
- TTracer function_tracer \
- ( ((const TText8*)__PRETTY_FUNCTION__), _S(format), ETrue )
-
-// --------------------------------------------------------------------------
-// Macro to print custom msg with any number of parameters
-// Either TRACER, TRACER_RET or TRACER_LEAVE
-// must be called before in same scope
-// It's is assumed that descriptor (pointer) parameters are 16-bit
-// NOTE: It is also assumed that parameter values
-// add no more than TRACE_PARAMS_LENGTH to the traced string
-// --------------------------------------------------------------------------
-//
-#define TRACE( args... ) function_tracer.trace( __LINE__, ## args )
-
-// --------------------------------------------------------------------------
-// Macro to print custom msg with any number of parameters
-// Either TRACER, TRACER_RET or TRACER_LEAVE
-// must be called before in same scope
-// It's is assumed that descriptor (pointer) parameters are 8-bit
-// NOTE: It is also assumed that parameter values
-// add no more than TRACE_PARAMS_LENGTH to the traced string
-// --------------------------------------------------------------------------
-//
-#define TRACE8( args... ) function_tracer.trace8(__LINE__, ## args )
-
-// --------------------------------------------------------------------------
-// Just to quickly convert descriptors if needed
-// --------------------------------------------------------------------------
-//
-#define DESCRIPTOR_LENGTH 100
-#define TRACER_TO16( desc8, desc16 ) \
- TBuf<DESCRIPTOR_LENGTH> desc16;desc16.Copy(desc8)
-#define TRACER_TO8( desc16, desc8 ) \
- TBuf8<DESCRIPTOR_LENGTH> desc8;desc8.Copy(desc16)
-
-#ifdef TRACE_TRAPS
-#undef TRAP_INSTRUMENTATION_LEAVE
-#define TRAP_INSTRUMENTATION_LEAVE(aResult) \
- TTracer::static_trace( ((const TText8*)__PRETTY_FUNCTION__), \
- __LINE__, aResult )
-#endif
-
-
-#if TRACER_LOG_METHOD == 1 // Print to RDebug
-
-#include <e32debug.h>
-
-#define TRACER_PRINT(a) RDebug::Print(a,&iFunc);
-#define TRACER_PRINT_BASE(a,b,c) RDebug::Print(a,&iFunc, b, c);
-#define TRACER_PRINT_RET(a,b) RDebug::Print(a,&iFunc,b);
-#define TRACER_PRINT_STATIC(a, b, c,d ) \
- RDebug::Print(a, b, c, d);
-
-#elif TRACER_LOG_METHOD == 2 // Print to file
-
- // needs flogger.lib as DEBUGLIBRARY
-
-// --------------------------------------------------------------------------
-// Log directory under C:\logs
-// --------------------------------------------------------------------------
-//
-//_LIT( KLogDir, "MeCo" );
-
-// --------------------------------------------------------------------------
-// Log filename in log directory
-// --------------------------------------------------------------------------
-//
-//_LIT( KLogFile, "MeCo.log" );
-#define TRACER_PRINT(a) RFileLogger::WriteFormat(KLogDir, \
- KLogFile,EFileLoggingModeAppend,a,&iFunc);
-#define TRACER_PRINT_BASE(a,b,c) RFileLogger::WriteFormat(KLogDir, \
- KLogFile,EFileLoggingModeAppend,a,&iFunc,b,c);
-#define TRACER_PRINT_RET(a,b) RFileLogger::WriteFormat(KLogDir, \
- KLogFile,EFileLoggingModeAppend,a,&iFunc,b);
-#define TRACER_PRINT_STATIC(a,b,c,d) \
- RFileLogger::WriteFormat(KLogDir, \
- KLogFile,EFileLoggingModeAppend,a,b,c,d);
-
-#endif
-
-
-/**
- * Simple tracer class that logs function enter, exit or leave
- */
-class TTracer : public CBase
- {
-private:
-
- /**
- * Simple helper method to just return if NULL
- */
- template<class T> static void ReturnIfNull(T* aNy)
- { if ( !aNy ) return; }
-
-public:
- /**
- * inline constructor to write log of entering a function
- */
- TTracer( const TText* aFunc,
- const TText* aRetFormat,
- TBool aPrintEnter) :
- iFunc( aFunc),
- iRetFormat( aRetFormat ),
- iPrintEnterAndExit( aPrintEnter)
- {
- iFuncBuf = NULL;
- //iLogger.Connect();
- //iLogger.CreateLog(KLogDir, KLogFile, mode);
- if ( iPrintEnterAndExit )
- {
- TRACER_PRINT( KLogEnter );
- }
- }
-
- /**
- * inline constructor to write log of entering a function (8-bit)
- */
- TTracer( const TText8* aFunc,
- const TText* aRetFormat,
- TBool aPrintEnter) :
- iRetFormat( aRetFormat ),
- iPrintEnterAndExit( aPrintEnter )
- {
- TInt len = User::StringLength ((const unsigned char*)aFunc );
- HBufC8* temp = HBufC8::New( len );
- ReturnIfNull( temp );
- *temp = (const TUint8*)aFunc;
- iFuncBuf = HBufC::NewL( len );
- //iLogger.Connect();
- //iLogger.CreateLog(KLogDir, KLogFile, EFileLoggingModeAppend);
- if ( iFuncBuf )
- {
- iFuncBuf->Des().Copy( *temp );
- iFunc.Set( *iFuncBuf );
- if ( iPrintEnterAndExit )
- {
- TRACER_PRINT( KLogEnter );
- }
- }
- delete temp;
- }
-
-
- /**
- * inline destructor to write log of exiting a function
- * normally or with a leave
- */
- ~TTracer( )
- {
- if ( std::uncaught_exception ( ) ) // Leave is an exception
- {
- // The function exited with a leave
- TRACER_PRINT( KLogLeave );
- }
- else
- {
- // The function exited normally
- if ( iPrintEnterAndExit )
- {
- if ( iRetFormat.Length ( )== 0 )
- {
- TRACER_PRINT( KLogExit );
- }
- else
- {
- // Log the return value
-#ifdef __WINS__
- TInt32 retVal = 0;
-
- // The assembly bit. This needs to be reimplemented
- // for every target.
- _asm( mov retVal, ebx );
-
- TBuf<100> format( KLogExitRet );
- format.Append( iRetFormat );
- TRACER_PRINT_RET( format, retVal );
-#else
- // ARM assembler to get return value
- // could be implemented here..
- TRACER_PRINT( KLogExit );
-#endif
- }
- }
- }
- //iLogger.Close();
- delete iFuncBuf;
- }
-
-public:
-
- /**
- * Trace method that assumes 16-bit descriptor parameters
- */
- void trace( TInt aLine, const char* aMsg, ... )
- {
- ReturnIfNull( iFunc.Ptr() );
- TInt len = User::StringLength ((const unsigned char*)aMsg );
- TPtrC8 msg( (const unsigned char*)aMsg, len );
- HBufC* format = HBufC::New( len );
- ReturnIfNull( format );
- format->Des().Copy( msg );
- HBufC* result = HBufC::New( len + TRACER_PARAMS_LENGTH );
- if ( result )
- {
- VA_LIST list;
- VA_START( list, aMsg );
- result->Des().FormatList( *format, list );
- VA_END(list);
- TRACER_PRINT_BASE(KLogBase, aLine, result );
- }
- delete format;
- delete result;
- }
-
- /**
- * Trace method that assumes 8-bit descriptor parameters
- */
- void trace8(TInt aLine, const char* aMsg, ... )
- {
- ReturnIfNull( iFunc.Ptr() );
- TInt len = User::StringLength ((const unsigned char*)aMsg );
- TPtrC8 msg( (const unsigned char*)aMsg, len );
- HBufC8* result8 = HBufC8::New( len + TRACER_PARAMS_LENGTH );
- ReturnIfNull( result8 );
- VA_LIST list;
- VA_START( list, aMsg );
- result8->Des().FormatList( msg, list );
- VA_END(list);
- HBufC* result16 = HBufC::New( result8->Length() );
- if ( result16 )
- {
- result16->Des().Copy( *result8 );
- TRACER_PRINT_BASE( KLogBase, aLine, result16 );
- }
- delete result8;
- delete result16;
- }
-
- static void static_trace( const TText8* aFunc,
- TInt aLine,
- TInt aResult )
- {
- TInt len = User::StringLength ((const unsigned char*)aFunc );
- HBufC8* temp = HBufC8::New( len );
- ReturnIfNull( temp );
- *temp = (const TUint8*)aFunc;
- HBufC* funcBuf = HBufC::NewL( len );
- if ( funcBuf )
- {
- funcBuf->Des().Copy( *temp );
- TRACER_PRINT_STATIC(
- KLogTrappedLeave, funcBuf, aLine, aResult );
- }
- delete temp;
- delete funcBuf;
- }
-public:
-
- /**
- * Pointer descriptor to function signature that is to be logged.
- */
- TPtrC iFunc;
- //RFileLogger iLogger;
-
-private:
-
-
- /**
- * Formatting string used to print the function return value
- */
- TPtrC iRetFormat;
-
- /**
- * If true, method enters and exits are printed
- */
- TBool iPrintEnterAndExit;
-
- /**
- * Buffer to store function name when needed
- */
- HBufC* iFuncBuf;
- };
-
-#endif // TRACER_LOG_METHOD != 0 && CHAT_ENABLE_DEBUG_PRINT
-
-#endif // UISERVICETABTRACER_H
-
-// End of file