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) 1995-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: // General utility functions that don't belong anywhere else // // #include "server.h" #include "rootwin.h" #include "wstop.h" #include "panics.h" GLREF_D CDebugLogBase *wsDebugLog; GLDEF_C RWsRegion *GetRegionFromClientL(CWsClient *aClient, TInt aCount) { TInt bufSize=sizeof(TRect)*aCount; TUint8* rectList=STATIC_CAST(TUint8*,User::Alloc(bufSize)); User::LeaveIfNull(rectList); CleanupStack::PushL(rectList); TPtr8 rectBuf(rectList,bufSize); aClient->RemoteRead(rectBuf,0); RWsRegion* region=new(ELeave) RWsRegion(aCount,REINTERPRET_CAST(TRect*,rectList)); CleanupStack::Pop(rectList); return(region); } GLDEF_C TInt ExternalizeRegionL(RWriteStream& aWriteStream, const RWsRegion& aRegion) { TInt dataLen = sizeof(TRect)*aRegion.Count(); aWriteStream.WriteInt32L(aRegion.Count()); aWriteStream.WriteL(REINTERPRET_CAST(const TUint8*,aRegion.RectangleList()),dataLen); aWriteStream.CommitL(); return sizeof(TInt32)+dataLen; } GLDEF_C RWsRegion* InternalizeRegionL(RReadStream& aReadStream) { TInt numRects = aReadStream.ReadInt32L(); TInt bufSize = sizeof(TRect)*numRects; // Allocate buffer for list of clipping rectangles. We leave if we // cannot create the buffer TUint8* rectList = static_cast<TUint8*>(User::AllocL(bufSize)); CleanupStack::PushL(rectList); // Read the list of rectangles into the buffer aReadStream.ReadL(rectList,bufSize); // Point member pointer to our new rectangle list buffer RWsRegion* region = new(ELeave) RWsRegion(numRects,reinterpret_cast<TRect*>(rectList)); CleanupStack::Pop(rectList); return region; } void Panic(TWservPanic aPanic) { if (wsDebugLog) wsDebugLog->Panic(CDebugLogBase::EDummyConnectionId,aPanic); //Dummy value meaning WSERV _LIT(KWSERVInternalPanicCategory,"WSERV-INTERNAL"); User::Panic(KWSERVInternalPanicCategory,aPanic); } _LIT(KWSERVPanicDesc1,"WServ internal Panic %S, in file %S @ line %i"); _LIT(KWSERVPanicDesc2,"Assert condition = \"%S\""); void PanicWithInfo(TWservPanic aPanic, const TDesC& aFileName, const TDesC& aPanicName, TInt aLine) { TBuf<256> buf; buf.Format(KWSERVPanicDesc1, &aPanicName, &aFileName, aLine); RDebug::Print(buf); if (wsDebugLog) { wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant, buf); } Panic(aPanic); } void PanicWithCondAndInfo(TWservPanic aPanic, const TDesC& aCondition, const TDesC& aFileName, const TDesC& aPanicName, TInt aLine) { TBuf<256> buf; buf.Format(KWSERVPanicDesc1, &aPanicName, &aFileName, aLine); RDebug::Print(buf); if (wsDebugLog) { wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant, buf); } buf.Format(KWSERVPanicDesc2, &aCondition); RDebug::Print(buf); if (wsDebugLog) { wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant, buf); } Panic(aPanic); } GLDEF_C void StateDump() { CWsTop::StateDump(); } GLDEF_C void StateDump(CWsRootWindow* aRootWindow) { TBool enabled=wsDebugLog!=NULL; if (!enabled) { CWsTop::EnableLogging(); if (!wsDebugLog) return; // Failed to enable logging so give up } // _LIT(LogLine,"==========="); _LIT(KWSERVStateLogWindowTree,"Window tree"); TBuf<128> buf; wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant,LogLine); wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant,KWSERVStateLogWindowTree); wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant,LogLine); CWsWindowBase *win=aRootWindow; TInt inset=0; _LIT(KWSERVStateInsetLevelValue,"%*p"); FOREVER { buf.Format(KWSERVStateInsetLevelValue,Min(inset<<1,20)); win->StatusDump(buf); wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant,buf); if (win->BaseChild()) { ++inset; win=win->BaseChild(); continue; } while(!win->NextSibling() && win!=aRootWindow) { win=win->BaseParent(); --inset; } if (win==aRootWindow) break; //Will break here if there is only the root window or the tree walk has returned to it win=win->NextSibling(); } wsDebugLog->MiscMessage(CDebugLogBase::ELogImportant,LogLine); // if (!enabled) CWsTop::DisableLogging(); } GLDEF_C void HeapDump() { TBool enabled=(wsDebugLog!=NULL); if (!enabled) CWsTop::EnableLogging(); if (wsDebugLog) // Just in case enable failed wsDebugLog->HeapDump(); if (!enabled) CWsTop::DisableLogging(); } #if defined(_DEBUG) //GLREF_C void ForceLog(TInt aPriority,const TDesC &aText,TInt aParam=0); //ForceLog(CDebugLogBase::ELogImportant,_L("Value=%d"),345); //TLogMessageText buf; //_LIT(KLog,"Count=%d, Object=0x%x"); //buf.Format(KLog,Count(),this); //ForceLog(CDebugLogBase::ELogImportant,buf); GLDEF_C void ForceLog(TInt aPriority,const TDesC &aText,TInt aParam=0) { TBool enabled=(wsDebugLog!=NULL); if (!enabled) CWsTop::EnableLogging(); if (wsDebugLog) // Just in case enable failed { wsDebugLog->MiscMessage(aPriority,aText,aParam); if (!enabled) CWsTop::DisableLogging(); } } #endif