diff -r 000000000000 -r 08ec8eefde2f persistentstorage/sql/SRC/Server/SqlSrvResourceProfiler.h --- /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 +#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__