perfsrv/analyzetool/commandlineengine/inc/CATDatParser.h
author Andrew Haigh <andrew.haigh@nokia.com>
Mon, 25 Oct 2010 17:58:04 +0100
branchBUG 3869 Reference XTI device driver for Open System Trace
changeset 60 e54443a6878c
parent 51 98307c651589
permissions -rw-r--r--
start BUG 3869 Reference XTI device driver for Open System Trace
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20
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:  Defines CATDatParser class and its used enumerations.
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 __CATDatParser_H__
hgs
parents:
diff changeset
    20
#define __CATDatParser_H__
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// Includes.
hgs
parents:
diff changeset
    23
#include "ATCommonDefines.h"
hgs
parents:
diff changeset
    24
#include "CATBase.h"
hgs
parents:
diff changeset
    25
#include "CATDataSaver.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// Forward declarations.
hgs
parents:
diff changeset
    28
class CATModule2;
hgs
parents:
diff changeset
    29
class CATMemoryAddress;
hgs
parents:
diff changeset
    30
class CATRomSymbol;
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
/**
hgs
parents:
diff changeset
    33
* Provides the analyze feature for AnalyzeTool specific data file.
hgs
parents:
diff changeset
    34
* Is used by CATProject. Uses CATModule2 and/or CATRomSymbol to locate symbols or
hgs
parents:
diff changeset
    35
* codelines of memory addressses. Uses CATDataSaver to create report.
hgs
parents:
diff changeset
    36
*/
hgs
parents:
diff changeset
    37
class CATDatParser : public CATBase
hgs
parents:
diff changeset
    38
{
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
public:
hgs
parents:
diff changeset
    41
	/**
hgs
parents:
diff changeset
    42
	* enumeration representing the "mode" depending on build system
hgs
parents:
diff changeset
    43
	*/
hgs
parents:
diff changeset
    44
	enum ANALYZE_MODE
hgs
parents:
diff changeset
    45
	{
hgs
parents:
diff changeset
    46
		SBS_1 = 0,
hgs
parents:
diff changeset
    47
		SBS_2 = 1
hgs
parents:
diff changeset
    48
	};
hgs
parents:
diff changeset
    49
	/**
hgs
parents:
diff changeset
    50
	* Representing current process state
hgs
parents:
diff changeset
    51
	*/
hgs
parents:
diff changeset
    52
	enum PROCESS_STATE
hgs
parents:
diff changeset
    53
	{
hgs
parents:
diff changeset
    54
		not_started = 0,
hgs
parents:
diff changeset
    55
		ongoing = 1,
hgs
parents:
diff changeset
    56
		stopped = 2
hgs
parents:
diff changeset
    57
	};
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
	/**
hgs
parents:
diff changeset
    60
	* Constructor.
hgs
parents:
diff changeset
    61
	*/
hgs
parents:
diff changeset
    62
	CATDatParser();
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
#ifndef MODULE_TEST
hgs
parents:
diff changeset
    65
private:
hgs
parents:
diff changeset
    66
#endif
hgs
parents:
diff changeset
    67
	/**
hgs
parents:
diff changeset
    68
	* Real constructor.
hgs
parents:
diff changeset
    69
	*/
hgs
parents:
diff changeset
    70
	void Construct();
hgs
parents:
diff changeset
    71
	
hgs
parents:
diff changeset
    72
	/**
hgs
parents:
diff changeset
    73
	* Prevent copy
hgs
parents:
diff changeset
    74
	*/
hgs
parents:
diff changeset
    75
	CATDatParser& operator =( const CATDatParser& /*other*/ ) { }
hgs
parents:
diff changeset
    76
	CATDatParser( const CATDatParser& /*other*/ ) { }
hgs
parents:
diff changeset
    77
	
hgs
parents:
diff changeset
    78
public:
hgs
parents:
diff changeset
    79
	/**
hgs
parents:
diff changeset
    80
	* Constructor for SBS2
hgs
parents:
diff changeset
    81
	* @param pModules pointer to vector containing project modules
hgs
parents:
diff changeset
    82
	*/
hgs
parents:
diff changeset
    83
	CATDatParser( vector<CATModule2*>* pModules );
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
	/**
hgs
parents:
diff changeset
    86
	* Destructor
hgs
parents:
diff changeset
    87
	*/
hgs
parents:
diff changeset
    88
	~CATDatParser();
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
	/**
hgs
parents:
diff changeset
    91
	* Set offset to be used with mapfiles
hgs
parents:
diff changeset
    92
	* @param iOffSet
hgs
parents:
diff changeset
    93
	*/
hgs
parents:
diff changeset
    94
	void SetOffSet( int iOffSet );
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
	/**
hgs
parents:
diff changeset
    97
	* Get offset value
hgs
parents:
diff changeset
    98
	* @return int
hgs
parents:
diff changeset
    99
	*/
hgs
parents:
diff changeset
   100
	int GetOffSet( ) const;
hgs
parents:
diff changeset
   101
	
hgs
parents:
diff changeset
   102
	/**
hgs
parents:
diff changeset
   103
	* Analyze data file set
hgs
parents:
diff changeset
   104
	* This method includes try/catch in parsing
hgs
parents:
diff changeset
   105
	* @return int error codes specified in CATProject (0=OK)
hgs
parents:
diff changeset
   106
	*/
hgs
parents:
diff changeset
   107
	int Analyze();
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
	/**
hgs
parents:
diff changeset
   110
	* Set log level
hgs
parents:
diff changeset
   111
	* @param iLogLevel
hgs
parents:
diff changeset
   112
	*/
hgs
parents:
diff changeset
   113
	void SetLogLevel(int iLogLevel);
hgs
parents:
diff changeset
   114
	/**
hgs
parents:
diff changeset
   115
	* Get Log level
hgs
parents:
diff changeset
   116
	* @return int
hgs
parents:
diff changeset
   117
	*/
hgs
parents:
diff changeset
   118
	int GetLogLevel() const ;
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
	/**
hgs
parents:
diff changeset
   121
	* Set data file to be analyzed
hgs
parents:
diff changeset
   122
	* @param sInputFile
hgs
parents:
diff changeset
   123
	*/
hgs
parents:
diff changeset
   124
	void SetInputFile(const string& sInputFile);
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
	/**
hgs
parents:
diff changeset
   127
	* Set output file
hgs
parents:
diff changeset
   128
	* @param sOutputFile
hgs
parents:
diff changeset
   129
	*/
hgs
parents:
diff changeset
   130
	void SetOutputFile(const string& sOutputFile);
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
	/**
hgs
parents:
diff changeset
   133
	* Set rom symbol file(s).
hgs
parents:
diff changeset
   134
	* @param sRomSymbolFile
hgs
parents:
diff changeset
   135
	*/
hgs
parents:
diff changeset
   136
	void SetRomSymbolFiles(const vector<string>& vRomSymbolFile);
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
	/**
hgs
parents:
diff changeset
   139
	* Set print flag
hgs
parents:
diff changeset
   140
	* @param pPringFlag
hgs
parents:
diff changeset
   141
	*/
hgs
parents:
diff changeset
   142
	void SetPringFlag( bool bPrintFlag );
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
	/**
hgs
parents:
diff changeset
   145
	* Set addr2line.exe pinpoint state
hgs
parents:
diff changeset
   146
	* @param bInput
hgs
parents:
diff changeset
   147
	*/
hgs
parents:
diff changeset
   148
	void SetAddr2lineExeState( bool bInput );
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
	/**
hgs
parents:
diff changeset
   151
	* Set project platform.
hgs
parents:
diff changeset
   152
	* @param sPlatform platform.
hgs
parents:
diff changeset
   153
	*/
hgs
parents:
diff changeset
   154
	void SetProjectPlatform( const string& sPlatform );
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
	/**
hgs
parents:
diff changeset
   157
	* Set projects build type. Use enumeration defined in CATProject.
hgs
parents:
diff changeset
   158
	* @param eBuildType.
hgs
parents:
diff changeset
   159
	*/
hgs
parents:
diff changeset
   160
	void SetProjectBuildType( int eBuildType );
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
#ifndef MODULE_TEST
hgs
parents:
diff changeset
   163
private:
hgs
parents:
diff changeset
   164
#endif
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
	/**
hgs
parents:
diff changeset
   167
	* Start parsing datafile
hgs
parents:
diff changeset
   168
	* @return error codes defined in CATProject
hgs
parents:
diff changeset
   169
	*/
hgs
parents:
diff changeset
   170
	int Parse();
hgs
parents:
diff changeset
   171
	
hgs
parents:
diff changeset
   172
	/**
hgs
parents:
diff changeset
   173
	* Helper functio to print header of report
hgs
parents:
diff changeset
   174
	*/
hgs
parents:
diff changeset
   175
	void Header();
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
	/**
hgs
parents:
diff changeset
   178
	* Helper functio to print footer of report
hgs
parents:
diff changeset
   179
	*/
hgs
parents:
diff changeset
   180
	void Footer();
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
	/**
hgs
parents:
diff changeset
   183
	* Helper function reseting/clearing all
hgs
parents:
diff changeset
   184
	* member variables related to parsing
hgs
parents:
diff changeset
   185
	*/
hgs
parents:
diff changeset
   186
	void ClearParsingVariables();
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
	// Helpers for data file tags
hgs
parents:
diff changeset
   189
	bool ParseProcessStart( string& sLine );
hgs
parents:
diff changeset
   190
	bool ParseDllLoad( string& sLine );
hgs
parents:
diff changeset
   191
	bool ParseDllUnload( string& sLine );
hgs
parents:
diff changeset
   192
	bool ParseMemLeak( string& sLine );
hgs
parents:
diff changeset
   193
	bool ParseProcessEnd( string& sLine );
hgs
parents:
diff changeset
   194
	bool ParseHandleLeak( string& sLine );
hgs
parents:
diff changeset
   195
	bool ParseTestStart( string& sLine );
hgs
parents:
diff changeset
   196
	bool ParseTestEnd( string& sLine );
hgs
parents:
diff changeset
   197
	bool ParseLoggingCancelled( string& sLine );
hgs
parents:
diff changeset
   198
	bool ParseErrorOccured( string& sLine );
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
	void PrintMemLeak(const string& sTime,
hgs
parents:
diff changeset
   201
					   const string& sLeakSize,
hgs
parents:
diff changeset
   202
					   const string& sLeakAddr,
hgs
parents:
diff changeset
   203
					   const string& sModuleName);
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
	// Utilities
hgs
parents:
diff changeset
   206
	string ConvertTimeToLocalTime( string sInputTime );
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
	/**
hgs
parents:
diff changeset
   209
	* Create a winscw module into pModules vector.
hgs
parents:
diff changeset
   210
	* Used when we have dll load of module not in project to create them
hgs
parents:
diff changeset
   211
	* after this they are used in locating code lines.
hgs
parents:
diff changeset
   212
	* @param sBinaryName name of the binary with extension.
hgs
parents:
diff changeset
   213
	* @return true if successful.
hgs
parents:
diff changeset
   214
	*/
hgs
parents:
diff changeset
   215
	bool CreateWinscwModule( const string& sBinaryName );
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
#ifndef MODULE_TEST
hgs
parents:
diff changeset
   218
private:
hgs
parents:
diff changeset
   219
#endif
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
	void CleanMemoryAddresses();
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
	// Members
hgs
parents:
diff changeset
   224
	unsigned int m_iDataVersion; // Version of data file.
hgs
parents:
diff changeset
   225
	int m_eProcess_state; // is process started, etc..
hgs
parents:
diff changeset
   226
	bool m_bProcessStartFound;
hgs
parents:
diff changeset
   227
	bool m_bDllLoadFound;
hgs
parents:
diff changeset
   228
	int m_iLogLevel; // specified logging level
hgs
parents:
diff changeset
   229
	string m_sInputFile; // input file
hgs
parents:
diff changeset
   230
	vector<string> m_vRomSymbolFiles; // Rom symbol file.
hgs
parents:
diff changeset
   231
	string m_sOutputFile; // output file
hgs
parents:
diff changeset
   232
	string m_sInputFileTemp; // temporary input file (parsed from trace)
hgs
parents:
diff changeset
   233
	ifstream m_In; // Handle to input file
hgs
parents:
diff changeset
   234
	// Datasaver
hgs
parents:
diff changeset
   235
	CATDataSaver m_DataSaver;
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
	// Modules to be used in pinpointing
hgs
parents:
diff changeset
   238
	vector<CATModule2*>* m_pModules;
hgs
parents:
diff changeset
   239
hgs
parents:
diff changeset
   240
	// Rom symbol file.
hgs
parents:
diff changeset
   241
	CATRomSymbol* m_pRomSymbol;
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
	// Build type from dat.
hgs
parents:
diff changeset
   244
	int m_eBuildType;
hgs
parents:
diff changeset
   245
	// Build type from project.
hgs
parents:
diff changeset
   246
	int m_eProjectBuildType;
hgs
parents:
diff changeset
   247
	// Offset of map file.
hgs
parents:
diff changeset
   248
	int m_iOffSet;
hgs
parents:
diff changeset
   249
	// Platform of project.
hgs
parents:
diff changeset
   250
	string m_sProjectPlatform;
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
	// Process related
hgs
parents:
diff changeset
   253
	unsigned long m_iCurrentProcessId;
hgs
parents:
diff changeset
   254
	string m_sCurrentProcessName;
hgs
parents:
diff changeset
   255
	int m_iTotalRuns;
hgs
parents:
diff changeset
   256
	int m_iSuccesfullRuns;
hgs
parents:
diff changeset
   257
	
hgs
parents:
diff changeset
   258
	// Leak counting related
hgs
parents:
diff changeset
   259
	int m_iTotalNumberOfLeaks;
hgs
parents:
diff changeset
   260
	bool m_bSubtestOnGoing;
hgs
parents:
diff changeset
   261
	int m_iPinPointedLeaks;
hgs
parents:
diff changeset
   262
	int m_iPinPointedSubTestLeaks;
hgs
parents:
diff changeset
   263
	int m_iLeakNumber;
hgs
parents:
diff changeset
   264
	
hgs
parents:
diff changeset
   265
	// Handle count related
hgs
parents:
diff changeset
   266
	int m_iSubtestStartHandleCount;
hgs
parents:
diff changeset
   267
	vector<string> m_vHandleLeaks;
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
	// Module related
hgs
parents:
diff changeset
   270
	vector<DLL_LOAD_INFO> m_vDllLoadModList;
hgs
parents:
diff changeset
   271
	vector<DLL_LOAD_INFO> m_vDllLoadModListSubTest;
hgs
parents:
diff changeset
   272
	
hgs
parents:
diff changeset
   273
	// Sbs 1 support functions
hgs
parents:
diff changeset
   274
	int FindModuleUsingAddress( unsigned long iAddress ) const;
hgs
parents:
diff changeset
   275
	//int FindModuleUsingPID( unsigned long iPID ) const;
hgs
parents:
diff changeset
   276
	int FindModuleUsingName( const char* pModName );
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
	// Memory addresses
hgs
parents:
diff changeset
   279
	vector<CATMemoryAddress*> m_vMemoryAddress;
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
};
hgs
parents:
diff changeset
   282
#endif
hgs
parents:
diff changeset
   283
//EOF