--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Client/SqlResourceProfiler.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,156 @@
+// Copyright (c) 2008-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 "SqlResourceProfiler.h"
+#include "SqlPanic.h"
+#include "SqlDatabaseImpl.h"
+
+
+/**
+Initializes TSqlResourceProfiler data members with their default values.
+
+@param aDatabase The RSqlDatabase object that will be profiled.
+*/
+EXPORT_C TSqlResourceProfiler::TSqlResourceProfiler(RSqlDatabase& aDatabase) :
+ iDatabase(aDatabase)
+ {
+ }
+
+#ifdef _SQLPROFILER
+
+/**
+Starts the specified profiling counter.
+
+@param aCounterType Profiling counter type.
+@param aPrm Additional profiling parameters.
+
+@capability None
+
+@return KErrNone, the operation completed successfully;
+ One of the other system-wide error codes may also be returned.
+
+Usage of the IPC call arguments:
+ - Arg 0: [out] profiling counter type, one of the TSqlResourceProfiler::TSqlCounter enum item values.
+
+When the counter type is ESqlCounterTrace, then the optional aPrm argument can contain the follwing
+configuration parameters, split with ";":
+ - "L0" - [default] tracing level 0. IPC traces disabled;
+ - "L1" - tracing level 1. Only the most important IPC calls are traced:
+ ESqlSrvDbExec8, ESqlSrvDbExec16, ESqlSrvDbScalarFullSelect16, ESqlSrvStmtExec,
+ ESqlSrvStmtAsyncExec, ESqlSrvStmtBindExec, ESqlSrvStmtAsyncBindExec, ESqlSrvStmtNext,
+ ESqlSrvStmtBindNext;
+ - "L2" - tracing level 2. All IPC calls traced;
+ - "S0" - [default] SQL statement tracing is off;
+ - "S1" - SQL statement tracing is on;
+*/
+EXPORT_C TInt TSqlResourceProfiler::Start(TSqlResourceProfiler::TSqlCounter aCounterType, const TDesC8* aPrm)
+ {
+ TIpcArgs ipcArgs;
+ ipcArgs.Set(0, aCounterType);
+ ipcArgs.Set(1, 0);
+ if(aPrm)
+ {
+ ipcArgs.Set(1, aPrm->Length());
+ ipcArgs.Set(2, aPrm);
+ }
+ return iDatabase.Impl().Session().SendReceive(ESqlSrvProfilerStart, ipcArgs);
+ }
+
+/**
+Stops the specified profiling counter.
+
+@param aCounterType Profiling counter type.
+
+@capability None
+
+@return KErrNone, the operation completed successfully;
+ One of the other system-wide error codes may also be returned.
+
+Usage of the IPC call arguments:
+ - Arg 0: [out] profiling counter type, one of the TSqlResourceProfiler::TSqlCounter enum item values.
+*/
+EXPORT_C TInt TSqlResourceProfiler::Stop(TSqlResourceProfiler::TSqlCounter aCounterType)
+ {
+ return iDatabase.Impl().Session().SendReceive(ESqlSrvProfilerStop, TIpcArgs(aCounterType));
+ }
+
+/**
+Sets to zero the specified profiling counter.
+
+@param aCounterType Profiling counter type.
+
+@capability None
+
+@return KErrNone, the operation completed successfully;
+ One of the other system-wide error codes may also be returned.
+
+Usage of the IPC call arguments:
+ - Arg 0: [out] profiling counter type, one of the TSqlResourceProfiler::TSqlCounter enum item values.
+*/
+EXPORT_C TInt TSqlResourceProfiler::Reset(TSqlResourceProfiler::TSqlCounter aCounterType)
+ {
+ return iDatabase.Impl().Session().SendReceive(ESqlSrvProfilerReset, TIpcArgs(aCounterType));
+ }
+
+/**
+Retrieves the profiling counter(s) values for the aCounterType.
+
+@param aCounterType Profiling counter type.
+@param aResult Buffer, where the results will be copied.
+
+@capability None
+
+@return KErrNone, the operation completed successfully;
+ One of the other system-wide error codes may also be returned.
+
+@see TSqlResourceProfiler
+
+Usage of the IPC call arguments:
+ - Arg 0: [out] profiling counter type, one of the TSqlResourceProfiler::TSqlCounter enum item values.
+ - Arg 1: [out] the size of the buffer for the profiling counters
+ - Arg 2: [in] the buffer for the profiling counters
+*/
+EXPORT_C TInt TSqlResourceProfiler::Query(TSqlResourceProfiler::TSqlCounter aCounterType, TDes8& aResult)
+ {
+ return iDatabase.Impl().Session().SendReceive(ESqlSrvProfilerQuery, TIpcArgs(aCounterType, aResult.MaxLength(), &aResult));
+ }
+
+#else //_SQLPROFILER
+
+EXPORT_C TInt TSqlResourceProfiler::Start(TSqlResourceProfiler::TSqlCounter, const TDesC8*)
+ {
+ return KErrNotSupported;
+ }
+
+EXPORT_C TInt TSqlResourceProfiler::Stop(TSqlResourceProfiler::TSqlCounter)
+ {
+ return KErrNotSupported;
+ }
+
+EXPORT_C TInt TSqlResourceProfiler::Reset(TSqlResourceProfiler::TSqlCounter)
+ {
+ return KErrNotSupported;
+ }
+
+EXPORT_C TInt TSqlResourceProfiler::Query(TSqlResourceProfiler::TSqlCounter aCounterType, TDes8& aResult)
+ {
+ if(aCounterType == TSqlResourceProfiler::ESqlCounterConfig)
+ {
+ return iDatabase.Impl().Session().SendReceive(ESqlSrvProfilerQuery, TIpcArgs(aCounterType, aResult.MaxLength(), &aResult));
+ }
+ return KErrNotSupported;
+ }
+
+#endif//_SQLPROFILER