--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_common_definition_api/inc/mpxlog.h Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2006 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: Debug print macros
+*
+*/
+
+
+
+#ifndef MPXLOG_H
+#define MPXLOG_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32svr.h>
+#include <e32property.h>
+
+#ifdef _DEBUG
+#define MPX_PERFORMANCE_LOG
+#endif
+
+// MACROS
+#ifdef _DEBUG
+#define MPX_DEBUG1(s) RDebug::Print(_L(#s))
+#define MPX_DEBUG2(s, a) RDebug::Print(_L(#s), a)
+#define MPX_DEBUG3(s, a, b) RDebug::Print(_L(#s), a, b)
+#define MPX_DEBUG4(s, a, b, c) RDebug::Print(_L(#s), a, b, c)
+#define MPX_DEBUG5(s, a, b, c, d) RDebug::Print(_L(#s), a, b, c, d)
+#define MPX_FUNC(fn) TFunctionTrace _s(_L(fn));
+#define MPX_FUNC_EX(fn) TFunctionTrace _s(_L(fn), this);
+class TFunctionTrace
+ {
+ public:
+ TFunctionTrace(TRefByValue<const TDesC> aName, TAny* aThis=NULL):
+ iStr(aName), iThis(aThis)
+ {
+ iThis ? MPX_DEBUG3("-->%S, 0x%08x",&iStr, iThis) : MPX_DEBUG2("-->%S",&iStr);
+ }
+ ~TFunctionTrace()
+ {
+ iThis ? MPX_DEBUG3("<--%S, 0x%08x",&iStr, iThis) : MPX_DEBUG2("<--%S",&iStr);
+ }
+ private:
+ TPtrC iStr;
+ TAny* iThis;
+ };
+
+// print out (index, id) for each level and the first 15 ids at top level
+#define MPX_DEBUG_PATH(aPath) { \
+ TInt dlevels = (aPath).Levels();\
+ TInt dcount = (aPath).Count();\
+ MPX_DEBUG3("Collection Path debug: levels= %d, count = %d", dlevels, dcount);\
+ for (TInt i=0; i<dlevels;++i)\
+ {\
+ MPX_DEBUG4("Collection Path debug: Level[%d] = (index %d, id 0x%08x)", i, (aPath).Index(i), (aPath).Id(i).iId1);\
+ }\
+ if (dcount > 0)\
+ {\
+ TInt index = (aPath).Index();\
+ MPX_DEBUG2("Collection Path debug current index %d", index);\
+ if (index>=0 && index<dcount)\
+ {\
+ CMPXCollectionPath* dpath = const_cast<CMPXCollectionPath*>(&aPath);\
+ dpath->SetToFirst();\
+ TInt ditem(0);\
+ do\
+ {\
+ MPX_DEBUG3("Collection Path debug top level: item %d = id 0x%08x", ditem, dpath->Id().iId1);\
+ } while (++(*dpath) && ++ditem < 15 );\
+ dpath->Set(index);\
+ }\
+ else\
+ {\
+ MPX_DEBUG1("Collection Path debug: Invalid current index");\
+ }\
+ }\
+ }
+
+#define MPX_DEBUG_THREAD(ss) { \
+ RProcess process; \
+ TFullName fullName; \
+ process.FullName( fullName ); \
+ RThread thisThread; \
+ _LIT(_ss, ss); \
+ MPX_DEBUG5("%S: process=%S, thread=%d, this=0x%08x", &_ss, &fullName, (TUint)thisThread.Id(), this); \
+ }
+
+_LIT(_KMPXErrorInfo, "##MPX Error##: error %d file %s line %d");
+#define MPX_S(a) _S(a)
+#define MPX_ERROR_LOG(aErr) {\
+ if (aErr) RDebug::Print(_KMPXErrorInfo, aErr, MPX_S(__FILE__), __LINE__);\
+ }
+#else
+#define MPX_DEBUG1(s)
+#define MPX_DEBUG2(s, a)
+#define MPX_DEBUG3(s, a, b)
+#define MPX_DEBUG4(s, a, b, c)
+#define MPX_DEBUG5(s, a, b, c, d)
+#define MPX_FUNC(s)
+#define MPX_FUNC_EX(fn)
+#define MPX_DEBUG_PATH(aPath)
+#define MPX_DEBUG_THREAD(ss)
+// Copy constant _KMPXErrorInfo and Macros MPX_S and MPX_ERROR_LOG from
+// _DEBUG section if intend to log error in release build.
+#define MPX_ERROR_LOG(aErr)
+#endif
+
+#ifdef MPX_PERFORMANCE_LOG
+#define MPX_PERF_CHECKPT(s) RDebug::Print(_L("--- PERFORMANCE CHECK POINT ---"));\
+ RDebug::Print(_L(#s));
+#define MPX_PERF_START(fn) TPerfTrace perf__##fn (_L(#fn)); perf__##fn.Start();
+#define MPX_PERF_END(fn) perf__##fn.End();
+
+#define MPX_PERF_START_EX(fn) TPerfTrace perf__##fn (_L(#fn)); perf__##fn.StartEx();
+#define MPX_PERF_END_EX(fn) TPerfTrace perf__##fn (_L(#fn)); perf__##fn.EndEx();
+#define KAppUidMusicPlayerPerf 300000
+#define KMPXPerfTop32 1
+#define KMPXPerfBottom32 2
+
+class TPerfTrace
+ {
+ public:
+ TPerfTrace(TRefByValue<const TDesC> aName):
+ iStr(aName)
+ {
+ }
+ void TPerfTrace::Start()
+ {
+ iTime.UniversalTime();
+ MPX_DEBUG2("-->%S",&iStr);
+ }
+ void TPerfTrace::End()
+ {
+ TTime now;
+ now.UniversalTime();
+ TInt delta = I64INT(now.MicroSecondsFrom(iTime).Int64());
+ MPX_DEBUG3("<--%S, time taken %d us", &iStr, delta);
+ }
+ void TPerfTrace::StartEx()
+ {
+ MPX_DEBUG2(">>> MPXPerf started %S",&iStr);
+ TTime time;
+ time.UniversalTime();
+ TInt64 start = time.Int64();
+
+ TInt err( RProperty::Define(TUid::Uid(KAppUidMusicPlayerPerf), KMPXPerfTop32, RProperty::EInt ) );
+ if ( err == KErrNone || err == KErrAlreadyExists)
+ {
+ err = RProperty::Define(TUid::Uid(KAppUidMusicPlayerPerf), KMPXPerfBottom32, RProperty::EInt );
+ }
+
+ if ( err == KErrNone || err == KErrAlreadyExists )
+ {
+ TInt top32( start >> 32 );
+ TInt bottom32( start & 0xFFFFFFFF );
+ err = RProperty::Set( TUid::Uid(KAppUidMusicPlayerPerf),
+ KMPXPerfTop32,
+ top32 );
+ err = RProperty::Set( TUid::Uid(KAppUidMusicPlayerPerf),
+ KMPXPerfBottom32,
+ bottom32 );
+ }
+ }
+
+
+ void TPerfTrace::EndEx()
+ {
+ TTime end;
+ end.UniversalTime();
+ TInt ret( 0 );
+ TInt64 s( 0 );
+ TInt err( RProperty::Get( TUid::Uid(KAppUidMusicPlayerPerf), KMPXPerfTop32, ret ) );
+ if ( err == KErrNone )
+ {
+ s = TInt64( ret ) << 32;
+ err = RProperty::Get( TUid::Uid(KAppUidMusicPlayerPerf), KMPXPerfBottom32, ret );
+ if ( err == KErrNone )
+ {
+ s += ret;
+ }
+ else
+ {
+ s = 0;
+ }
+ }
+ TTime start(s);
+ TInt delta = I64INT(end.MicroSecondsFrom(start).Int64());
+ MPX_DEBUG3(">>> MPXPerf %S, time taken %d us", &iStr, delta);
+ }
+ private:
+ TPtrC iStr;
+ TTime iTime;
+ };
+
+
+#else
+#define MPX_PERF_CHECKPT(s)
+#define MPX_PERF_START(fn)
+#define MPX_PERF_END(fn)
+#define MPX_PERF_START_EX(fn)
+#define MPX_PERF_END_EX(fn)
+#endif
+
+#define MPX_TRAP(_r, _s) TRAP(_r,_s);MPX_ERROR_LOG(_r);
+#define MPX_TRAPD(_r, _s) TRAPD(_r,_s);MPX_ERROR_LOG(_r);
+
+#endif // MPXLOG_H
+
+// End of File