home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2005 June (DVD) / DPPRO0605DVD.iso / dotNETSDK / SETUP.EXE / netfxsd1.cab / FL_ProfilerInfo_h________.3643236F_FC70_11D3_A536_0090278A1BB8 < prev    next >
Encoding:
Text File  |  2002-05-06  |  9.6 KB  |  322 lines

  1. /****************************************************************************************
  2.  * Copyright (c) Microsoft Corporation.  All Rights Reserved.
  3.  *
  4.  * File:
  5.  *  ProfilerInfo.h
  6.  *
  7.  * Description:
  8.  *    
  9.  *
  10.  *
  11.  ***************************************************************************************/
  12. #ifndef __PROFILER_INFO_H__
  13. #define __PROFILER_INFO_H__
  14.  
  15. #define TEST_FILE "result.out"    // used for testing purposes
  16.  
  17.  
  18. /***************************************************************************************
  19.  ********************                                               ********************
  20.  ********************              Enum Definitions                 ********************
  21.  ********************                                               ********************
  22.  ***************************************************************************************/
  23. enum CounterAction
  24.     START, 
  25.     STOP 
  26. };
  27.  
  28. enum StackAction
  29.     PUSH, 
  30.     POP 
  31. };
  32.  
  33. enum JitStatus
  34.     NONE,
  35.     JITTED, 
  36.     PREJITTED,
  37. };
  38.  
  39.  
  40. /***************************************************************************************
  41.  ********************                                               ********************
  42.  ********************             BaseInfo Declaration              ********************
  43.  ********************                                               ********************
  44.  ***************************************************************************************/
  45. class BaseInfo
  46. {
  47.     public:
  48.     
  49.         BaseInfo( ULONG id );         
  50.         virtual ~BaseInfo();
  51.                 
  52.         
  53.     public:
  54.             
  55.         virtual void Dump();
  56.         
  57.         BOOL Compare( ULONG key );
  58.         Comparison CompareEx( ULONG key );
  59.         
  60.         
  61.      public:
  62.     
  63.         ULONG m_id;
  64.         BOOL  m_isValid;
  65.     
  66. }; // BaseInfo
  67.  
  68.  
  69. /***************************************************************************************
  70.  ********************                                               ********************
  71.  ********************             StackBaseInfo Declaration         ********************
  72.  ********************                                               ********************
  73.  ***************************************************************************************/
  74. class StackBaseInfo
  75. {
  76.     public:
  77.     
  78.         StackBaseInfo( ULONG id );         
  79.         virtual ~StackBaseInfo();
  80.                 
  81.         
  82.     public:
  83.             
  84.          StackBaseInfo *Clone();
  85.          void Dump();
  86.         
  87.         
  88.      public:
  89.     
  90.         ULONG m_id;
  91.  
  92. }; // StackBaseInfo
  93.  
  94.  
  95. /***************************************************************************************
  96.  ********************                                               ********************
  97.  ********************             StackFunctionInfo Declaration     ********************
  98.  ********************                                               ********************
  99.  ***************************************************************************************/
  100. class StackFunctionInfo
  101. {
  102.     public:
  103.     
  104.         StackFunctionInfo(); 
  105.         virtual ~StackFunctionInfo();
  106.                 
  107.         
  108.     public:
  109.             
  110.          void Dump();
  111.         StackFunctionInfo *Clone();
  112.         
  113.         
  114.      public:
  115.     
  116.         LARGE_INTEGER m_calleeTime;
  117.         LARGE_INTEGER m_profilerTime;
  118.         LARGE_INTEGER m_suspendedTime;
  119.            LARGE_INTEGER m_inclusiveTime;
  120.            LARGE_INTEGER m_currentInclusiveTime;
  121.  
  122. }; // StackFunctionInfo
  123.  
  124.  
  125. /***************************************************************************************
  126.  ********************                                               ********************
  127.  ********************      FunctionTimingInfo Declaration           ********************
  128.  ********************                                               ********************
  129.  ***************************************************************************************/
  130. class FunctionTimingInfo :
  131.     public BaseInfo
  132. {
  133.     public:
  134.     
  135.         FunctionTimingInfo( ULONG id, DWORD win32ThreadID );         
  136.         virtual ~FunctionTimingInfo();
  137.                 
  138.         
  139.     public:
  140.             
  141.         virtual void Dump();
  142.         
  143.  
  144.      public:
  145.     
  146.         DWORD  m_win32ThreadID;
  147.         
  148.         DWORD m_timesCalled;
  149.         LARGE_INTEGER m_calleeTime;
  150.         LARGE_INTEGER m_profilerTime;
  151.         LARGE_INTEGER m_inclusiveTime;
  152.         LARGE_INTEGER m_suspendedTime;
  153.  
  154.         CStack<StackFunctionInfo *> *m_pLatestInvocation;
  155.         
  156. }; // FunctionTimingInfo
  157.  
  158.  
  159. /***************************************************************************************
  160.  ********************                                               ********************
  161.  ********************            ThreadInfo Declaration             ********************
  162.  ********************                                               ********************
  163.  ***************************************************************************************/
  164. class ThreadInfo :
  165.     public BaseInfo
  166. {
  167.     public:
  168.  
  169.         ThreadInfo( ThreadID threadID );         
  170.         virtual ~ThreadInfo();
  171.         
  172.  
  173.     public:
  174.     
  175.         virtual void Dump();
  176.         void GetStackFunctionInfo( StackFunctionInfo **pFunctionInfo );
  177.            void UpdateTimer( LARGE_INTEGER *globalTimer, 
  178.                           LARGE_INTEGER *currentTimer, 
  179.                           CounterAction action );
  180.         
  181.         
  182.     public:    
  183.                 
  184.         // 
  185.         // Once a thread dies, it is possible for its ID to be re-used.
  186.         // We remember the original ID in order to print the information
  187.         // for each thread at the end of the run.
  188.         //
  189.         DWORD m_originalTID;
  190.         
  191.         
  192.         // win32 information
  193.         HANDLE m_hThread;
  194.         DWORD  m_win32ThreadID;
  195.         ULONG  m_lastPoppedFID;
  196.  
  197.         // timers for the thread
  198.         LARGE_INTEGER m_runningTime;
  199.         LARGE_INTEGER m_profilerTime;
  200.         LARGE_INTEGER m_suspendedTime;
  201.         LARGE_INTEGER m_currentProfilerTime;
  202.            LARGE_INTEGER m_currentSuspensionTime;
  203.  
  204.         // stacks and tables
  205.         CStack<StackBaseInfo *> *m_pCallStack;
  206.         CStack<StackBaseInfo *> *m_pLatestUnwoundFunction;
  207.         Table<FunctionTimingInfo *, FunctionID> *m_pFunctionTimes;
  208.                 
  209. }; // ThreadInfo
  210.  
  211.  
  212. /***************************************************************************************
  213.  ********************                                               ********************
  214.  ********************          FunctionInfo Declaration             ********************
  215.  ********************                                               ********************
  216.  ***************************************************************************************/
  217. class FunctionInfo :
  218.     public BaseInfo
  219. {
  220.     public:
  221.  
  222.         FunctionInfo( FunctionID functionID );
  223.            virtual ~FunctionInfo();
  224.       
  225.  
  226.     public:
  227.     
  228.         virtual void Dump();     
  229.         
  230.         
  231.     public:    
  232.                                         
  233.         ULONG m_argCount;    
  234.         BOOL m_bIsStatic;
  235.         WCHAR m_functionName[MAX_LENGTH];
  236.         WCHAR m_returnTypeStr[MAX_LENGTH];
  237.         WCHAR m_functionParameters[10 * MAX_LENGTH];
  238.         
  239. }; // FunctionInfo
  240.  
  241.  
  242. /***************************************************************************************
  243.  ********************                                               ********************
  244.  ********************              PrfInfo Declaration              ********************
  245.  ********************                                               ********************
  246.  ***************************************************************************************/
  247. class PrfInfo
  248. {             
  249.     friend class TimeTracker;
  250.     friend class FunctionTimingInfo;
  251.  
  252.  
  253.     public:
  254.     
  255.         PrfInfo();                     
  256.         virtual ~PrfInfo();                      
  257.                       
  258.                           
  259.        public:
  260.                     
  261.         void DumpTables();
  262.         void Failure( char *message = NULL );
  263.  
  264.         void AddThread( ThreadID threadID );                        
  265.         void RemoveThread( ThreadID threadID );
  266.  
  267.         void AddFunction( FunctionID functionID );                        
  268.         void RemoveFunction( FunctionID functionID );
  269.         
  270.            void UpdateCallStack( FunctionID functionID, StackAction action );
  271.            void UpdateOSThreadID( ThreadID managedThreadID, DWORD osThreadID );
  272.         void UpdateSuspendedTimer( ThreadID threadID, CounterAction action );
  273.         void UpdateUnwindStack( FunctionID *functionID, StackAction action );
  274.  
  275.  
  276.       private:
  277.     
  278.         void _GetThreadInfoHelper( ThreadInfo **ppThreadInfo );
  279.         void _GetFunctionInfoHelper( FunctionInfo **ppFunctionInfo );
  280.  
  281.  
  282.     protected:    
  283.  
  284.         DWORD m_dwEventMask;
  285.         BOOL m_bHighPrecisionSupported;
  286.         ICorProfilerInfo *m_pProfilerInfo;
  287.      
  288.         SList<ThreadInfo *, ThreadID> *m_pThreadTable;        
  289.         Table<FunctionInfo *, FunctionID> *m_pFunctionTable;        
  290.  
  291. }; // PrfInfo
  292.  
  293.  
  294. /***************************************************************************************
  295.  ********************                                               ********************
  296.  ********************          TimeTracker Declaration              ********************
  297.  ********************                                               ********************
  298.  ***************************************************************************************/
  299. class TimeTracker
  300. {
  301.     public:
  302.  
  303.         TimeTracker( PrfInfo *pPrfInfo, ThreadID threadID = NULL );
  304.         ~TimeTracker();
  305.     
  306.  
  307.     private:    
  308.                                         
  309.         ThreadInfo *m_pThreadInfo;
  310.         
  311. }; // TimeTracker
  312.  
  313.  
  314. static PrfInfo *g_pPrfInfo;            // global pointer to PrfInfo object
  315. static LARGE_INTEGER g_frequency;    // global high precision counter
  316.  
  317. #endif // __PROFILER_INFO_H___
  318.  
  319. // End of File