--- /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<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
+