home *** CD-ROM | disk | FTP | other *** search
- // heapview.hpp
- //
- // Created 10/04/98
- //
- // (C)Copyright 1998-1999 Microsoft Corporation, All rights reserved.
- //
-
- #ifndef __HEAPVIEW_HPP__
- #define __HEAPVIEW_HPP__
-
- #include "objview.hpp"
- #include "hpmonmgr.hpp"
-
-
- enum HeapViewerEvents
- {
- WM_HVEVENT_THREAD_CREATED = WM_OVEVENT_LAST,
- WM_HVEVENT_THREAD_DESTROYED,
-
- WM_HVEVENT_NEW_PACKAGE,
- WM_HVEVENT_CLASS_LOADED,
- WM_HVEVENT_CLASS_UNLOADED,
-
- WM_HVEVENT_ROOT_REFERENCES,
- };
-
-
- class HeapViewer : public ObjectViewer
- {
- private:
-
- // Tree roots
- HTREEITEM m_htiClasses;
- HTREEITEM m_htiThreads;
- HTREEITEM m_htiObjects;
- HTREEITEM m_htiRoots;
-
- // Execution is suspended
- BOOL m_fStopped;
-
-
- //------------------------------------------------------------------------
- // Synchronization. Shares critical section with enclosing MDI frame.
-
- VOID Enter ()
- {
- m_mgr->Enter();
- }
-
- VOID Leave ()
- {
- m_mgr->Leave();
- }
-
- #ifdef DEBUG
- BOOL Entered ()
- {
- return m_mgr->Entered();
- }
- #endif
-
-
- //------------------------------------------------------------------------
-
- BOOL IsRunning ()
- {
- ASSERT(Entered());
- return !m_fStopped;
- }
-
- BOOL IsStopped ()
- {
- return !IsRunning();
- }
-
-
- //------------------------------------------------------------------------
- // UI manipulation
-
- LRESULT CALLBACK WndProc (HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam);
-
- static int PopulateTreeCB (ID id, PVOID token);
- static int PopulateRootObjectsCB (ID id, ObjectID refvmid, PVOID token);
-
-
- //------------------------------------------------------------------------
- // Tree-specific stuff
-
- HTREEITEM GetRootForThreads ();
- HTREEITEM GetRootForClasses ();
- HTREEITEM GetRootForPackage (PKGID pkg);
- HTREEITEM GetRootForObjects ();
- HTREEITEM GetRootForRoots ();
-
- HTREEITEM GetTreeItemForThread (THREADID thd);
- HTREEITEM GetTreeItemForClass (CLASSID cls);
- HTREEITEM GetTreeItemForRoot (ROOTID root);
- HTREEITEM GetTreeItemForStackFrame (HTREEITEM htiThread, STACKID frm);
- HTREEITEM GetTreeItemForStackFrame (STACKID frm);
- HTREEITEM GetTreeItemForID (ID id);
-
- HTREEITEM AddNewThread (THREADID thd);
-
- BOOL AddRootReferences (RootReferencesEventInfo *pinfo);
-
-
- //------------------------------------------------------------------------
-
- // IHeapMonitorClient methods
-
- STDMETHODIMP OnStoppedExecution ()
- {
- // Block until the UI thread has done whatever it might be doing while (!m_fStopped).
- Enter();
- {
- m_fStopped = m_mgr->IsStopped_Safe();
- }
- Leave();
-
- return ObjectViewer::OnStoppedExecution();
- }
-
- STDMETHODIMP OnResumeExecution ()
- {
- // Block until the UI thread has done whatever it might be doing while (m_fStopped).
- Enter();
- {
- m_fStopped = FALSE;
- }
- Leave();
-
- if (m_htiObjects != NULL && m_htiObjects != TVI_ROOT)
- DeleteTreeItem(m_htiObjects);
- m_htiObjects = NULL;
-
- return ObjectViewer::OnResumeExecution();
- }
-
- STDMETHODIMP OnThreadCreated (THREADID thread)
- {
- SendMessage(m_hwnd, WM_HVEVENT_THREAD_CREATED, 0, (LPARAM)thread);
- return ObjectViewer::OnThreadCreated(thread);
- }
-
- STDMETHODIMP OnDestroyThread (THREADID thread)
- {
- if (m_htiThreads)
- SendMessage(m_hwnd, WM_HVEVENT_THREAD_DESTROYED, 0, (LPARAM)thread);
- return ObjectViewer::OnDestroyThread(thread);
- }
-
- STDMETHODIMP OnPackageCreated (PKGID pkg)
- {
- SendMessage(m_hwnd, WM_HVEVENT_NEW_PACKAGE, 0, (LPARAM)pkg);
- return ObjectViewer::OnPackageCreated(pkg);
- }
-
- STDMETHODIMP OnClassLoaded (CLASSID cls)
- {
- SendMessage(m_hwnd, WM_HVEVENT_CLASS_LOADED, 0, (LPARAM)cls);
- return ObjectViewer::OnClassLoaded(cls);
- }
-
- STDMETHODIMP OnUnloadClass (CLASSID cls)
- {
- SendMessage(m_hwnd, WM_HVEVENT_CLASS_UNLOADED, 0, (LPARAM)cls);
- return ObjectViewer::OnUnloadClass(cls);
- }
-
- STDMETHODIMP RootReferences (RootReferencesEventInfo *pinfo)
- {
- if (m_fStopped)
- SendMessage(m_hwnd, WM_HVEVENT_ROOT_REFERENCES, 0, (LPARAM)pinfo);
- return ObjectViewer::RootReferences(pinfo);
- }
-
- //STDMETHODIMP OnObjectStatusChange (OBJID id)
-
- STDMETHODIMP RootDiscoveryComplete ()
- {
- if (m_fStopped)
- RedrawTree();
- return S_OK;
- }
-
- STDMETHODIMP ObjectDiscoveryComplete ()
- {
- return S_OK;
- }
-
-
- //------------------------------------------------------------------------
-
- public:
-
- HeapViewer ();
-
- BOOL Initialize (HeapMonitorManager *mgr);
- };
-
-
-
- #endif /* __HEAPVIEW_HPP__ */
-
-