perfsrv/analyzetool/analyzetool_plat/analyzetool_api/inc/analyzetool/analyzetool.h
author hgs
Mon, 20 Sep 2010 12:20:18 +0300
changeset 52 c2f44e33b468
parent 51 98307c651589
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Declaration of the class RAnalyzeTool.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef __ANALYZETOOL_H__
hgs
parents:
diff changeset
    20
#define __ANALYZETOOL_H__
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDES
hgs
parents:
diff changeset
    23
#include <e32cmn.h>
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
//Version information for command line engine.
hgs
parents:
diff changeset
    26
//Tells the version of AT core componenets.
52
hgs
parents: 51
diff changeset
    27
//ANALYZETOOL_CORE_VERSION_FOR_CLE 1.10.1
51
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
// CONSTANTS
hgs
parents:
diff changeset
    30
inline TVersion KAnalyzeToolLddVersion() { return TVersion(1, 0, 1); }
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
/* The name of the analyze tool device driver*/
hgs
parents:
diff changeset
    33
_LIT( KAnalyzeToolLddName, "AToolKernelEventHandler" );
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
/* The priority of AnalyzeTool Dfc */
hgs
parents:
diff changeset
    36
const TInt KAnalyzeToolThreadPriority = 27;
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
/* The name of the AnalyzeTool DFC */
hgs
parents:
diff changeset
    39
_LIT8( KAnalyzeToolThreadName, "AnalyzeToolThreadDfc" );
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
/* The panic literal */
hgs
parents:
diff changeset
    42
_LIT( KClientPanic, "AnalyzeTool" );
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
//const TInt KATMaxCallstackLength = 20;
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
/* The device handler panic codes */
hgs
parents:
diff changeset
    47
enum TPanic
hgs
parents:
diff changeset
    48
	{
hgs
parents:
diff changeset
    49
	EPanicRequestPending,
hgs
parents:
diff changeset
    50
	EPanicNoRequestPending,
hgs
parents:
diff changeset
    51
	EPanicUnsupportedRequest
hgs
parents:
diff changeset
    52
	};
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
// Size of following must be multiple of 4 bytes.
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
class TMainThreadParams
hgs
parents:
diff changeset
    57
	{
hgs
parents:
diff changeset
    58
	public:
hgs
parents:
diff changeset
    59
		RAllocator* iAllocator;
hgs
parents:
diff changeset
    60
		TBool       iAlone;
hgs
parents:
diff changeset
    61
		TUint       iProcessId;
hgs
parents:
diff changeset
    62
	};
hgs
parents:
diff changeset
    63
typedef TPckgBuf<TMainThreadParams> TMainThreadParamsBuf;
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
class TLibraryInfo
hgs
parents:
diff changeset
    66
	{
hgs
parents:
diff changeset
    67
	public:
hgs
parents:
diff changeset
    68
		TBuf8<KMaxLibraryName> iLibraryName;
hgs
parents:
diff changeset
    69
		TLinAddr  iRunAddress;
hgs
parents:
diff changeset
    70
		TUint32   iSize;
hgs
parents:
diff changeset
    71
		TInt      iIndex;
hgs
parents:
diff changeset
    72
		TUint     iProcessId;
hgs
parents:
diff changeset
    73
	};
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
typedef TPckgBuf<TLibraryInfo> TLibraryInfoBuf;
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
class TCodesegInfo
hgs
parents:
diff changeset
    78
	{
hgs
parents:
diff changeset
    79
	public:
hgs
parents:
diff changeset
    80
		TBuf8<KMaxLibraryName> iFullName;
hgs
parents:
diff changeset
    81
		TLinAddr iRunAddress;
hgs
parents:
diff changeset
    82
		TUint32  iSize;
hgs
parents:
diff changeset
    83
		TInt  iIndex;
hgs
parents:
diff changeset
    84
		TUint iProcessId;
hgs
parents:
diff changeset
    85
		TInt  iCodesegIndex; 
hgs
parents:
diff changeset
    86
		TLinAddr iFileEntryPoint;
hgs
parents:
diff changeset
    87
		TInt     iFuntionCount;
hgs
parents:
diff changeset
    88
		TLibraryFunction iFirstFunction;
hgs
parents:
diff changeset
    89
		TModuleMemoryInfo iMemoryInfo;
hgs
parents:
diff changeset
    90
	};
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
typedef TPckgBuf<TCodesegInfo> TCodesegInfoBuf;
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
class TThreadParams
hgs
parents:
diff changeset
    95
	{		
hgs
parents:
diff changeset
    96
	public:
hgs
parents:
diff changeset
    97
	    TLinAddr iStackAddress;
hgs
parents:
diff changeset
    98
	    TInt iStackSize;
hgs
parents:
diff changeset
    99
	    TUint iThreadId;
hgs
parents:
diff changeset
   100
	};
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
typedef TPckgBuf<TThreadParams> TThreadParamsBuf;
hgs
parents:
diff changeset
   103
hgs
parents:
diff changeset
   104
class TProcessIdentityParams
hgs
parents:
diff changeset
   105
	{		
hgs
parents:
diff changeset
   106
	public:
hgs
parents:
diff changeset
   107
		TBuf8<KMaxProcessName> iProcessName;
hgs
parents:
diff changeset
   108
		TInt iDynamicCount;
hgs
parents:
diff changeset
   109
		TInt iCodesegCount;
hgs
parents:
diff changeset
   110
		TUint iProcessId;
hgs
parents:
diff changeset
   111
		TUint iThreadId;
hgs
parents:
diff changeset
   112
	    TLinAddr iStackAddress;
hgs
parents:
diff changeset
   113
	    TInt iStackSize;
hgs
parents:
diff changeset
   114
	};
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
typedef TPckgBuf<TProcessIdentityParams> TProcessIdentityParamsBuf;
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
class TLibraryEventInfo
hgs
parents:
diff changeset
   119
	{
hgs
parents:
diff changeset
   120
	public:
hgs
parents:
diff changeset
   121
		enum TLibraryEvent
hgs
parents:
diff changeset
   122
			{ 
hgs
parents:
diff changeset
   123
			ELibraryAdded = 0, 
hgs
parents:
diff changeset
   124
			ELibraryRemoved,
hgs
parents:
diff changeset
   125
			EKillThread 
hgs
parents:
diff changeset
   126
			};
hgs
parents:
diff changeset
   127
					
hgs
parents:
diff changeset
   128
	public:
hgs
parents:
diff changeset
   129
		TUint iProcessId;
hgs
parents:
diff changeset
   130
		TBuf8<KMaxLibraryName> iLibraryName;
hgs
parents:
diff changeset
   131
		TLinAddr iRunAddress;
hgs
parents:
diff changeset
   132
		TUint32 iSize;
hgs
parents:
diff changeset
   133
		TLibraryEvent iEventType;
hgs
parents:
diff changeset
   134
		TUint iThreadId;
hgs
parents:
diff changeset
   135
	};
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
typedef TPckgBuf<TLibraryEventInfo> TLibraryEventInfoBuf;
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
class TProcessHandleInfo
hgs
parents:
diff changeset
   140
	{
hgs
parents:
diff changeset
   141
	public:
hgs
parents:
diff changeset
   142
		TInt     iProcessHandleCount;
hgs
parents:
diff changeset
   143
		TInt     iThreadHandleCount;
hgs
parents:
diff changeset
   144
		TInt     iIndex;
hgs
parents:
diff changeset
   145
		TInt     iThreadCount;
hgs
parents:
diff changeset
   146
		TLinAddr iUserStackRunAddress;
hgs
parents:
diff changeset
   147
		TInt     iUserStackSize;
hgs
parents:
diff changeset
   148
		TUint    iProcessId;
hgs
parents:
diff changeset
   149
	};
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
typedef TPckgBuf<TProcessHandleInfo> TProcessHandleInfoBuf;
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
/**
hgs
parents:
diff changeset
   154
*  A class for particular process's current handle count
hgs
parents:
diff changeset
   155
*/
hgs
parents:
diff changeset
   156
class TATProcessHandles
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
    public:
hgs
parents:
diff changeset
   159
    
hgs
parents:
diff changeset
   160
        /** The ID of the process. */
hgs
parents:
diff changeset
   161
        TUint iProcessId;
hgs
parents:
diff changeset
   162
        
hgs
parents:
diff changeset
   163
        /** The number of current handles in the library. */
hgs
parents:
diff changeset
   164
        TInt iCurrentHandleCount;
hgs
parents:
diff changeset
   165
    };
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
typedef TPckgBuf<TATProcessHandles> TATProcessHandlesBuf;
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
class TClientCount
hgs
parents:
diff changeset
   170
    {
hgs
parents:
diff changeset
   171
    public:
hgs
parents:
diff changeset
   172
    
hgs
parents:
diff changeset
   173
        /** The count of clients */
hgs
parents:
diff changeset
   174
        TInt iClientCount;     
hgs
parents:
diff changeset
   175
    };
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
typedef TPckgBuf<TClientCount> TClientCountBuf;
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
class TATMemoryModel
hgs
parents:
diff changeset
   180
    {
hgs
parents:
diff changeset
   181
    public :
hgs
parents:
diff changeset
   182
        /* Memory model*/
hgs
parents:
diff changeset
   183
        TUint32 iMemoryModel;
hgs
parents:
diff changeset
   184
    };
hgs
parents:
diff changeset
   185
typedef TPckgBuf<TATMemoryModel> TATMemoryModelBuf;
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
// CLASS DECLARATION
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
/**
hgs
parents:
diff changeset
   190
*  The user-side handle to a logical channel which provides functions to 
hgs
parents:
diff changeset
   191
*  open a channel and to make requests to a analyze tool device driver. 
hgs
parents:
diff changeset
   192
*/
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
class RAnalyzeTool : public RBusLogicalChannel
hgs
parents:
diff changeset
   195
	{
hgs
parents:
diff changeset
   196
	
hgs
parents:
diff changeset
   197
	public:
hgs
parents:
diff changeset
   198
		
hgs
parents:
diff changeset
   199
	/** Enumeration of supported functions */
hgs
parents:
diff changeset
   200
	enum TBasicAnalyzerControl
hgs
parents:
diff changeset
   201
		{
hgs
parents:
diff changeset
   202
		EGetProcessInfo = 0, /* The process information */
hgs
parents:
diff changeset
   203
		EGetCodesegInfo,	 /* The codesegment information */
hgs
parents:
diff changeset
   204
		EGetLibraryInfo,     /* The library information */
hgs
parents:
diff changeset
   205
		EGetDynamicInfo,	 /* The count of dynamic code in the process */
hgs
parents:
diff changeset
   206
		ELibraryEvent,       /* Subscribe events from library events */
hgs
parents:
diff changeset
   207
		ECancelLibraryEvent, /* Cancel subscribetion of library events */
hgs
parents:
diff changeset
   208
		ECurrentClientCount,  /* The count of clients in device driver */
hgs
parents:
diff changeset
   209
		EMainThreadAlloctor,
hgs
parents:
diff changeset
   210
		EThreadStack,
hgs
parents:
diff changeset
   211
		EGetProcessHandle,	/* Gets process global handles info*/
hgs
parents:
diff changeset
   212
		EGetCurrentHandles, /* Get a process's current handle count */
hgs
parents:
diff changeset
   213
		EGetMemoryModel
hgs
parents:
diff changeset
   214
		};
hgs
parents:
diff changeset
   215
			
hgs
parents:
diff changeset
   216
#ifndef __KERNEL_MODE__
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
        /**
hgs
parents:
diff changeset
   219
        * Opens a handle to a logical channel.
hgs
parents:
diff changeset
   220
        * @return TInt Returns KErrNone, if successful or otherwise 
hgs
parents:
diff changeset
   221
        		  one of the other system-wide error codes
hgs
parents:
diff changeset
   222
        */
hgs
parents:
diff changeset
   223
		inline TInt Open();
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
        /**
hgs
parents:
diff changeset
   226
        * Acquires process information.
hgs
parents:
diff changeset
   227
        * @param aProcessIdentityParams The process information which 
hgs
parents:
diff changeset
   228
        								is filled by the device driver
hgs
parents:
diff changeset
   229
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   230
        			   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   231
        */
hgs
parents:
diff changeset
   232
		inline TInt GetProcessInfo( 
hgs
parents:
diff changeset
   233
				TProcessIdentityParamsBuf& aProcessIdentityParams );
hgs
parents:
diff changeset
   234
hgs
parents:
diff changeset
   235
        /**
hgs
parents:
diff changeset
   236
        * Acquires codeseg information.
hgs
parents:
diff changeset
   237
        * @param aCodesegInfo The codeseg information which 
hgs
parents:
diff changeset
   238
        					  is filled by the device driver
hgs
parents:
diff changeset
   239
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   240
        			   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   241
        */
hgs
parents:
diff changeset
   242
		inline TInt GetCodesegInfo( TCodesegInfoBuf& aCodesegInfo );
hgs
parents:
diff changeset
   243
		
hgs
parents:
diff changeset
   244
        /**
hgs
parents:
diff changeset
   245
        * Acquires library information.
hgs
parents:
diff changeset
   246
        * @param aLibraryInfo The library information which 
hgs
parents:
diff changeset
   247
        					  is filled by the device driver
hgs
parents:
diff changeset
   248
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   249
        			   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   250
        */
hgs
parents:
diff changeset
   251
		inline TInt GetLibraryInfo( TLibraryInfoBuf& aLibraryInfo );
hgs
parents:
diff changeset
   252
				
hgs
parents:
diff changeset
   253
        /**
hgs
parents:
diff changeset
   254
        * Subscribes library event.
hgs
parents:
diff changeset
   255
        * @param aStatus The request status object for this request. 
hgs
parents:
diff changeset
   256
        * @param aLibraryInfo The library information which 
hgs
parents:
diff changeset
   257
        					  is filled by the device driver
hgs
parents:
diff changeset
   258
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   259
        			   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   260
        */
hgs
parents:
diff changeset
   261
		inline void LibraryEvent( TRequestStatus& aStatus, 
hgs
parents:
diff changeset
   262
		                          TLibraryEventInfo& aLibraryInfo );
hgs
parents:
diff changeset
   263
		
hgs
parents:
diff changeset
   264
        /**
hgs
parents:
diff changeset
   265
        * Cancels subscribetion of the library event.
hgs
parents:
diff changeset
   266
        */
hgs
parents:
diff changeset
   267
		inline void CancelLibraryEvent();
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
        /**
hgs
parents:
diff changeset
   270
        * Acquires device driver current client count.
hgs
parents:
diff changeset
   271
        * @param aClientCount A reference to TInt which is 
hgs
parents:
diff changeset
   272
        				      updated by the device driver.
hgs
parents:
diff changeset
   273
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   274
        			   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   275
        */
hgs
parents:
diff changeset
   276
		inline TInt ClientCount( TClientCountBuf& aClientCount );
hgs
parents:
diff changeset
   277
		
hgs
parents:
diff changeset
   278
        /**
hgs
parents:
diff changeset
   279
        * Acquires process main thread RAllocator
hgs
parents:
diff changeset
   280
        * @param aMainThreadParams The main thread information which 
hgs
parents:
diff changeset
   281
        					        is filled by the device driver
hgs
parents:
diff changeset
   282
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   283
        			   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   284
        */	
hgs
parents:
diff changeset
   285
		inline TInt MainThreadAlloctor( TMainThreadParamsBuf& aMainThreadParams );
hgs
parents:
diff changeset
   286
		
hgs
parents:
diff changeset
   287
		/**
hgs
parents:
diff changeset
   288
		* Acquires main thread stack address.
hgs
parents:
diff changeset
   289
		* @param aThreadStack Pointer to the TThreadParams object.
hgs
parents:
diff changeset
   290
		* @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   291
					   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   292
		*/
hgs
parents:
diff changeset
   293
		inline TInt ThreadStack( TThreadParamsBuf& aThreadStack );
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
        /**
hgs
parents:
diff changeset
   296
        * Acquires information about process global handles.
hgs
parents:
diff changeset
   297
        * @param aProcessHandleInfo Pointer to the TProcessHandleInfo object.
hgs
parents:
diff changeset
   298
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   299
        			   otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   300
        */
hgs
parents:
diff changeset
   301
		inline TInt GetProcessHandleInfo( TProcessHandleInfoBuf& aProcessHandleInfo );
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
        /**
hgs
parents:
diff changeset
   304
        * Acquires a process's current handle count.
hgs
parents:
diff changeset
   305
        * @param aProcessHandles Pointer to the TATProcessHandles object.
hgs
parents:
diff changeset
   306
        * @return TInt Returns KErrNone, if successful
hgs
parents:
diff changeset
   307
                       otherwise one of the other system-wide error codes
hgs
parents:
diff changeset
   308
        */
hgs
parents:
diff changeset
   309
        inline TInt GetCurrentHandleCount( TATProcessHandlesBuf& aProcessHandles );
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
        /**
hgs
parents:
diff changeset
   312
         * Acquires memory model system uses.
hgs
parents:
diff changeset
   313
         * @param aMemoryModel pointer to the TATMemoryModelBuf object.
hgs
parents:
diff changeset
   314
         */
hgs
parents:
diff changeset
   315
        inline TInt GetMemoryModel( TATMemoryModelBuf& aMemoryModel );
hgs
parents:
diff changeset
   316
        
hgs
parents:
diff changeset
   317
#endif // #ifndef __KERNEL_MODE__
hgs
parents:
diff changeset
   318
	};
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
// INLINES
hgs
parents:
diff changeset
   321
#include <analyzetool/analyzetool.inl>
hgs
parents:
diff changeset
   322
hgs
parents:
diff changeset
   323
#endif // #ifndef __ANALYZETOOL_H__
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
// End of File