home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2005 June (DVD) / DPPRO0605DVD.iso / dotNETSDK / SETUP.EXE / netfxsd1.cab / FL_ProfilerCallback_h________.3643236F_FC70_11D3_A536_0090278A1BB8 < prev    next >
Encoding:
Text File  |  2002-05-06  |  11.7 KB  |  330 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.  
  16. #include "ProfilerHelper.h"
  17.  
  18.  
  19. /////////////////////////////////////////////////////////////////////////////////////////
  20. // Each sample should provide the following blob (with a new GUID)
  21. //
  22.     // {01568439-E2BA-4434-8ACC-816239E8B8B5}
  23.     extern const GUID __declspec( selectany ) CLSID_PROFILER = 
  24.         { 0x1568439, 0xe2ba, 0x4434, { 0x8a, 0xcc, 0x81, 0x62, 0x39, 0xe8, 0xb8, 0xb5 } };
  25.  
  26.     #define THREADING_MODEL "Both"
  27.     #define PROGID_PREFIX "ProfilerGCP"
  28.     #define COCLASS_DESCRIPTION "Microsoft CLR General Code Profiler (GCP) Sample"
  29.     #define PROFILER_GUID "{01568439-E2BA-4434-8ACC-816239E8B8B5}"
  30. //
  31. /////////////////////////////////////////////////////////////////////////////////////////
  32.  
  33.  
  34. /***************************************************************************************
  35.  ********************                                               ********************
  36.  ********************       ProfilerCallback Declaration            ********************
  37.  ********************                                               ********************
  38.  ***************************************************************************************/
  39.  
  40. class ProfilerCallback : 
  41.     public ICorProfilerCallback, 
  42.     public PrfInfo
  43. {
  44.     public:
  45.     
  46.         ProfilerCallback();
  47.         ~ProfilerCallback();
  48.  
  49.  
  50.     public:
  51.  
  52.         //
  53.         // IUnknown 
  54.         //
  55.         COM_METHOD( ULONG ) AddRef(); 
  56.         COM_METHOD( ULONG ) Release();
  57.         COM_METHOD( HRESULT ) QueryInterface( REFIID riid, void **ppInterface );
  58.  
  59.         //
  60.         // STARTUP/SHUTDOWN EVENTS
  61.         //
  62.         virtual COM_METHOD( HRESULT ) Initialize( IUnknown *pICorProfilerInfoUnk );
  63.                                           
  64.         COM_METHOD( HRESULT ) Shutdown();
  65.         HRESULT DllDetachShutdown();
  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.          // ASSEMBLY EVENTS
  83.         //
  84.            COM_METHOD( HRESULT ) AssemblyLoadStarted( AssemblyID assemblyID );
  85.         
  86.         COM_METHOD( HRESULT ) AssemblyLoadFinished( AssemblyID assemblyID,
  87.                                                     HRESULT hrStatus );
  88.     
  89.         COM_METHOD( HRESULT ) AssemblyUnloadStarted( AssemblyID assemblyID );
  90.  
  91.         COM_METHOD( HRESULT ) AssemblyUnloadFinished( AssemblyID assemblyID, 
  92.                                                       HRESULT hrStatus );
  93.         
  94.         
  95.         //
  96.          // MODULE EVENTS
  97.         //
  98.            COM_METHOD( HRESULT ) ModuleLoadStarted( ModuleID moduleID );
  99.         
  100.         COM_METHOD( HRESULT ) ModuleLoadFinished( ModuleID moduleID,
  101.                                                   HRESULT hrStatus );
  102.     
  103.         COM_METHOD( HRESULT ) ModuleUnloadStarted( ModuleID moduleID );
  104.  
  105.         COM_METHOD( HRESULT ) ModuleUnloadFinished( ModuleID moduleID, 
  106.                                                     HRESULT hrStatus );
  107.  
  108.         COM_METHOD( HRESULT ) ModuleAttachedToAssembly( ModuleID moduleID,
  109.                                                         AssemblyID assemblyID );
  110.                 
  111.         
  112.         //
  113.         // CLASS EVENTS
  114.         //
  115.         COM_METHOD( HRESULT ) ClassLoadStarted( ClassID classID );
  116.         
  117.         COM_METHOD( HRESULT ) ClassLoadFinished( ClassID classID,
  118.                                                  HRESULT hrStatus );
  119.     
  120.          COM_METHOD( HRESULT ) ClassUnloadStarted( ClassID classID );
  121.  
  122.         COM_METHOD( HRESULT ) ClassUnloadFinished( ClassID classID, 
  123.                                                    HRESULT hrStatus );
  124.  
  125.         COM_METHOD( HRESULT ) FunctionUnloadStarted( FunctionID functionID );
  126.         
  127.         
  128.         //
  129.         // JIT EVENTS
  130.         //              
  131.         COM_METHOD( HRESULT ) JITCompilationStarted( FunctionID functionID,
  132.                                                      BOOL fIsSafeToBlock );
  133.                                         
  134.         COM_METHOD( HRESULT ) JITCompilationFinished( FunctionID functionID,
  135.                                                       HRESULT hrStatus,
  136.                                                       BOOL fIsSafeToBlock );
  137.     
  138.         COM_METHOD( HRESULT ) JITCachedFunctionSearchStarted( FunctionID functionID,
  139.                                                               BOOL *pbUseCachedFunction );
  140.         
  141.         COM_METHOD( HRESULT ) JITCachedFunctionSearchFinished( FunctionID functionID,
  142.                                                                COR_PRF_JIT_CACHE result );
  143.                                                                      
  144.         COM_METHOD( HRESULT ) JITFunctionPitched( FunctionID functionID );
  145.         
  146.         COM_METHOD( HRESULT ) JITInlining( FunctionID callerID,
  147.                                            FunctionID calleeID,
  148.                                            BOOL *pfShouldInline );
  149.  
  150.         
  151.         //
  152.         // THREAD EVENTS
  153.         //
  154.         COM_METHOD( HRESULT ) ThreadCreated( ThreadID threadID );
  155.     
  156.         COM_METHOD( HRESULT ) ThreadDestroyed( ThreadID threadID );
  157.  
  158.         COM_METHOD( HRESULT ) ThreadAssignedToOSThread( ThreadID managedThreadID,
  159.                                                         DWORD osThreadID );
  160.     
  161.         
  162.            //
  163.         // REMOTING EVENTS
  164.         //                                                      
  165.  
  166.         //
  167.         // Client-side events
  168.         //
  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.  
  184.         COM_METHOD( HRESULT ) RemotingServerReceivingMessage( GUID *pCookie,
  185.                                                               BOOL fIsAsync );
  186.  
  187.         COM_METHOD( HRESULT ) RemotingServerInvocationStarted();
  188.  
  189.         COM_METHOD( HRESULT ) RemotingServerInvocationReturned();
  190.  
  191.         COM_METHOD( HRESULT ) RemotingServerSendingReply( GUID *pCookie,
  192.                                                           BOOL fIsAsync );
  193.  
  194.  
  195.            //
  196.         // CONTEXT EVENTS
  197.         //                                                      
  198.         COM_METHOD( HRESULT ) UnmanagedToManagedTransition( FunctionID functionID,
  199.                                                             COR_PRF_TRANSITION_REASON reason );
  200.     
  201.         COM_METHOD( HRESULT ) ManagedToUnmanagedTransition( FunctionID functionID,
  202.                                                             COR_PRF_TRANSITION_REASON reason );
  203.                                                                   
  204.                                                                   
  205.          
  206.            //
  207.         // SUSPENSION EVENTS
  208.         //    
  209.         COM_METHOD( HRESULT ) RuntimeSuspendStarted( COR_PRF_SUSPEND_REASON suspendReason );
  210.  
  211.         COM_METHOD( HRESULT ) RuntimeSuspendFinished();
  212.  
  213.         COM_METHOD( HRESULT ) RuntimeSuspendAborted();
  214.  
  215.         COM_METHOD( HRESULT ) RuntimeResumeStarted();
  216.  
  217.         COM_METHOD( HRESULT ) RuntimeResumeFinished();
  218.  
  219.         COM_METHOD( HRESULT ) RuntimeThreadSuspended( ThreadID threadid );
  220.  
  221.         COM_METHOD( HRESULT ) RuntimeThreadResumed( ThreadID threadid );
  222.  
  223.            //
  224.         // GC EVENTS
  225.         //    
  226.         COM_METHOD( HRESULT ) MovedReferences( ULONG cmovedObjectIDRanges,
  227.                                                ObjectID oldObjectIDRangeStart[],
  228.                                                ObjectID newObjectIDRangeStart[],
  229.                                                ULONG cObjectIDRangeLength[] );
  230.     
  231.         COM_METHOD( HRESULT ) ObjectAllocated( ObjectID objectID,
  232.                                                ClassID classID );
  233.     
  234.         COM_METHOD( HRESULT ) ObjectsAllocatedByClass( ULONG classCount,
  235.                                                        ClassID classIDs[],
  236.                                                        ULONG objects[] );
  237.     
  238.         COM_METHOD( HRESULT ) ObjectReferences( ObjectID objectID,
  239.                                                 ClassID classID,
  240.                                                 ULONG cObjectRefs,
  241.                                                 ObjectID objectRefIDs[] );
  242.     
  243.         COM_METHOD( HRESULT ) RootReferences( ULONG cRootRefs,
  244.                                               ObjectID rootRefIDs[] );
  245.     
  246.     
  247.     
  248.           //
  249.         // EXCEPTION EVENTS
  250.         //                                                         
  251.  
  252.         // Exception creation
  253.         COM_METHOD( HRESULT ) ExceptionThrown( ObjectID thrownObjectID );
  254.  
  255.         // Search phase
  256.         COM_METHOD( HRESULT ) ExceptionSearchFunctionEnter( FunctionID functionID );
  257.     
  258.         COM_METHOD( HRESULT ) ExceptionSearchFunctionLeave();
  259.     
  260.         COM_METHOD( HRESULT ) ExceptionSearchFilterEnter( FunctionID functionID );
  261.     
  262.         COM_METHOD( HRESULT ) ExceptionSearchFilterLeave();
  263.     
  264.         COM_METHOD( HRESULT ) ExceptionSearchCatcherFound( FunctionID functionID );
  265.         
  266.         COM_METHOD( HRESULT ) ExceptionCLRCatcherFound();
  267.  
  268.         COM_METHOD( HRESULT ) ExceptionCLRCatcherExecute();
  269.  
  270.         COM_METHOD( HRESULT ) ExceptionOSHandlerEnter( FunctionID functionID );
  271.             
  272.         COM_METHOD( HRESULT ) ExceptionOSHandlerLeave( FunctionID functionID );
  273.     
  274.         // Unwind phase
  275.         COM_METHOD( HRESULT ) ExceptionUnwindFunctionEnter( FunctionID functionID );
  276.     
  277.         COM_METHOD( HRESULT ) ExceptionUnwindFunctionLeave();
  278.         
  279.         COM_METHOD( HRESULT ) ExceptionUnwindFinallyEnter( FunctionID functionID );
  280.     
  281.         COM_METHOD( HRESULT ) ExceptionUnwindFinallyLeave();
  282.         
  283.         COM_METHOD( HRESULT ) ExceptionCatcherEnter( FunctionID functionID,
  284.                                                      ObjectID objectID );
  285.     
  286.         COM_METHOD( HRESULT ) ExceptionCatcherLeave();
  287.  
  288.         
  289.         //
  290.         // COM CLASSIC VTable
  291.         //
  292.         COM_METHOD( HRESULT )  COMClassicVTableCreated( ClassID wrappedClassID,
  293.                                                                REFGUID implementedIID,
  294.                                                                void *pVTable,
  295.                                                                ULONG cSlots );
  296.  
  297.         COM_METHOD( HRESULT )  COMClassicVTableDestroyed( ClassID wrappedClassID,
  298.                                                                 REFGUID implementedIID,
  299.                                                                 void *pVTable );
  300.     
  301.         
  302.         //
  303.         // helper
  304.         //
  305.         static COM_METHOD( HRESULT) CreateObject( REFIID riid, void **ppInterface );            
  306.         
  307.                                                                                                      
  308.         // used by function hooks, they have to be static
  309.         static void  Enter( FunctionID functionID );
  310.         static void  Leave( FunctionID functionID );
  311.         static void  Tailcall( FunctionID functionID );
  312.         static UINT_PTR FunctionMapper( FunctionID funcId,
  313.                                         BOOL *pbHookFunction );
  314.     
  315.  
  316.     private:
  317.  
  318.         long m_refCount;                        
  319.         DWORD m_dwShutdown;
  320.  
  321. }; // ProfilerCallback
  322.  
  323. extern ProfilerCallback *g_pCallbackObject;
  324.  
  325. #endif //  __PROFILER_CALLBACK_H__
  326.  
  327. // End of File
  328.         
  329.         
  330.