--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sql/SRC/Server/SqlSrvResourceProfiler.h Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,170 @@
+// 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:
+//
+
+#ifndef __SQLSRVRESOURCEPROFILER_H__
+#define __SQLSRVRESOURCEPROFILER_H__
+
+#include <e32cmn.h>
+#include "SqlUtil.h"
+
+#ifdef _SQLPROFILER
+
+///////////////////////////////// Heap max alloc /////////////////////////////////////
+
+extern TBool TheSqlSrvProfilerMaxAllocEnabled;
+extern TInt TheSqlSrvProfilerMaxAllocSize;
+
+#define SQLPROFILER_REPORT_ALLOC(size) \
+ do \
+ { \
+ if(TheSqlSrvProfilerMaxAllocEnabled && (size) > TheSqlSrvProfilerMaxAllocSize) \
+ { \
+ TheSqlSrvProfilerMaxAllocSize = (size); \
+ } \
+ } \
+ while(0)
+
+///////////////////////////////// IPC counters ///////////////////////////////////////
+
+enum TSqlIpcType
+ {
+ ESqlIpcRq,
+ ESqlIpcRead,
+ ESqlIpcWrite,
+ //
+ ESqlIpcLast
+ };
+
+extern TBool TheSqlSrvProfilerIpcEnabled;
+extern TInt TheSqlSrvProfilerIpc[];
+extern TInt64 TheSqlSrvProfilerIpcBytes[];
+
+#define SQLPROFILER_REPORT_IPC(type, bytes) \
+ do \
+ { \
+ if(TheSqlSrvProfilerIpcEnabled) \
+ { \
+ ++TheSqlSrvProfilerIpc[type]; \
+ TheSqlSrvProfilerIpcBytes[type] += bytes; \
+ } \
+ } \
+ while(0)
+
+////////////////////////// IPC & SQL tracing related /////////////////////////////////
+
+//Every time, when the SQL server starts, the time is stored in TheSqlSrvStartTime variable.
+//It is used later to calculate and trace the time offset of particular trace.
+extern TTime TheSqlSrvStartTime;
+
+//Level 1 IPC calls count. IPC calls types included:
+// ESqlSrvDbExec8, ESqlSrvDbExec16, ESqlSrvDbScalarFullSelect16, ESqlSrvStmtExec,
+// ESqlSrvStmtAsyncExec, ESqlSrvStmtBindExec, ESqlSrvStmtAsyncBindExec, ESqlSrvStmtNext,
+// ESqlSrvStmtBindNext;
+const TInt KIpcTraceTypeCount = 10;
+
+//A TSqlIpcTraceData array of KIpcTraceTypeCount elements is a member of the CSqlSrvSession class.
+//During the tracing, if level 1 or level 2 is enabled, all relevant information is summarized there.
+struct TSqlSrvIpcTraceData
+ {
+ TInt64 iExecutionTime; //The summary of the execution time spent in particular level 1 IPC call
+ TInt iCount; //The IPC call count for particular level 1 call
+ };
+
+/////////////////// IPC & SQL tracing functions and macros ///////////////////////////////
+
+void SqlIpcStart(TUint& aIpcCounter, TUint32& aStartTicks, TUint aDbHandle);
+void SqlIpcEnd(TUint aIpcCounter, TUint32 aStartTicks, TSqlSrvFunction aFuncCode,
+ TUint aDbHandle, TSqlSrvIpcTraceData aIpcTraceData[], TInt aRetCode);
+void SqlIpcError(TUint aIpcCounter, TSqlSrvFunction aFuncCode, TUint aDbHandle, TInt aError);
+void SqlPrintSql16(TUint aDbHandle, const TDesC& aSql, TBool aPrepare);
+void SqlPrintSql8(TUint aDbHandle, const TDesC8& aSql, TBool aPrepare);
+
+void SqlPrintDbCreate(TUint aDbHandle, const TDesC& aDbName);
+void SqlPrintDbOpen(TUint aDbHandle, const TDesC& aDbName);
+void SqlPrintDbClose(TUint aDbHandle);
+
+void SqlPrintServerStart();
+void SqlPrintServerStop();
+
+#define SQLPROFILER_IPC_START(aIpcCounter, aDbHandle) \
+ TUint32 startTicks = 0;\
+ SqlIpcStart(aIpcCounter, startTicks, aDbHandle)
+
+#define SQLPROFILER_IPC_END(aIpcCounter, aFuncCode, aDbHandle, aIpcTraceData, aRetCode) \
+ SqlIpcEnd(aIpcCounter, startTicks, aFuncCode, aDbHandle, aIpcTraceData, aRetCode)
+
+#define SQLPROFILER_IPC_ERROR(aIpcCounter, aFuncCode, aDbHandle, aError) \
+ SqlIpcError(aIpcCounter, aFuncCode, aDbHandle, aError)
+
+#define SQLPROFILER_SQL16_PRINT(aDbHandle, aSql, aPrepare) \
+ SqlPrintSql16(aDbHandle, aSql, aPrepare)
+
+#define SQLPROFILER_SQL8_PRINT(aDbHandle, aSql, aPrepare) \
+ SqlPrintSql8(aDbHandle, aSql, aPrepare)
+
+#define SQLPROFILER_DB_CREATE(aDbHandle, aDbName) \
+ SqlPrintDbCreate(aDbHandle, aDbName)
+
+#define SQLPROFILER_DB_OPEN(aDbHandle, aDbName) \
+ SqlPrintDbOpen(aDbHandle, aDbName)
+
+#define SQLPROFILER_DB_CLOSE(aDbHandle) \
+ SqlPrintDbClose(aDbHandle)
+
+#define SQLPROFILER_SERVER_START() \
+ SqlPrintServerStart()
+
+#define SQLPROFILER_SERVER_STOP() \
+ SqlPrintServerStop()
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+#else//_SQLPROFILER
+
+#define SQLPROFILER_REPORT_ALLOC(size) do {} while(0)
+#define SQLPROFILER_REPORT_IPC(type, bytes) do {} while(0)
+
+#define SQLPROFILER_IPC_START(aIpcCounter, aDbHandle) do {} while(0)
+#define SQLPROFILER_IPC_END(aIpcCounter, aFuncCode, aDbHandle, aIpcTraceData, aRetCode) do {} while(0)
+#define SQLPROFILER_IPC_ERROR(aIpcCounter, aFuncCode, aDbHandle, aError) do {} while(0)
+#define SQLPROFILER_SQL16_PRINT(aDbHandle, aSql, aPrepare) do {} while(0)
+#define SQLPROFILER_SQL8_PRINT(aDbHandle, aSql, aPrepare) do {} while(0)
+
+#define SQLPROFILER_DB_CREATE(aDbHandle, aDbName) do {} while(0)
+#define SQLPROFILER_DB_OPEN(aDbHandle, aDbName) do {} while(0)
+#define SQLPROFILER_DB_CLOSE(aDbHandle) do {} while(0)
+
+#define SQLPROFILER_SERVER_START() do {} while(0)
+#define SQLPROFILER_SERVER_STOP() do {} while(0)
+
+#endif//_SQLPROFILER
+
+/**
+This class can be used for collecting information regarding the SQL server resources usage.
+
+@see TSqlResourceProfiler
+@internalComponent
+*/
+NONSHARABLE_CLASS(TSqlSrvResourceProfiler)
+ {
+public:
+ static void StartL(const RMessage2&);
+ static void StopL(const RMessage2&);
+ static void ResetL(const RMessage2&);
+ static void QueryL(const RMessage2&);
+
+ };
+
+#endif//__SQLSRVRESOURCEPROFILER_H__