home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 40 / IOPROG_40.ISO / SOFT / NETFrameworkSDK.exe / comsdk.cab / samples1.exe / Profiler / ProfilerHelper.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-06-23  |  10.9 KB  |  375 lines

  1. /****************************************************************************************
  2.  * Copyright (c) 1999 Microsoft Corporation.  All Rights Reserved.
  3.  *
  4.  * File:
  5.  *  ProfilerHelper.h
  6.  *
  7.  * Description:
  8.  *    
  9.  *
  10.  *
  11.  ***************************************************************************************/
  12. #ifndef __PROFILERHELPER_H__
  13. #define __PROFILERHELPER_H__
  14.  
  15. #include "Container.hpp"
  16. #include "ProfilerBase.h"
  17.  
  18.  
  19. /***************************************************************************************
  20.  ********************                                               ********************
  21.  ********************              Type Definitions                 ********************
  22.  ********************                                               ********************
  23.  ***************************************************************************************/
  24.  
  25. enum TransitionState
  26.     UNINITIALIZED,
  27.     MANAGED, 
  28.     UNMANAGED
  29. };
  30.  
  31. enum StackAction
  32.     PUSH, 
  33.     POP 
  34. };
  35.  
  36. enum FunctionCounters
  37.     ENTER, 
  38.     LEAVE, 
  39.     TAIL, 
  40.     UNWIND
  41. };
  42.  
  43. enum JitStatus
  44.     NONE,
  45.     JITTED, 
  46.     PREJITTED,
  47. };
  48.  
  49. /***************************************************************************************
  50.  ********************                                               ********************
  51.  ********************             StackBaseInfo Declaration         ********************
  52.  ********************                                               ********************
  53.  ***************************************************************************************/
  54. class StackBaseInfo
  55. {
  56.     public:
  57.     
  58.         StackBaseInfo( ULONG id );         
  59.         virtual ~StackBaseInfo();
  60.                 
  61.         
  62.     public:
  63.             
  64.          StackBaseInfo *Clone();
  65.          void Dump();
  66.         
  67.         
  68.      public:
  69.     
  70.         ULONG m_id;
  71.  
  72.     
  73. }; // StackBaseInfo
  74.  
  75.  
  76. /***************************************************************************************
  77.  ********************                                               ********************
  78.  ********************             BaseInfo Declaration              ********************
  79.  ********************                                               ********************
  80.  ***************************************************************************************/
  81. class BaseInfo
  82. {
  83.     public:
  84.     
  85.         BaseInfo( ULONG id );         
  86.         virtual ~BaseInfo();
  87.                 
  88.         
  89.     public:
  90.             
  91.         virtual void Dump();
  92.         BOOL Compare( ULONG key );
  93.         
  94.         
  95.      public:
  96.     
  97.         ULONG m_id;
  98.         BOOL  m_isValid;
  99.         WCHAR m_name[MAX_LENGTH];
  100.     
  101. }; // BaseInfo
  102.  
  103.  
  104. /***************************************************************************************
  105.  ********************                                               ********************
  106.  ********************            AppDomainInfo Declaration          ********************
  107.  ********************                                               ********************
  108.  ***************************************************************************************/
  109. class AppDomainInfo :
  110.     public BaseInfo
  111. {
  112.     public:
  113.  
  114.         AppDomainInfo( AppDomainID appDomainID );
  115.            virtual ~AppDomainInfo();
  116.       
  117.  
  118.     public:
  119.     
  120.         void Dump();        
  121.         
  122.         
  123.     public:    
  124.                        
  125.         ProcessID m_processID;            
  126.                        
  127. }; // AppDomainInfo
  128.  
  129.  
  130.  
  131. /***************************************************************************************
  132.  ********************                                               ********************
  133.  ********************            AssemblyInfo  Declaration          ********************
  134.  ********************                                               ********************
  135.  ***************************************************************************************/
  136. class AssemblyInfo :
  137.     public BaseInfo
  138. {
  139.     public:
  140.  
  141.         AssemblyInfo( AssemblyID assemblyID );
  142.            virtual ~AssemblyInfo();
  143.       
  144.  
  145.     public:
  146.     
  147.         void Dump();        
  148.         
  149.         
  150.     public:    
  151.                        
  152.         ModuleID    m_moduleID;
  153.         AppDomainID    m_appDomainID;
  154.                        
  155. }; // AssemblyInfo
  156.  
  157.  
  158. /***************************************************************************************
  159.  ********************                                               ********************
  160.  ********************            ModuleInfo Declaration             ********************
  161.  ********************                                               ********************
  162.  ***************************************************************************************/
  163. class ModuleInfo :
  164.     public BaseInfo
  165. {
  166.     public:
  167.  
  168.         ModuleInfo( ModuleID moduleID );
  169.            virtual ~ModuleInfo();
  170.       
  171.  
  172.     public:
  173.     
  174.         void Dump();        
  175.         
  176.         
  177.     public:    
  178.                        
  179.         AssemblyID        m_assemblyID;    
  180.         IMetaDataImport    *m_pMDImport;    
  181.         LPCBYTE            m_pBaseLoadAddress;        
  182.                        
  183. }; // ModuleInfo
  184.  
  185.  
  186. /***************************************************************************************
  187.  ********************                                               ********************
  188.  ********************             ClassInfo Declaration             ********************
  189.  ********************                                               ********************
  190.  ***************************************************************************************/
  191. class ClassInfo :
  192.     public BaseInfo
  193. {
  194.     public:
  195.  
  196.         ClassInfo( ClassID classID );
  197.            virtual ~ClassInfo();
  198.       
  199.  
  200.     public:
  201.     
  202.         void Dump();        
  203.         
  204.         
  205.     public:    
  206.                    
  207.         mdTypeDef m_token;
  208.            ModuleID  m_moduleID;    
  209.                        
  210. }; // ClassInfo
  211.  
  212.  
  213. /***************************************************************************************
  214.  ********************                                               ********************
  215.  ********************            ThreadInfo Declaration             ********************
  216.  ********************                                               ********************
  217.  ***************************************************************************************/
  218. class ThreadInfo :
  219.     public BaseInfo
  220. {
  221.     public:
  222.  
  223.         ThreadInfo( ThreadID threadID );         
  224.         virtual ~ThreadInfo();
  225.         
  226.  
  227.     public:
  228.     
  229.         virtual void Dump();
  230.                 
  231.         
  232.     public:    
  233.                 
  234.         HANDLE                    m_hThread;
  235.         TransitionState            m_status;
  236.         DWORD                     m_win32ThreadID;
  237.         CStack<StackBaseInfo *> *m_pLatestUnwoundFunction;
  238.                 
  239. }; // ThreadInfo
  240.  
  241.  
  242. /***************************************************************************************
  243.  ********************                                               ********************
  244.  ********************          FunctionInfo Declaration             ********************
  245.  ********************                                               ********************
  246.  ***************************************************************************************/
  247. class FunctionInfo :
  248.     public BaseInfo
  249. {
  250.     public:
  251.  
  252.         FunctionInfo( FunctionID functionID );
  253.            virtual ~FunctionInfo();
  254.       
  255.  
  256.     public:
  257.     
  258.         void Dump();     
  259.         
  260.         
  261.     public:    
  262.                                         
  263.         // function counters
  264.         LONG         m_enter;
  265.         LONG         m_left;
  266.         LONG         m_tail;
  267.         LONG         m_unwind;
  268.  
  269.         // jit related information
  270.         JitStatus    m_jitStatus;
  271.         BOOL         m_isPitched;
  272.  
  273.         // other info
  274.         mdToken      m_token;               
  275.         ClassID      m_classID;
  276.         ModuleID     m_moduleID; 
  277.         ULONG        m_codeSize;
  278.         LPCBYTE      m_pStartAddress;
  279.         
  280. }; // FunctionInfo
  281.  
  282.  
  283. /***************************************************************************************
  284.  ********************                                               ********************
  285.  ********************              PrfInfo Declaration              ********************
  286.  ********************                                               ********************
  287.  ***************************************************************************************/
  288. class PrfInfo
  289. {             
  290.     public:
  291.     
  292.         PrfInfo();                     
  293.         virtual ~PrfInfo();                      
  294.                       
  295.                    
  296.     // methods
  297.        
  298.        public:
  299.                     
  300.         // tables
  301.         void DumpTables();
  302.         void Failure( char *message = NULL );
  303.  
  304.         // class methods
  305.         void AddClass( ClassID classID );
  306.         void RemoveClass( ClassID classID );
  307.  
  308.         // thread methods
  309.         void AddThread( ThreadID threadID );                        
  310.         void RemoveThread( ThreadID threadID );
  311.         void UpdateTransitionState( TransitionState state );                        
  312.         void UpdateOSThreadID( ThreadID managedThreadID, DWORD osThreadID );
  313.         void UpdateUnwindStack( FunctionID *functionID, StackAction action );
  314.         
  315.         // module methods
  316.         void AddModule( ModuleID moduleID );                 
  317.         void RemoveModule( ModuleID moduleID );                 
  318.         void ReleaseModuleMDInterface( ModuleID moduleID );
  319.         void UpdateAssemblyInModule( ModuleID moduleID, AssemblyID assemblyID );
  320.  
  321.         // function methods
  322.         void AddFunction( FunctionID functionID, JitStatus status ); 
  323.         void RemoveFunction( FunctionID functionID );
  324.         void MarkFunctionAsPitched( FunctionID functionID );
  325.         void UpdateEnterExitCounters( FunctionID functionID, FunctionCounters which );
  326.  
  327.         // assembly methods
  328.         void AddAssembly( AssemblyID assemblyID );                                    
  329.         void RemoveAssembly( AssemblyID assemblyID );                                    
  330.  
  331.         // appdomain methods
  332.         void AddAppDomain( AppDomainID appDomainID );
  333.         void RemoveAppDomain( AppDomainID appDomainID );
  334.  
  335.  
  336.       private:
  337.     
  338.         void _GetClassInfoHelper( ClassInfo **ppClassInfo );
  339.         void _GetThreadInfoHelper( ThreadInfo **ppThreadInfo );
  340.         void _GetModuleInfoHelper( ModuleInfo **ppModuleInfo );           
  341.         void _GetFunctionInfoHelper( FunctionInfo **ppFunctionInfo );
  342.         void _GetAssemblyInfoHelper( AssemblyInfo **ppAssemblyInfo );        
  343.         void _SetAppDomainName( AppDomainID AppDomainID );
  344.         void _GetAppDomainInfoHelper( AppDomainInfo **ppAppDomainInfo );
  345.  
  346.  
  347.     // data memebers
  348.  
  349.     protected:    
  350.  
  351.         DWORD m_dwEventMask;
  352.         ICorProfilerInfo *m_pProfilerInfo;
  353.  
  354.         // tables         
  355.         SList<ClassInfo *, ClassID> *m_pClassTable;
  356.         SList<ThreadInfo *, ThreadID> *m_pThreadTable;
  357.         SList<ModuleInfo *, ModuleID> *m_pModuleTable;
  358.         SList<FunctionInfo *, FunctionID> *m_pFunctionTable;
  359.         SList<AssemblyInfo *, AssemblyID> *m_pAssemblyTable;
  360.         SList<AppDomainInfo *, AppDomainID> *m_pAppDomainTable; 
  361.  
  362.     private:
  363.  
  364.         CRITICAL_SECTION m_criticalSection;
  365.  
  366. }; // PrfInfo
  367.  
  368.  
  369. #endif // __PROFILERHELPER_H___
  370.  
  371. // End of File