author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// Copyright (c) 1997-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: // #ifndef __DEBUGLOG_H__ #define __DEBUGLOG_H__ #pragma warning( disable : 4710 ) //function abc not expanded #include "../SERVER/w32cmd.h" typedef TBuf<32> TShortBuf; typedef TBuf<64> TLongBuf; enum {LogTBufSize=0xA0}; class TDebugLogOverflow : public TDes16Overflow { public: inline TDebugLogOverflow(); inline void Reset(); inline TBool IsError(); //Pure virtual function from TDesNnOverflow void Overflow(TDes &aDes); private: TBool iError; }; class TWsDecoder { public: enum {ENewClientClass=0x9999}; union TWsCmdUnion { const TAny *any; TWsClCmdUnion client; TWsWinCmdUnion window; TWsGcCmdUnion gc; TWsSdCmdUnion sd; TWsAnimDllCmdUnion anim; }; TDesC &CommandBuf(TInt aApp); TDesC &Command(TInt aClass, TInt aOpcode, const TAny *aCmdData, TInt aHandle); TDesC &CommandReply(TInt aData); TDesC &CommandReplyBuf(const TDesC8 &aDes); TDesC &CommandReplyBuf(const TDesC16 &aDes); TDesC &NewClient(TUint aConnectionHandle); TDesC &SignalEvent(TInt aApp); TDesC &Panic(TInt aApp, TInt aReason); TDesC &MiscMessage(const TDesC &aFormat,TInt aParam); void Disable(); void Enable(); private: void UnKnown(); void UnKnownOpcode(TBuf<LogTBufSize> &aText, TInt aOpcode); void UnKnownReplyBuf(TBuf<LogTBufSize> &aText, TInt aOpcode); void AppendPoint(TBuf<LogTBufSize> &aText, const TDesC8 *aReplyDes8); void AppendRect(TBuf<LogTBufSize> &aText, const TDesC8 *aReplyDes8); void AppendDesc(TBuf<LogTBufSize> &aText, const TDesC8 *aReplyDes8); void AppendDesc(TBuf<LogTBufSize> &aText, const TDesC16 *aReplyDes16); void decodeWindow(TBuf<LogTBufSize> &aText,TInt aOpcode,const TAny *aCmdData); void DecodeWindowGroup(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeClient(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeWindow(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeGc(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeGc1(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData); void DecodeGc2(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData); void DecodeGc3(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData); void DecodeScreenDevice(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeAnimDll(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeSpriteBase(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeBitmap(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeDirect(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void DecodeClick(TBuf<LogTBufSize> &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void ReplyBufWindowGroup(TBuf<LogTBufSize> &aText, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); void ReplyBufWindow(TBuf<LogTBufSize> &aText, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); void ReplyBufClient(TBuf<LogTBufSize> &aText, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); void ReplyBufScreenDevice(TBuf<LogTBufSize> &aText, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); TDesC &commandDetails(TInt aClass, TInt aOpcode, const TAny *aCmdData, TInt aHandle); TDesC &eventDetails(const TWsEvent *aWsEvent); TDesC &eventDetails(const TRawEvent *aEvent); TDesC &replyBufDetails(TInt aClass, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); private: TBuf<LogTBufSize> iEventDetailsText; TBuf<LogTBufSize> iCommandDetailsText; TBuf<LogTBufSize> iText; TUint iCommandCount; TUint iEventCount; TInt iRequestFuncClass; TInt iHandle; TInt iPrevOpcode; TDebugLogOverflow iOverflowHandler; }; class TDebugLogTextHandler { public: enum TArrayType { EInt, ERgb }; static void Append(TDes &aBuf1, const TDesC &aBuf2); static void TestAppend(); static TBuf<20> FormatBool(TBool aBool); static TBuf<32> FormatPoint(const TPoint &aPoint); static TBuf<32> FormatSize(const TSize &aSize); static TBuf<64> FormatRect(const TRect &aRect); static TBuf<40> FormatRgb(const TRgb &aRgb); static TBuf<20> PointerEventType(TPointerEvent::TType aType); static TBuf<LogTBufSize> FormatArray(TArrayType aArrayType, const TUint8 *aArrayPtr, TUint aNumElems); private: static TBuf<0x20> formatArrayElement(TArrayType aArrayType, const TUint8 *aArrayPtr); static void panic(TInt aReason); }; class CDebugLogDevice : public CBase { public: virtual void ConstructL(TBool aIsFirst, TDesC &aParams)=0; virtual void WriteToLogL(const TDesC &aDes, const TDesC &aDes2)=0; virtual void WriteToLog8L(const TDesC8 &aDes, const TDesC8 &aDes2)=0; }; class CDebugLog: public CDebugLogBase { private: enum {KNumProfiles=10}; public: IMPORT_C CDebugLog(CDebugLogDevice *aDevice); ~CDebugLog(); IMPORT_C void ConstructL(TBool aIsFirst, TDesC &aParams); //Pure virtual functions from CDebugLogBase void CommandBuf(TInt aApp); void Command(TInt aClass, TInt aOpcode, const TAny *aCmdData, TInt aHandle); void NewClient(TUint aConnectionHandle); void Reply(TInt aData); void ReplyBuf(const TDesC8 &aDes); void ReplyBuf(const TDesC16 &aDes); void SignalEvent(TInt aApp); void Panic(TInt aApp, TInt aReason); void MiscMessage(TInt aPriority,const TDesC &aFmt,TInt aParam=0); void HeapDump(); void SetLoggingLevel(TInt aLevel); void IniFileSettingRead(TInt aScreen, const TDesC& aVarName, TBool aFound, const TDesC& aResult); private: void AppendProfileNum(TDes &aDes, TInt aNum); void AppendProfileCount(TDes &aDes, TInt aNum); void LogProfiles(); void WriteToLog(const TDesC &aDes,TInt aLevel=ELogEverything); void MiscMessage(const TDesC &aFmt,TInt aParam=0); private: CDebugLogDevice *iDevice; TWsDecoder iWsDecoder; TBool iIsDisabled; TInt iErr; TTime iPrevTime; TInt iExtraLen; TInt iLevel; //The current logging level TInt iLastApp; }; GLREF_C TInt hHandleToValue(TUint32 handle); // Inline functions /*TDebugLogOverflow*/ inline TDebugLogOverflow::TDebugLogOverflow() :iError(EFalse) {} inline void TDebugLogOverflow::Reset() {iError=EFalse;} inline TBool TDebugLogOverflow::IsError() {return iError;} #endif