home *** CD-ROM | disk | FTP | other *** search
- // hpmnclnt.hpp
- //
- // Created 10/04/98
- //
- // (C)Copyright 1998-1999 Microsoft Corporation, All rights reserved.
- //
-
- #ifndef __HPMNCLNT_HPP__
- #define __HPMNCLNT_HPP__
-
- #include "ids.hpp"
-
-
- // Masks for types of information required while the client is registered
-
- #define HMC_INFO_HEAP_ROOTS 0x00000001
- #define HMC_INFO_HEAP_ROOT_REFS 0x00000002
- #define HMC_INFO_HEAP_OBJECTS 0x00000004
- #define HMC_INFO_HEAP_OBJECT_REFS 0x00000008
- #define HMC_INFO_COUNT_MONITORS 0x00000010
-
- // Information that is collected via IHeapInfoCallback
- #define HMC_ALL_HEAPCB_INFO ( HMC_INFO_HEAP_ROOTS \
- | HMC_INFO_HEAP_ROOT_REFS \
- | HMC_INFO_HEAP_OBJECTS \
- | HMC_INFO_HEAP_OBJECT_REFS \
- | HMC_INFO_COUNT_MONITORS)
-
- #define HMC_ALL_INFO (-1)
-
-
- // Masks for internal events
-
- #define HMC_THREAD_EVENTS 0x00000001
- #define HMC_CLASS_EVENTS 0x00000002
- // Implies (HMC_INFO_HEAP_ROOTS | HMC_INFO_HEAP_ROOT_REFS)
- #define HMC_ROOT_EVENTS 0x00000004
- // Implies (HMC_INFO_HEAP_OBJECTS | HMC_INFO_HEAP_OBJECT_REFS)
- #define HMC_OBJECT_EVENTS 0x00000008
- // Implies (HMC_INFO_HEAP_ROOTS | HMC_INFO_HEAP_OBJECTS)
- #define HMC_HEAP_EVENTS 0x00000010
- #define HMC_UNMASKABLE_EVENTS 0x00000020
-
- // Events that cannot be specified in StoppedEventMask - they may be sent at
- // any time
- #define HMC_NON_GC_EVENTS ( HMC_THREAD_EVENTS \
- | HMC_CLASS_EVENTS)
-
- #define HMC_ALL_EVENTS (-1)
-
-
- struct HeapMonitorClientRegistrationInfo
- {
- // Events to send at each gc
- DWORD EventMask;
-
- // Information to collect at each gc
- DWORD InfoMask;
-
- // Events to send when stopped
- DWORD StoppedEventMask;
-
- // Information to collect when stopped
- DWORD StoppedInfoMask;
- };
-
-
- struct RootReferencesEventInfo
- {
- CONTAINER_TYPE type;
- UniqueID id1;
- UniqueID id2;
- unsigned nrefs;
- const ObjectID *rgrefs;
- const DWORD *rgflags;
- ID rootid;
- };
-
-
- #undef INTERFACE
- #define INTERFACE IHeapMonitorClient
-
- DECLARE_INTERFACE_(IHeapMonitorClient, IUnknown)
- {
- // Events that are always sent:
-
- // Execution has stopped.
- STDMETHOD(OnStoppedExecution)(THIS) PURE;
- // Execution is about to resume.
- STDMETHOD(OnResumeExecution)(THIS) PURE;
-
- // Main window is about to be closed.
- STDMETHOD(OnClose)(THIS) PURE;
-
-
- // Events enabled by HMC_THREAD_EVENTS:
-
- // A thread was created.
- STDMETHOD(OnThreadCreated)(THIS_
- IN THREADID thread) PURE;
- // A thread is about to be destroyed.
- STDMETHOD(OnDestroyThread)(THIS_
- IN THREADID thread) PURE;
-
-
- // Events enabled by HMC_CLASS_EVENTS:
-
- // A package was created. (Packages are internal notions, simply for
- // presentation purposes - they don't map from any VM events, and are
- // never destroyed.)
- STDMETHOD(OnPackageCreated)(THIS_
- IN PKGID pkg) PURE;
-
- // A class was loaded.
- STDMETHOD(OnClassLoaded)(THIS_
- IN CLASSID cls) PURE;
- // A class is about to be unloaded.
- STDMETHOD(OnUnloadClass)(THIS_
- IN CLASSID cls) PURE;
-
-
- // Events enabled by HMC_ROOT_EVENTS:
-
- // Heap root discovered. Multiple calls may be received for the same root.
- STDMETHOD(RootReferences)(THIS_
- IN RootReferencesEventInfo *pinfo) PURE;
-
-
- // Events enabled by HMC_OBJECT_EVENTS:
-
- // An "interesting" object was discovered, or the user did something with
- // this object that all clients might like to know about.
- STDMETHOD(OnObjectStatusChange)(THIS_
- IN OBJID id) PURE;
-
-
- // Events enabled by HMC_HEAP_EVENTS:
-
- // All roots have been discovered.
- STDMETHOD(RootDiscoveryComplete)(THIS) PURE;
- // All objects have been discovered.
- STDMETHOD(ObjectDiscoveryComplete)(THIS) PURE;
- };
-
-
- // For copy-and-paste convenience.
- #if 0
- //------------------------------------------------------------------------
-
- // IHeapMonitorClient methods
-
- STDMETHODIMP OnStoppedExecution ()
- {
- return S_OK;
- }
-
- STDMETHODIMP OnResumeExecution ()
- {
- return S_OK;
- }
-
- STDMETHODIMP OnClose ()
- {
- return S_OK;
- }
-
- STDMETHODIMP OnThreadCreated (THREADID thread)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP OnDestroyThread (THREADID thread)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP OnPackageCreated (PKGID pkg)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP OnClassLoaded (CLASSID cls)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP OnUnloadClass (CLASSID cls)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP RootReferences (RootReferencesEventInfo *pinfo)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP OnObjectStatusChange (OBJID id)
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP RootDiscoveryComplete ()
- {
- return E_UNEXPECTED;
- }
-
- STDMETHODIMP ObjectDiscoveryComplete ()
- {
- return E_UNEXPECTED;
- }
- #endif
-
-
- #endif /* __HPMNCLNT_HPP__ */
-
-