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

  1. /****************************************************************************************
  2.  * Copyright (c) 1999 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 "ProfilerBase.h"
  16. #include "ProfilerHelper.h"
  17.  
  18.  
  19. /***************************************************************************************
  20.  ********************                                               ********************
  21.  ********************       ProfilerCallback Declaration            ********************
  22.  ********************                                               ********************
  23.  ***************************************************************************************/
  24.  
  25. class ProfilerCallback : 
  26.     public ICorProfilerCallback, 
  27.     public PrfInfo
  28. {
  29.     public:
  30.     
  31.         ProfilerCallback();
  32.         ~ProfilerCallback();
  33.  
  34.  
  35.     public:
  36.  
  37.         //
  38.         // IUnknown 
  39.         //
  40.         COM_METHOD( ULONG ) AddRef(); 
  41.         COM_METHOD( ULONG ) Release();
  42.         COM_METHOD( HRESULT ) QueryInterface( REFIID riid, void **ppInterface );
  43.  
  44.         //
  45.         // STARTUP/SHUTDOWN EVENTS
  46.         //
  47.         virtual COM_METHOD( HRESULT ) Initialize( IUnknown *pICorProfilerInfoUnk,
  48.                                                   DWORD *pdwRequestedEvents );
  49.                                           
  50.         COM_METHOD( HRESULT ) Shutdown();
  51.         HRESULT DllExitShutdown();
  52.                                          
  53.  
  54.         //
  55.          // APPLICATION DOMAIN EVENTS
  56.         //
  57.            COM_METHOD( HRESULT ) AppDomainCreationStarted( AppDomainID appDomainID );
  58.         
  59.         COM_METHOD( HRESULT ) AppDomainCreationFinished( AppDomainID appDomainID,
  60.                                                          HRESULT hrStatus );
  61.     
  62.         COM_METHOD( HRESULT ) AppDomainShutdownStarted( AppDomainID appDomainID );
  63.  
  64.         COM_METHOD( HRESULT ) AppDomainShutdownFinished( AppDomainID appDomainID, 
  65.                                                          HRESULT hrStatus );
  66.  
  67.         //
  68.          // ASSEMBLY EVENTS
  69.         //
  70.            COM_METHOD( HRESULT ) AssemblyLoadStarted( AssemblyID assemblyID );
  71.         
  72.         COM_METHOD( HRESULT ) AssemblyLoadFinished( AssemblyID assemblyID,
  73.                                                     HRESULT hrStatus );
  74.     
  75.         COM_METHOD( HRESULT ) AssemblyUnloadStarted( AssemblyID assemblyID );
  76.  
  77.         COM_METHOD( HRESULT ) AssemblyUnloadFinished( AssemblyID assemblyID, 
  78.                                                       HRESULT hrStatus );
  79.         
  80.         
  81.         //
  82.          // MODULE EVENTS
  83.         //
  84.            COM_METHOD( HRESULT ) ModuleLoadStarted( ModuleID moduleID );
  85.         
  86.         COM_METHOD( HRESULT ) ModuleLoadFinished( ModuleID moduleID,
  87.                                                   HRESULT hrStatus );
  88.     
  89.         COM_METHOD( HRESULT ) ModuleUnloadStarted( ModuleID moduleID );
  90.  
  91.         COM_METHOD( HRESULT ) ModuleUnloadFinished( ModuleID moduleID, 
  92.                                                     HRESULT hrStatus );
  93.  
  94.         COM_METHOD( HRESULT ) ModuleAttachedToAssembly( ModuleID moduleID,
  95.                                                         AssemblyID assemblyID );
  96.                 
  97.         
  98.         //
  99.         // CLASS EVENTS
  100.         //
  101.         COM_METHOD( HRESULT ) ClassLoadStarted( ClassID classID );
  102.         
  103.         COM_METHOD( HRESULT ) ClassLoadFinished( ClassID classID,
  104.                                                  HRESULT hrStatus );
  105.     
  106.          COM_METHOD( HRESULT ) ClassUnloadStarted( ClassID classID );
  107.  
  108.         COM_METHOD( HRESULT ) ClassUnloadFinished( ClassID classID, 
  109.                                                    HRESULT hrStatus );
  110.  
  111.         COM_METHOD( HRESULT ) FunctionUnloadStarted( FunctionID functionID );
  112.         
  113.         
  114.         //
  115.         // JIT EVENTS
  116.         //              
  117.         COM_METHOD( HRESULT ) JITCompilationStarted( FunctionID functionID,
  118.                                                      BOOL fIsSafeToBlock );
  119.                                         
  120.         COM_METHOD( HRESULT ) JITCompilationFinished( FunctionID functionID,
  121.                                                       HRESULT hrStatus,
  122.                                                       BOOL fIsSafeToBlock );
  123.     
  124.         COM_METHOD( HRESULT ) JITCachedFunctionSearchStarted( FunctionID functionID,
  125.                                                               BOOL *pbUseCachedFunction );
  126.         
  127.         COM_METHOD( HRESULT ) JITCachedFunctionSearchFinished( FunctionID functionID,
  128.                                                                COR_PRF_JIT_CACHE result );
  129.                                                                      
  130.         COM_METHOD( HRESULT ) JITFunctionPitched( FunctionID functionID );
  131.         
  132.         COM_METHOD( HRESULT ) JITInlining( FunctionID callerID,
  133.                                            FunctionID calleeID,
  134.                                            BOOL *pfShouldInline );
  135.  
  136.         
  137.         //
  138.         // THREAD EVENTS
  139.         //
  140.            COM_METHOD( HRESULT ) ThreadAcquiringMonitor( ThreadID threadID,
  141.                                                       MonitorID monitorID,
  142.                                                       ObjectID objectID,
  143.                                                       ClassID classID );
  144.     
  145.         COM_METHOD( HRESULT ) ThreadAcquiredMonitor( ThreadID threadID,
  146.                                                      MonitorID monitorID,
  147.                                                      ObjectID objectID,
  148.                                                      ClassID classID );
  149.     
  150.         COM_METHOD( HRESULT ) ThreadBlockedMonitor( ThreadID threadID,
  151.                                                     MonitorID monitorID,
  152.                                                     ObjectID objectID,
  153.                                                     ClassID classID );
  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.         COM_METHOD( HRESULT ) ThreadReleasedMonitor( ThreadID threadID,
  163.                                                      MonitorID monitorID,
  164.                                                      ObjectID objectID,
  165.                                                      ClassID classID );
  166.  
  167.         
  168.         
  169.            //
  170.         // REMOTING EVENTS
  171.         //                                                      
  172.  
  173.         //
  174.         // Client-side events
  175.         //
  176.  
  177.         COM_METHOD( HRESULT ) RemotingClientInvocationStarted();
  178.  
  179.         COM_METHOD( HRESULT ) RemotingClientSendingMessage( GUID *pCookie,
  180.                                                             BOOL fIsAsync );
  181.  
  182.         COM_METHOD( HRESULT ) RemotingClientReceivingReply( GUID *pCookie,
  183.                                                             BOOL fIsAsync );
  184.  
  185.         COM_METHOD( HRESULT ) RemotingClientInvocationFinished();
  186.  
  187.         //
  188.         // Server-side events
  189.         //
  190.  
  191.         COM_METHOD( HRESULT ) RemotingServerReceivingMessage( GUID *pCookie,
  192.                                                               BOOL fIsAsync );
  193.  
  194.         COM_METHOD( HRESULT ) RemotingServerInvocationStarted();
  195.  
  196.         COM_METHOD( HRESULT ) RemotingServerInvocationReturned();
  197.  
  198.         COM_METHOD( HRESULT ) RemotingServerSendingReply( GUID *pCookie,
  199.                                                           BOOL fIsAsync );
  200.  
  201.  
  202.            //
  203.         // CONTEXT EVENTS
  204.         //                                                      
  205.         COM_METHOD( HRESULT ) UnmanagedToManagedTransition( FunctionID functionID,
  206.                                                             COR_PRF_TRANSITION_REASON reason );
  207.     
  208.         COM_METHOD( HRESULT ) ManagedToUnmanagedTransition( FunctionID functionID,
  209.                                                             COR_PRF_TRANSITION_REASON reason );
  210.                                                                   
  211.                                                                   
  212.          
  213.            //
  214.         // SUSPENSION EVENTS
  215.         //    
  216.         COM_METHOD( HRESULT ) RuntimeSuspendStarted( COR_PRF_SUSPEND_REASON suspendReason );
  217.  
  218.         COM_METHOD( HRESULT ) RuntimeSuspendFinished();
  219.  
  220.         COM_METHOD( HRESULT ) RuntimeSuspendAborted();
  221.  
  222.         COM_METHOD( HRESULT ) RuntimeResumeStarted();
  223.  
  224.         COM_METHOD( HRESULT ) RuntimeResumeFinished();
  225.  
  226.         COM_METHOD( HRESULT ) RuntimeThreadSuspended( ThreadID threadid );
  227.  
  228.         COM_METHOD( HRESULT ) RuntimeThreadResumed( ThreadID threadid );
  229.  
  230.            //
  231.         // GC EVENTS
  232.         //    
  233.         COM_METHOD( HRESULT ) MovedReferences( ULONG movedObjectRefs,
  234.                                                ObjectID oldObjectRefs[],
  235.                                                ObjectID newObjectRefs[],
  236.                                                ULONG objectRefSize[] );
  237.     
  238.         COM_METHOD( HRESULT ) ObjectAllocated( ObjectID objectID,
  239.                                                ClassID classID );
  240.     
  241.         COM_METHOD( HRESULT ) ObjectsAllocatedByClass( ULONG classCount,
  242.                                                        ClassID classIDs[],
  243.                                                        ULONG objects[] );
  244.     
  245.         COM_METHOD( HRESULT ) ObjectReferences( ObjectID objectID,
  246.                                                 ClassID classID,
  247.                                                 ULONG cObjectRefs,
  248.                                                 ObjectID objectRefIDs[] );
  249.     
  250.         COM_METHOD( HRESULT ) RootReferences( ULONG cRootRefs,
  251.                                               ObjectID rootRefIDs[] );
  252.     
  253.     
  254.     
  255.         //
  256.         // SECURITY EVENTS
  257.         //
  258.         COM_METHOD( HRESULT ) SecurityCheck( ThreadID threadID );                                                                                                     
  259.                 
  260.         
  261.           //
  262.         // EXCEPTION EVENTS
  263.         //                                                         
  264.  
  265.         // Exception creation
  266.         COM_METHOD( HRESULT ) ExceptionThrown( ObjectID thrownObjectID );
  267.  
  268.         // Search phase
  269.         COM_METHOD( HRESULT ) ExceptionSearchFunctionEnter( FunctionID functionID );
  270.     
  271.         COM_METHOD( HRESULT ) ExceptionSearchFunctionLeave();
  272.     
  273.         COM_METHOD( HRESULT ) ExceptionSearchFilterEnter( FunctionID functionID );
  274.     
  275.         COM_METHOD( HRESULT ) ExceptionSearchFilterLeave();
  276.     
  277.         COM_METHOD( HRESULT ) ExceptionSearchCatcherFound( FunctionID functionID );
  278.         
  279.         COM_METHOD( HRESULT ) ExceptionOSHandlerEnter( FunctionID functionID );
  280.             
  281.         COM_METHOD( HRESULT ) ExceptionOSHandlerLeave( FunctionID functionID );
  282.     
  283.         // Unwind phase
  284.         COM_METHOD( HRESULT ) ExceptionUnwindFunctionEnter( FunctionID functionID );
  285.     
  286.         COM_METHOD( HRESULT ) ExceptionUnwindFunctionLeave();
  287.         
  288.         COM_METHOD( HRESULT ) ExceptionUnwindFinallyEnter( FunctionID functionID );
  289.     
  290.         COM_METHOD( HRESULT ) ExceptionUnwindFinallyLeave();
  291.         
  292.         COM_METHOD( HRESULT ) ExceptionCatcherEnter( FunctionID functionID,
  293.                                                      ObjectID objectID );
  294.     
  295.         COM_METHOD( HRESULT ) ExceptionCatcherLeave();
  296.  
  297.         
  298.         //
  299.         // COM CLASSIC WRAPPER
  300.         //
  301.         COM_METHOD( HRESULT )  COMClassicWrapperCreated( ClassID wrappedClassID,
  302.                                                                REFGUID implementedIID,
  303.                                                                void *pUnknown,
  304.                                                                ULONG cSlots );
  305.  
  306.         COM_METHOD( HRESULT )  COMClassicWrapperDestroyed( ClassID wrappedClassID,
  307.                                                                 REFGUID implementedIID,
  308.                                                                 void *pUnknown );
  309.     
  310.         
  311.         //
  312.         // helper
  313.         //
  314.         static COM_METHOD( HRESULT) CreateObject( REFIID riid, void **ppInterface );            
  315.         
  316.                                                                                                      
  317.         // used by function hooks, they have to be static
  318.         static void  Enter( FunctionID functionID );
  319.         static void  Leave( FunctionID functionID );
  320.         static void  Tailcall( FunctionID functionID );
  321.         static UINT_PTR FunctionMapper( FunctionID funcId,
  322.                                         BOOL *pbHookFunction );
  323.     
  324.  
  325.     private:
  326.  
  327.         long m_refCount;                        
  328.         DWORD m_dwShutdown;
  329.  
  330. }; // ProfilerCallback
  331.  
  332. extern ProfilerCallback *g_pCallbackObject;
  333. extern CRITICAL_SECTION g_criticalSection;
  334.  
  335. #endif //  __PROFILER_CALLBACK_H__
  336.  
  337. // End of File
  338.         
  339.         
  340.