diff -r 6a20128ce557 -r ebfee66fde93 messagingapp/msgappfw/utils/src/ccsdebug.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgappfw/utils/src/ccsdebug.cpp Fri Jun 04 10:25:39 2010 +0100 @@ -0,0 +1,203 @@ +/* +* Copyright (c) 2007 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: CS general debug class +* +*/ + + +// INCLUDE FILES + +// SYSTEM INCLUDES + +// USER INCLUDES +#include "ccsdebug.h" + +// ============================== MEMBER FUNCTIONS ============================ + +// ---------------------------------------------------------------------------- +// CCsDebugWrapper::__LatencyMarkStart +// Marks the start time for latency measurement +// ---------------------------------------------------------------------------- +EXPORT_C void CCsDebugWrapper::__LatencyMarkStartL(TRefByValue str) +{ + CCsDebugArr* dbgArr = 0; + + // Check thread local storage: + if ( !(Dll::Tls())) + { + dbgArr = CCsDebugArr::NewL(); + User::LeaveIfError ( Dll::SetTls( dbgArr ) ); + } + else + { + dbgArr = static_cast( Dll::Tls() ); + } + + CCsDebug *dbg = CCsDebug::NewL(); + dbg->Mark(str); + + dbgArr->Push(*dbg); +} + +// ---------------------------------------------------------------------------- +// CCsDebugWrapper::__LatencyMarkEnd +// Marks the end time for latency measurement +// Displays the difference from Latency Mark start +// ---------------------------------------------------------------------------- +EXPORT_C void CCsDebugWrapper::__LatencyMarkEnd(TRefByValue str) +{ + CCsDebugArr* dbgArr = 0; + + // Check thread local storage: + if ( !(Dll::Tls()) ) + { + return; + } + else + { + dbgArr = static_cast( Dll::Tls() ); + } + + if ( dbgArr->IsEmpty() ) + { + delete dbgArr; + Dll::SetTls( NULL ); + } + else + { + CCsDebug* dbg = dbgArr->Pop(); + dbg->UnMark(str); + delete dbg; + } + + if ( !dbgArr && dbgArr->IsEmpty() ) + { + delete dbgArr; + Dll::SetTls( NULL ); + } +} + +// ---------------------------------------------------------------------------- +// CCsDebug::NewL +// Two Phase Construction +// ---------------------------------------------------------------------------- +EXPORT_C CCsDebug* CCsDebug::NewL() +{ + CCsDebug* self = new (ELeave) CCsDebug(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; +} + +// ---------------------------------------------------------------------------- +// CCsDebug::ConstructL +// Two Phase Construction +// ---------------------------------------------------------------------------- +void CCsDebug::ConstructL() +{ +} + +// ---------------------------------------------------------------------------- +// CCsDebug::Mark +// Marks the start time for latency measurement +// ---------------------------------------------------------------------------- +void CCsDebug::Mark(TRefByValue str,...) +{ + VA_LIST list; + VA_START(list, str); + + // Print to log file + TBuf buf; + buf.FormatList(str, list); + PRINT_LATENCY1 ( _L("#### [%S] Latency Measurement Start ####"), &buf ); + + startTime.HomeTime(); +} + +// ---------------------------------------------------------------------------- +// CCsDebug::UnMark +// Marks the end time for latency measurement +// Displays the difference from Latency Mark start +// ---------------------------------------------------------------------------- +void CCsDebug::UnMark(TRefByValue str,...) +{ + endTime.HomeTime(); + VA_LIST list; + VA_START(list, str); + + // Print to log file + TBuf buf; + buf.FormatList(str, list); + + TTimeIntervalMicroSeconds diff = endTime.MicroSecondsFrom(startTime); + TInt mytime = (diff.Int64()) / TIME_FACTOR; + + PRINT_LATENCY2 ( _L("#### [%S] Latency Measurement End, Time taken = %d (ms) ####"), &buf, mytime ); +} + + +// ---------------------------------------------------------------------------- +// CCsDebugArr::NewL +// Two Phase Construction +// ---------------------------------------------------------------------------- +EXPORT_C CCsDebugArr* CCsDebugArr::NewL() +{ + CCsDebugArr* self = new (ELeave) CCsDebugArr(); + return self; +} + +// ---------------------------------------------------------------------------- +// CCsDebugArr::Push +// Push an element into the array +// ---------------------------------------------------------------------------- +EXPORT_C void CCsDebugArr::Push(CCsDebug& dbg) +{ + debugArray.Append(&dbg); +} + +// ---------------------------------------------------------------------------- +// CCsDebugArr::Pop +// Pop an element from the array +// ---------------------------------------------------------------------------- +EXPORT_C CCsDebug* CCsDebugArr::Pop() +{ + TInt index = debugArray.Count() - 1; + CCsDebug* dbg = debugArray[index]; + debugArray.Remove(index); + return (dbg); +} + +// ---------------------------------------------------------------------------- +// CCsDebugArr::IsEmpty +// Check if array is empty +// ---------------------------------------------------------------------------- +EXPORT_C TBool CCsDebugArr::IsEmpty() +{ + if ( debugArray.Count() == 0 ) + return ETrue; + else + return EFalse; +} + +// ---------------------------------------------------------------------------- +// CCsDebugArr::~CCsDebugArr +// Destructor +// ---------------------------------------------------------------------------- +CCsDebugArr::~CCsDebugArr() +{ + debugArray.ResetAndDestroy(); +} + +// End of file