|
|
|
|
//========= Copyright <EFBFBD> 1996-2005, Valve Corporation, All rights reserved. ============//
|
|
|
|
|
//
|
|
|
|
|
// Purpose:
|
|
|
|
|
//
|
|
|
|
|
// $NoKeywords: $
|
|
|
|
|
//=============================================================================//
|
|
|
|
|
|
|
|
|
|
#include "pch_tier0.h"
|
|
|
|
|
#include "vstdlib/pch_vstdlib.h"
|
|
|
|
|
|
|
|
|
|
// NOTE: This has to be the last file included!
|
|
|
|
|
#include "tier0/memdbgon.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef DBGFLAG_VALIDATE
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Purpose: Initializer
|
|
|
|
|
// Input: pchType - Type of the object we represent.
|
|
|
|
|
// WARNING: pchType must be a static (since we keep a copy of it around for a while)
|
|
|
|
|
// pvObj - Pointer to the object we represent
|
|
|
|
|
// pchName - Name of the individual object we represent
|
|
|
|
|
// WARNING: pchName must be a static (since we keep a copy of it around for a while)
|
|
|
|
|
// pValObjectparent- Our parent object (ie, the object that our object is a member of)
|
|
|
|
|
// pValObjectPrev - Object that precedes us in the linked list (we're
|
|
|
|
|
// always added to the end)
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
void CValObject::Init( tchar *pchType, void *pvObj, tchar *pchName,
|
|
|
|
|
CValObject *pValObjectParent, CValObject *pValObjectPrev )
|
|
|
|
|
{
|
|
|
|
|
m_nUser = 0;
|
|
|
|
|
|
|
|
|
|
// Initialize pchType:
|
|
|
|
|
if ( NULL != pchType )
|
|
|
|
|
{
|
|
|
|
|
V_strncpy( m_rgchType, pchType, (int) ( sizeof(m_rgchType) / sizeof(*m_rgchType) ) );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_rgchType[0] = '\0';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_pvObj = pvObj;
|
|
|
|
|
|
|
|
|
|
// Initialize pchName:
|
|
|
|
|
if ( NULL != pchName )
|
|
|
|
|
{
|
|
|
|
|
V_strncpy( m_rgchName, pchName, sizeof(m_rgchName) / sizeof(*m_rgchName) );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_rgchName[0] = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_pValObjectParent = pValObjectParent;
|
|
|
|
|
|
|
|
|
|
if ( NULL == pValObjectParent )
|
|
|
|
|
m_nLevel = 0;
|
|
|
|
|
else
|
|
|
|
|
m_nLevel = pValObjectParent->NLevel( ) + 1;
|
|
|
|
|
|
|
|
|
|
m_cpubMemSelf = 0;
|
|
|
|
|
m_cubMemSelf = 0;
|
|
|
|
|
m_cpubMemTree = 0;
|
|
|
|
|
m_cubMemTree = 0;
|
|
|
|
|
|
|
|
|
|
// Insert us at the back of the linked list
|
|
|
|
|
if ( NULL != pValObjectPrev )
|
|
|
|
|
{
|
|
|
|
|
Assert( NULL == pValObjectPrev->m_pValObjectNext );
|
|
|
|
|
pValObjectPrev->m_pValObjectNext = this;
|
|
|
|
|
}
|
|
|
|
|
m_pValObjectNext = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Purpose: Destructor
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
CValObject::~CValObject( )
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Purpose: The object we represent has claimed direct ownership of a block of
|
|
|
|
|
// memory. Record that we own it.
|
|
|
|
|
// Input: pvMem - Address of the memory block
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
void CValObject::ClaimMemoryBlock( void *pvMem )
|
|
|
|
|
{
|
|
|
|
|
// Get the memory block header
|
|
|
|
|
CMemBlockHdr *pMemBlockHdr = CMemBlockHdr::PMemBlockHdrFromPvUser( pvMem );
|
|
|
|
|
pMemBlockHdr->CheckValid( );
|
|
|
|
|
|
|
|
|
|
// Update our counters
|
|
|
|
|
m_cpubMemSelf++;
|
|
|
|
|
m_cubMemSelf+= pMemBlockHdr->CubUser( );
|
|
|
|
|
m_cpubMemTree++;
|
|
|
|
|
m_cubMemTree+= pMemBlockHdr->CubUser( );
|
|
|
|
|
|
|
|
|
|
// If we have a parent object, let it know about the memory (it'll recursively call up the tree)
|
|
|
|
|
if ( NULL != m_pValObjectParent )
|
|
|
|
|
m_pValObjectParent->ClaimChildMemoryBlock( pMemBlockHdr->CubUser( ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Purpose: A child of ours has claimed ownership of a memory block. Make
|
|
|
|
|
// a note of it, and pass the message back up the tree.
|
|
|
|
|
// Input: cubUser - Size of the memory block
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
void CValObject::ClaimChildMemoryBlock( int cubUser )
|
|
|
|
|
{
|
|
|
|
|
m_cpubMemTree++;
|
|
|
|
|
m_cubMemTree += cubUser;
|
|
|
|
|
|
|
|
|
|
if ( NULL != m_pValObjectParent )
|
|
|
|
|
m_pValObjectParent->ClaimChildMemoryBlock( cubUser );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif // DBGFLAG_VALIDATE
|