--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/centralrepository/cenrepsrv/srvperf.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,149 @@
+// Copyright (c) 2005-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:
+//
+
+#include "srvPerf.h"
+
+#ifdef __CENTREP_SERVER_PERFTEST__
+
+#include "srvreqs.h"
+#include "srvsubsess.h"
+
+// SessionClose
+// Decrement reference count. If no more active sessions
+// then advance iLastCompleteAccess
+void TCentRepPerfTest::SessionClose()
+ {
+ iActiveSessionCount--;
+ // There are clients who never close their sessions. Hence
+ // cannot use iActiveSessionCount == 0 as indication to copy
+ // iCount to iLastCompleteAccess.
+
+ if (!IsFinished())
+ {
+ iLastCompleteAccess = iCount;
+ }
+ }
+
+// Append
+// Add the integer if iEntries array is not full yet.
+TInt TCentRepPerfTest::Append(TUint32 aEntry)
+ {
+ if (iCount < KCentRepPerfTestArraySize)
+ {
+ iEntries[iCount++] = aEntry;
+ return KErrNone;
+ }
+ return KErrOverflow;
+ }
+
+// Function EncodeEventAndData
+// Put event Id in upper 8 bit and data in lower 24 bit.
+inline
+TUint32 EncodeEventAndData(TUint aEventId, TUint32 aData)
+ {
+ return ((aEventId & KEventIdMask) << KEventIdShiftBits) |
+ (aData & KDataMask);
+ }
+
+// Save initial values of timer
+void TCentRepPerfTest::DoEventStart(CServerSubSession* aSubSession, const TClientRequest& /*aMessage*/)
+ {
+ if(IsFinished())
+ {
+ return;
+ }
+
+ //set the uid of the repository that this operation will be
+ //performed on as the current repository
+ if(aSubSession) //aSubSession would be NULL in the case of EInitialise and EClose operations
+ {
+ SetCurrentRepositoryUid(aSubSession->RepositoryUid().iUid);
+ }
+
+ iStartTick = User::FastCounter();
+ }
+
+// Save initial values of timer
+void TCentRepPerfTest::DoServerStart()
+ {
+ iStartTick = User::FastCounter();
+ }
+
+// store time of event, etc. in performance array
+void TCentRepPerfTest::DoServerEnd()
+ {
+ TUint32 endTick = User::FastCounter();
+
+ TServerRequest fn = EInitialiseServer;
+ TUint32 entry = EncodeEventAndData(fn, endTick - iStartTick);
+ Append(entry);
+ }
+
+// store time of event, etc. in performance array
+void TCentRepPerfTest::DoEventEnd(CServerSubSession* /*aSubSession*/, const TClientRequest& aMessage)
+ {
+ TUint32 endTick = User::FastCounter();
+
+ if (IsFinished())
+ {
+ return;
+ }
+
+ TServerRequest fn = static_cast<TServerRequest>(aMessage.Function());
+ // Performance data has 3 parts. First: time spent to
+ // service the request. 2nd if event is open/close/evict
+ // time of the event. 3rd, if open/close/evict repository UID
+
+ // First part: event ID and CPU time spent servicing the request
+ TUint32 entry = EncodeEventAndData(fn, endTick - iStartTick);
+ Append(entry);
+
+ if (fn == EInitialise)
+ {
+ SessionOpen();
+
+ //store the repository UID in the subsession so that we can refer to it later
+ SetCurrentRepositoryUid(aMessage.Int0());
+ }
+
+ //get the uid of the repository that this operation is being performed on
+ TUint32 currentRepositoryUid = CurrentRepositoryUid();
+
+ TBool repOpenCloseEvict = fn == EInitialise || fn == EClose || fn == EEvict;
+
+ // Third part: repository UID if event is open/close/evict.
+ if (repOpenCloseEvict)
+ {
+ Append(iStartTick);
+ Append(currentRepositoryUid); // Append will check if array IsFull.
+ }
+
+ // One last thing to do: check if all concurrent sessions close.
+ if (fn == EClose)
+ {
+ SessionClose();
+
+ // This is a temporary solution to detect end-of-boot until SS code is
+ // modified to return end-of-boot state and Centrep becomes SSA
+ if (currentRepositoryUid == 0xCCCCCC00)
+ {
+ IncEndOfBoot();
+ }
+ }
+ }
+
+
+#endif //__CENTREP_SERVER_PERFTEST__
+