hkMatchSnapshotStatisticsCollector.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:6k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #ifndef HK_MATCH_SNAPSHOT_STATISTICS_COLLECTOR_H
  9. #define HK_MATCH_SNAPSHOT_STATISTICS_COLLECTOR_H
  10. #include <Common/Base/DebugUtil/StatisticsCollector/hkStatisticsCollector.h>
  11. #include <Common/Base/Monitor/MonitorStreamAnalyzer/hkMonitorStreamAnalyzer.h>
  12. #include <Common/Base/Container/PointerMap/hkPointerMap.h>
  13. #include <Common/Base/Memory/StackTracer/hkStackTracer.h>
  14. #include <Common/Base/Memory/Memory/Debug/hkDebugMemory.h>
  15. class hkMatchSnapshotStatisticsCollector;
  16. class hkAllocationSet
  17. {
  18.     public:
  19.     HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_BASE, hkAllocationSet);
  20.     enum { MAX_ALLOCS = 8 };
  21.         /// Ctor
  22.     hkAllocationSet(const void* ptr,const hkDebugMemory::PointerInfo* info);
  23.         /// Add an allocation to this
  24.     void addAlloc(const void* ptr,const hkDebugMemory::PointerInfo* info);
  25.         /// Returns true if the allocations 'match' - in particular the stack trace matches
  26.     hkBool matches(int traceDepth,const void* ptr,const hkDebugMemory::PointerInfo* info);
  27.         /// Dump out the contained information
  28.     void dump(hkMatchSnapshotStatisticsCollector& collector);
  29.         /// Returns true if any part of the call stack contains the string
  30.     hkBool callStackContainsString(hkMatchSnapshotStatisticsCollector& collector,const hkString& in);
  31.         ///
  32.     hkString getCallStackString(hkMatchSnapshotStatisticsCollector& collector);
  33. /// more low level version of above functino
  34. void getCallStackString(hkMatchSnapshotStatisticsCollector& collector, char* buffer, int bufferLen );
  35.     static void HK_CALL _printFunc(const char*, void* context);
  36.     static void HK_CALL _concatFunc(const char* text, void* context);
  37.     //
  38.     // Members
  39.     //
  40.     int m_size;
  41.     int m_totalAllocs;
  42.         /// Number of pointers we have stored
  43.     hkUint8 m_numAllocs;
  44.     /// Allocations of this type
  45.     const void* m_allocs[MAX_ALLOCS];
  46.     /// Info
  47.     const hkDebugMemory::PointerInfo* m_info;
  48.     /// Linked to the next allocation
  49.     hkAllocationSet* m_next;
  50. };
  51. class hkMatchSnapshotStatisticsCollector: public hkStatisticsCollector
  52. {
  53. friend class hkAllocationSet;
  54. public:
  55.         enum { MAX_TRACE = 16 };
  56.             /// Ctor
  57.         hkMatchSnapshotStatisticsCollector(hkVtableClassRegistry* vtblReg, const hkDebugMemorySnapshot& snapshot,hkOstream& stream);
  58.         // hkStatisticsCollector interface
  59.         virtual void addReferencedObject(const char* fieldName, const hkReferencedObject* obj, int flags = 0);
  60.         virtual void addObject( const hkClass& cls, const char* fieldName, const void* obj, int flags = 0);
  61.         virtual void addChunk(MemoryType type, const char* name, const void* chunkAddress, int usedSize, int allocatedSize = 0);
  62. virtual void pushDir( const char* dirName ) {}
  63. virtual void popDir() {}
  64.             /// Dump how many are remaining
  65.         void dumpRemaining();
  66.             /// Marks all these allocations as already reached
  67. void addReached( const hkDebugMemorySnapshot& snapshot);
  68.             /// Get the strings that are ignored
  69.         hkObjectArray<hkString>& getCallStackIgnoreStrings() { return m_callStackIgnoreStrings; }
  70.             /// Add an ignore string
  71.         void addCallStackIgnoreString(const hkString& in);
  72. protected:
  73.         static void HK_CALL _printFunc(const char*, void* context);
  74.         static HK_FORCE_INLINE hkBool _compareAllocs( const hkAllocationSet* a, const hkAllocationSet* b )
  75. {
  76.             return (a->m_info->numBytes > b->m_info->numBytes);
  77.         }
  78.         hkBool _isKnown(const void* obj);
  79.         void _addKnown(const void* obj);
  80. hkBool _notReachable(const void* ptr);
  81. void _dumpStackTraceForUnknown(const void* ptr);
  82.         hkOstream& m_stream;
  83.         const hkDebugMemorySnapshot& m_snapshot;
  84.             /// Map of pointers
  85.         hkPointerMap<const void*, const hkDebugMemory::PointerInfo*> m_chunks;
  86.             /// As we traverse we can remove pointers that are reached
  87.         hkPointerMap<const void*, int> m_notReached;
  88.             /// Known objects
  89.         hkPointerMap<const void*, int> m_knownObjects;
  90. /// Stack tracer - for debugging where allocations are made
  91.         hkStackTracer m_tracer;
  92.             /// List of strings, which if found in the call stack will cause the
  93.             /// list to be ignored
  94.         hkObjectArray<hkString> m_callStackIgnoreStrings;
  95. };
  96. #endif // HK_MATCH_SNAPSHOT_STATISTICS_COLLECTOR_H
  97. /*
  98. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  99. * Confidential Information of Havok.  (C) Copyright 1999-2009
  100. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  101. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  102. * rights, and intellectual property rights in the Havok software remain in
  103. * Havok and/or its suppliers.
  104. * Use of this software for evaluation purposes is subject to and indicates
  105. * acceptance of the End User licence Agreement for this product. A copy of
  106. * the license is included with this software and is also available at www.havok.com/tryhavok.
  107. */