1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/kernel/eka/debug/crashMonitor/src/scmlockdata.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,190 @@
1.4 +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// e32\debug\crashMonitor\src\scmlockdata.cpp
1.18 +// some utility classes for writing data to flash buffer
1.19 +//
1.20 +//
1.21 +
1.22 +/**
1.23 + @file
1.24 + @internalTechnology
1.25 +*/
1.26 +
1.27 +
1.28 +#include <scmdatatypes.h>
1.29 +
1.30 +namespace Debug
1.31 + {
1.32 +
1.33 + /**
1.34 + * TSCMLockData constructor
1.35 + * @param none
1.36 + */
1.37 + TSCMLockData::TSCMLockData()
1.38 + : iId(ESCMLocks)
1.39 + , iMutexHoldCount(-1)
1.40 + , iMutexThreadWaitCount(-1)
1.41 + {
1.42 + }
1.43 +
1.44 + /**
1.45 + * TSCMLockData Serialize
1.46 + * @param aWriter byte stream to use
1.47 + * @return N/A
1.48 + */
1.49 + TInt TSCMLockData::Serialize(TByteStreamWriter& aWriter)
1.50 + {
1.51 + TInt startPos = aWriter.CurrentPosition();
1.52 +
1.53 + // ID saved first
1.54 + if(iId != ESCMLocks)
1.55 + {
1.56 + CLTRACE("TSCMLockData::Serialize Corrupt ID");
1.57 + return KErrCorrupt;
1.58 + }
1.59 +
1.60 + // write id first
1.61 + aWriter.WriteInt(iId); // 4
1.62 + // 2 counts written as shorts (should be enough range!)
1.63 + aWriter.WriteShort((TInt16) iMutexHoldCount); // 2
1.64 + aWriter.WriteShort((TInt16) iMutexThreadWaitCount); // 2
1.65 + aWriter.WriteShort((TInt16) iLockCount); // 2
1.66 +
1.67 +
1.68 + TInt endPos = aWriter.CurrentPosition();
1.69 + if( endPos - startPos != GetSize())
1.70 + {
1.71 + // error between actual size & real size in data
1.72 + CLTRACE("TSCMLockData::Serialize serialization size error");
1.73 + return KErrCorrupt;
1.74 + }
1.75 +
1.76 + return KErrNone;
1.77 + }
1.78 +
1.79 + /**
1.80 + * Reads the classes data from the specified byte stream
1.81 + * @param aReader Byte stream to use
1.82 + * @return void
1.83 + */
1.84 + TInt TSCMLockData::Deserialize(TByteStreamReader& aReader)
1.85 + {
1.86 + TInt startPos = aReader.CurrentPosition();
1.87 +
1.88 + iId = (SCMStructId)aReader.ReadInt(); // 4
1.89 + if(iId != ESCMLocks)
1.90 + {
1.91 + CLTRACE("TSCMLockData::Deserialize Corrupt ID read");
1.92 + return KErrCorrupt;
1.93 + }
1.94 +
1.95 + iMutexHoldCount = (TInt) aReader.ReadShort();
1.96 + iMutexThreadWaitCount = (TInt) aReader.ReadShort();
1.97 + iLockCount = (TInt) aReader.ReadShort();
1.98 +
1.99 +
1.100 + TInt endPos = aReader.CurrentPosition();
1.101 + if( endPos - startPos != GetSize())
1.102 + {
1.103 + CLTRACE("TSCMLockData::Deserialize size error");
1.104 + return KErrCorrupt;
1.105 + }
1.106 + return KErrNone;
1.107 + }
1.108 +
1.109 + /**
1.110 + * Returns the externalised size of this class
1.111 + * @return TInt size
1.112 + */
1.113 + TInt TSCMLockData::GetSize() const
1.114 + {
1.115 + return KSCMLockDataMaxSize;
1.116 + }
1.117 +
1.118 + /**
1.119 + * MutexHoldCount
1.120 + * @param none
1.121 + * @return mutex hold count
1.122 + */
1.123 + TInt TSCMLockData::MutexHoldCount() const
1.124 + {
1.125 + return iMutexHoldCount;
1.126 + }
1.127 +
1.128 + /**
1.129 + * SetMutexHoldCount
1.130 + * @param
1.131 + * @return
1.132 + */
1.133 + void TSCMLockData::SetMutexHoldCount(TInt aMutexHoldCount)
1.134 + {
1.135 + iMutexHoldCount = aMutexHoldCount;
1.136 + }
1.137 +
1.138 + /**
1.139 + * MutexThreadWaitCount
1.140 + * @param none
1.141 + * @return number of threads waiting on held mutex - will only be valid if
1.142 + * MutexHoldCount > 0
1.143 + */
1.144 + TInt TSCMLockData::MutexThreadWaitCount() const
1.145 + {
1.146 + return iMutexThreadWaitCount;
1.147 + }
1.148 +
1.149 + /**
1.150 + * SetMutexThreadWaitCount
1.151 + * @param TInt - number of threads waiting on held mutex(es)
1.152 + * @return void
1.153 + */
1.154 + void TSCMLockData::SetMutexThreadWaitCount(TInt aMutexThreadWaitCount)
1.155 + {
1.156 + iMutexThreadWaitCount = aMutexThreadWaitCount;
1.157 + }
1.158 +
1.159 + /**
1.160 + * LockCount
1.161 + * @param none
1.162 + * @return TIOnt - the lock count
1.163 + */
1.164 + TInt TSCMLockData::LockCount() const
1.165 + {
1.166 + return iLockCount;
1.167 + }
1.168 +
1.169 + /**
1.170 + * SetLockCount
1.171 + * @param TInt - number of locks held
1.172 + * @return void
1.173 + */
1.174 + void TSCMLockData::SetLockCount(TInt aLockCount)
1.175 + {
1.176 + iLockCount = aLockCount;
1.177 + }
1.178 +
1.179 + TBool TSCMLockData::operator == (const TSCMLockData& aOther) const
1.180 + {
1.181 + return ( iId == aOther.iId &&
1.182 + iMutexHoldCount == aOther.iMutexHoldCount &&
1.183 + iMutexThreadWaitCount == aOther.iMutexThreadWaitCount &&
1.184 + iLockCount == aOther.iLockCount );
1.185 + }
1.186 +
1.187 + TBool TSCMLockData::operator != (const TSCMLockData& aOther) const
1.188 + {
1.189 + return !(*this == aOther);
1.190 + }
1.191 + }
1.192 +
1.193 +