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

  1. /****************************************************************************************
  2.  * Copyright (c) Microsoft Corporation.  All Rights Reserved.
  3.  *
  4.  * File:
  5.  *  ProfilerCallback.h
  6.  *
  7.  * Description:
  8.  *  
  9.  *
  10.  *
  11.  ***************************************************************************************/
  12. #ifndef __PROFILER_CALLBACK_H__
  13. #define __PROFILER_CALLBACK_H__
  14.  
  15. #include "ProfilerInfo.h"
  16.  
  17.  
  18. /////////////////////////////////////////////////////////////////////////////////////////
  19. // Each sample should provide the following definitions (with a new GUID)
  20. //
  21.     // {FA0C6E77-AFF4-4c74-95F9-6216AFDE992C}
  22.     extern const GUID __declspec( selectany ) CLSID_PROFILER = 
  23.         { 0xfa0c6e77, 0xaff4, 0x4c74, { 0x95, 0xf9, 0x62, 0x16, 0xaf, 0xde, 0x99, 0x2c } };
  24.  
  25.     #define THREADING_MODEL     "Both"
  26.     #define PROGID_PREFIX       "ProfilerHST"
  27.       #define COCLASS_DESCRIPTION "Microsoft CLR Hot Spots Tracker"
  28.        #define PROFILER_GUID       "{FA0C6E77-AFF4-4c74-95F9-6216AFDE992C}"
  29. //
  30. /////////////////////////////////////////////////////////////////////////////////////////
  31.  
  32.  
  33. /***************************************************************************************
  34.  ********************                                               ********************
  35.  ********************       ProfilerCallback Declaration            ********************
  36.  ********************                                               ********************
  37.  ***************************************************************************************/
  38.  
  39. class ProfilerCallback : 
  40.     public PrfInfo,
  41.     public ICorProfilerCallback 
  42. {
  43.     public:
  44.     
  45.         ProfilerCallback();
  46.         ~ProfilerCallback();
  47.  
  48.  
  49.     public:
  50.  
  51.         //
  52.         // IUnknown 
  53.         //
  54.         COM_METHOD( ULONG ) AddRef(); 
  55.         COM_METHOD( ULONG ) Release();
  56.         COM_METHOD( HRESULT ) QueryInterface( REFIID riid, void **ppInterface );
  57.  
  58.  
  59.         //
  60.         // STARTUP/SHUTDOWN EVENTS
  61.         //
  62.         virtual COM_METHOD( HRESULT ) Initialize( IUnknown *pICorProfilerInfoUnk );
  63.                
  64.         HRESULT DllDetachShutdown();                           
  65.         COM_METHOD( HRESULT ) Shutdown();
  66.                                          
  67.  
  68.         //
  69.          // APPLICATION DOMAIN EVENTS
  70.         //
  71.            COM_METHOD( HRESULT ) AppDomainCreationStarted( AppDomainID appDomainID );
  72.         
  73.         COM_METHOD( HRESULT ) AppDomainCreationFinished( AppDomainID appDomainID,
  74.                                                          HRESULT hrStatus );
  75.     
  76.         COM_METHOD( HRESULT ) AppDomainShutdownStarted( AppDomainID appDomainID );
  77.  
  78.         COM_METHOD( HRESULT ) AppDomainShutdownFinished( AppDomainID appDomainID, 
  79.                                                          HRESULT hrStatus );
  80.  
  81.  
  82.         //
  83.          // ASSEMBLY EVENTS
  84.         //
  85.            COM_METHOD( HRESULT ) AssemblyLoadStarted( AssemblyID assemblyID );
  86.         
  87.         COM_METHOD( HRESULT ) AssemblyLoadFinished( AssemblyID assemblyID,
  88.                                                     HRESULT hrStatus );
  89.     
  90.         COM_METHOD( HRESULT ) AssemblyUnloadStarted( AssemblyID assemblyID );
  91.  
  92.         COM_METHOD( HRESULT ) AssemblyUnloadFinished( AssemblyID assemblyID, 
  93.                                                       HRESULT hrStatus );
  94.         
  95.         
  96.         //
  97.          // MODULE EVENTS
  98.         //
  99.            COM_METHOD( HRESULT ) ModuleLoadStarted( ModuleID moduleID );
  100.         
  101.         COM_METHOD( HRESULT ) ModuleLoadFinished( ModuleID moduleID,
  102.                                                   HRESULT hrStatus );
  103.     
  104.         COM_METHOD( HRESULT ) ModuleUnloadStarted( ModuleID moduleID );
  105.  
  106.         COM_METHOD( HRESULT ) ModuleUnloadFinished( ModuleID moduleID, 
  107.                                                     HRESULT hrStatus );
  108.  
  109.         COM_METHOD( HRESULT ) ModuleAttachedToAssembly( ModuleID moduleID,
  110.                                                         AssemblyID assemblyID );
  111.                 
  112.         
  113.         //
  114.         // CLASS EVENTS
  115.         //
  116.         COM_METHOD( HRESULT ) ClassLoadStarted( ClassID classID );
  117.         
  118.         COM_METHOD( HRESULT ) ClassLoadFinished( ClassID classID,
  119.                                                  HRESULT hrStatus );
  120.     
  121.          COM_METHOD( HRESULT ) ClassUnloadStarted( ClassID classID );
  122.  
  123.         COM_METHOD( HRESULT ) ClassUnloadFinished( ClassID classID, 
  124.                                                    HRESULT hrStatus );
  125.  
  126.         COM_METHOD( HRESULT ) FunctionUnloadStarted( FunctionID functionID );
  127.         
  128.         
  129.         //
  130.         // JIT EVENTS
  131.         //              
  132.         COM_METHOD( HRESULT ) JITCompilationStarted( FunctionID functionID,
  133.                                                      BOOL fIsSafeToBlock );
  134.                                         
  135.         COM_METHOD( HRESULT ) JITCompilationFinished( FunctionID functionID,
  136.                                                       HRESULT hrStatus,
  137.                                                       BOOL fIsSafeToBlock );
  138.     
  139.         COM_METHOD( HRESULT ) JITCachedFunctionSearchStarted( FunctionID functionID,
  140.                                                               BOOL *pbUseCachedFunction );
  141.         
  142.         COM_METHOD( HRESULT ) JITCachedFunctionSearchFinished( FunctionID functionID,
  143.                                                                COR_PRF_JIT_CACHE result );
  144.                                                                      
  145.         COM_METHOD( HRESULT ) JITFunctionPitched( FunctionID functionID );
  146.         
  147.         COM_METHOD( HRESULT ) JITInlining( FunctionID callerID,
  148.                                            FunctionID calleeID,
  149.                                            BOOL *pfShouldInline );
  150.  
  151.         
  152.         //
  153.         // THREAD EVENTS
  154.         //
  155.         COM_METHOD( HRESULT ) ThreadCreated( ThreadID threadID );
  156.     
  157.         COM_METHOD( HRESULT ) ThreadDestroyed( ThreadID threadID );
  158.  
  159.         COM_METHOD( HRESULT ) ThreadAssignedToOSThread( ThreadID managedThreadID,
  160.                                                         DWORD osThreadID );
  161.     
  162.  
  163.            //
  164.         // REMOTING EVENTS
  165.         //                                                      
  166.  
  167.         //
  168.         // Client-side events
  169.         //
  170.         COM_METHOD( HRESULT ) RemotingClientInvocationStarted();
  171.  
  172.         COM_METHOD( HRESULT ) RemotingClientSendingMessage( GUID *pCookie,
  173.                                                             BOOL fIsAsync );
  174.  
  175.         COM_METHOD( HRESULT ) RemotingClientReceivingReply( GUID *pCookie,
  176.                                                             BOOL fIsAsync );
  177.  
  178.         COM_METHOD( HRESULT ) RemotingClientInvocationFinished();
  179.  
  180.         //
  181.         // Server-side events
  182.         //
  183.         COM_METHOD( HRESULT ) RemotingServerReceivingMessage( GUID *pCookie,
  184.                                                               BOOL fIsAsync );
  185.  
  186.         COM_METHOD( HRESULT ) RemotingServerInvocationStarted();
  187.  
  188.         COM_METHOD( HRESULT ) RemotingServerInvocationReturned();
  189.  
  190.         COM_METHOD( HRESULT ) RemotingServerSendingReply( GUID *pCookie,
  191.                                                           BOOL fIsAsync );
  192.  
  193.  
  194.            //
  195.         // CONTEXT EVENTS
  196.         //                                                      
  197.         COM_METHOD( HRESULT ) UnmanagedToManagedTransition( FunctionID functionID,
  198.                                                             COR_PRF_TRANSITION_REASON reason );
  199.     
  200.         COM_METHOD( HRESULT ) ManagedToUnmanagedTransition( FunctionID functionID,
  201.                                                             COR_PRF_TRANSITION_REASON reason );
  202.                                                                   
  203.                                                                         
  204.            //
  205.         // SUSPENSION EVENTS
  206.         //    
  207.         COM_METHOD( HRESULT ) RuntimeSuspendStarted( COR_PRF_SUSPEND_REASON suspendReason );
  208.  
  209.         COM_METHOD( HRESULT ) RuntimeSuspendFinished();
  210.  
  211.         COM_METHOD( HRESULT ) RuntimeSuspendAborted();
  212.  
  213.         COM_METHOD( HRESULT ) RuntimeResumeStarted();
  214.  
  215.         COM_METHOD( HRESULT ) RuntimeResumeFinished();
  216.  
  217.         COM_METHOD( HRESULT ) RuntimeThreadSuspended( ThreadID threadid );
  218.  
  219.         COM_METHOD( HRESULT ) RuntimeThreadResumed( ThreadID threadid );
  220.  
  221.  
  222.            //
  223.         // GC EVENTS
  224.         //    
  225.         COM_METHOD( HRESULT ) MovedReferences( ULONG cmovedObjectIDRanges,
  226.                                                ObjectID oldObjectIDRangeStart[],
  227.                                                ObjectID newObjectIDRangeStart[],
  228.                                                ULONG cObjectIDRangeLength[] );
  229.     
  230.         COM_METHOD( HRESULT ) ObjectAllocated( ObjectID objectID,
  231.                                                ClassID classID );
  232.     
  233.         COM_METHOD( HRESULT ) ObjectsAllocatedByClass( ULONG classCount,
  234.                                                        ClassID classIDs[],
  235.                                                        ULONG objects[] );
  236.     
  237.         COM_METHOD( HRESULT ) ObjectReferences( ObjectID objectID,
  238.                                                 ClassID classID,
  239.                                                 ULONG cObjectRefs,
  240.                                                 ObjectID objectRefIDs[] );
  241.     
  242.         COM_METHOD( HRESULT ) RootReferences( ULONG cRootRefs,
  243.                                               ObjectID rootRefIDs[] );
  244.     
  245.         
  246.           //
  247.         // EXCEPTION EVENTS
  248.         //                                                         
  249.  
  250.         // Exception creation
  251.         COM_METHOD( HRESULT ) ExceptionThrown( ObjectID thrownObjectID );
  252.  
  253.         // Search phase
  254.         COM_METHOD( HRESULT ) ExceptionSearchFunctionEnter( FunctionID functionID );
  255.     
  256.         COM_METHOD( HRESULT ) ExceptionSearchFunctionLeave();
  257.     
  258.         COM_METHOD( HRESULT ) ExceptionSearchFilterEnter( FunctionID functionID );
  259.     
  260.         COM_METHOD( HRESULT ) ExceptionSearchFilterLeave();
  261.     
  262.         COM_METHOD( HRESULT ) ExceptionSearchCatcherFound( FunctionID functionID );
  263.         
  264.         COM_METHOD( HRESULT ) ExceptionCLRCatcherFound();
  265.  
  266.         COM_METHOD( HRESULT ) ExceptionCLRCatcherExecute();
  267.  
  268.         COM_METHOD( HRESULT ) ExceptionOSHandlerEnter( FunctionID functionID );
  269.             
  270.         COM_METHOD( HRESULT ) ExceptionOSHandlerLeave( FunctionID functionID );
  271.     
  272.         // Unwind phase
  273.         COM_METHOD( HRESULT ) ExceptionUnwindFunctionEnter( FunctionID functionID );
  274.     
  275.         COM_METHOD( HRESULT ) ExceptionUnwindFunctionLeave();
  276.         
  277.         COM_METHOD( HRESULT ) ExceptionUnwindFinallyEnter( FunctionID functionID );
  278.     
  279.         COM_METHOD( HRESULT ) ExceptionUnwindFinallyLeave();
  280.         
  281.         COM_METHOD( HRESULT ) ExceptionCatcherEnter( FunctionID functionID,
  282.                                                      ObjectID objectID );
  283.     
  284.         COM_METHOD( HRESULT ) ExceptionCatcherLeave();
  285.  
  286.         
  287.         //
  288.         // COM CLASSIC WRAPPER
  289.         //
  290.         COM_METHOD( HRESULT )  COMClassicVTableCreated( ClassID wrappedClassID,
  291.                                                         REFGUID implementedIID,
  292.                                                         void *pVTable,
  293.                                                         ULONG cSlots );
  294.  
  295.         COM_METHOD( HRESULT )  COMClassicVTableDestroyed( ClassID wrappedClassID,
  296.                                                           REFGUID implementedIID,
  297.                                                           void *pVTable );
  298.     
  299.     
  300.         //
  301.         // instantiate an instance of the callback interface
  302.         //
  303.         static COM_METHOD( HRESULT) CreateObject( REFIID riid, void **ppInterface );            
  304.         
  305.                                                                                                      
  306.         // used by function hooks, they have to be static
  307.         static void  Enter( FunctionID functionID );
  308.         static void  Leave( FunctionID functionID );
  309.         static void  Tailcall( FunctionID functionID );
  310.  
  311.  
  312.     private:
  313.  
  314.         long m_refCount;                        
  315.         DWORD m_dwShutdown;
  316.  
  317. }; // ProfilerCallback
  318.  
  319. extern ProfilerCallback *g_pCallbackObject;        // global reference to callback object
  320.  
  321. #endif //  __PROFILER_CALLBACK_H__
  322.  
  323. // End of File
  324.         
  325.         
  326.