diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/debuglog/DEBUGLOG.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/debuglog/DEBUGLOG.H Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,190 @@ +// 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 &aText, TInt aOpcode); + void UnKnownReplyBuf(TBuf &aText, TInt aOpcode); + void AppendPoint(TBuf &aText, const TDesC8 *aReplyDes8); + void AppendRect(TBuf &aText, const TDesC8 *aReplyDes8); + void AppendDesc(TBuf &aText, const TDesC8 *aReplyDes8); + void AppendDesc(TBuf &aText, const TDesC16 *aReplyDes16); + void decodeWindow(TBuf &aText,TInt aOpcode,const TAny *aCmdData); + void DecodeWindowGroup(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeClient(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeWindow(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeGc(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeGc1(TBuf &aText, TInt aOpcode, const TAny *aCmdData); + void DecodeGc2(TBuf &aText, TInt aOpcode, const TAny *aCmdData); + void DecodeGc3(TBuf &aText, TInt aOpcode, const TAny *aCmdData); + void DecodeScreenDevice(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeAnimDll(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeSpriteBase(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeBitmap(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeDirect(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void DecodeClick(TBuf &aText, TInt aOpcode, const TAny *aCmdData, TInt aHandle); + void ReplyBufWindowGroup(TBuf &aText, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); + void ReplyBufWindow(TBuf &aText, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); + void ReplyBufClient(TBuf &aText, TInt aOpcode, const TDesC8 *aReplyDes8, const TDesC *aReplyDesText); + void ReplyBufScreenDevice(TBuf &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 iEventDetailsText; + TBuf iCommandDetailsText; + TBuf 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 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 +