hkMonitorStream.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 HKBASE_HKMONITOR_STREAM_H
  9. #define HKBASE_HKMONITOR_STREAM_H
  10. class hkBool;
  11. #include <Common/Base/Config/hkConfigMonitors.h>
  12. #include <Common/Base/Config/hkConfigThread.h>
  13. #include <Common/Base/Thread/Thread/hkThreadLocalData.h>
  14. struct hkTimerData
  15. {
  16. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_DEMO, hkTimerData);
  17. const char* m_streamBegin;
  18. const char* m_streamEnd;
  19. };
  20. /// This class is used to capture all monitor information for a single frame. 
  21. /// You can use monitors with the following macros
  22. ///
  23. /// HK_TIMER_BEGIN( NAME, OBJECT )
  24. /// HK_TIMER_END()
  25. ///
  26. /// HK_TIMER_BEGIN_LIST( NAME, OBJECT )
  27. /// HK_TIMER_SPLIT_LIST( NAME )
  28. /// HK_TIMER_END_LIST(  )
  29. ///
  30. /// HK_MONITOR_PUSH_DIR( PATH )
  31. /// HK_MONITOR_POP_DIR()
  32. /// HK_MONITOR_ADD_VALUE( NAME, VALUE, MONITOR_TYPE ) 
  33. ///
  34. /// You can use the hkMonitorStreamAnalyzer to store multiple frames
  35. /// and to pretty print the information.<br>
  36. /// Notes:
  37. ///  - You must initialize this class on a per thread basis after calling hkBaseSystem::init or hkBaseSystem::initThread
  38. ///  - The hkMonitorStreamAnalyzer is singled threaded
  39. ///  - The hkMonitorStreamAnalyzer has utilities for analysing multiple monitor streams for use in a multithreaded environment
  40. class hkMonitorStream 
  41. {
  42. public:
  43. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR(HK_MEMORY_CLASS_MONITOR, hkMonitorStream);
  44. static hkMonitorStream* getInstancePtr()
  45. {
  46. extern HK_THREAD_LOCAL( hkMonitorStream* ) hkMonitorStream__m_instance;
  47. return HK_THREAD_LOCAL_GET(hkMonitorStream__m_instance);
  48. }
  49. static hkMonitorStream& getInstance()
  50. {
  51. extern HK_THREAD_LOCAL( hkMonitorStream* ) hkMonitorStream__m_instance;
  52. return *HK_THREAD_LOCAL_GET(hkMonitorStream__m_instance);
  53. }
  54. /// Clear all memory. This must be called per thread, before each frame.
  55. void HK_CALL reset();
  56. /// Sets the size of the stream used. By default the stream size is 0. If this is the
  57. /// case, or if the stream is full, no monitors are captured.
  58. void HK_CALL resize( int newSize );
  59. public:
  60. //
  61. // These methods are for internal use only, and are called by the macros listed above.
  62. //
  63. // get the pointer to the beginning of the memory used for timers
  64. HK_FORCE_INLINE char* HK_CALL getStart() { return m_start.val(); } 
  65. // get the pointer to the current write pointer
  66. HK_FORCE_INLINE char* HK_CALL getEnd() { return m_end.val(); } 
  67. // get the pointer to the end of the timer memory minus 16
  68. HK_FORCE_INLINE char* HK_CALL getCapacityMinus16() { return m_capacityMinus16.val(); } 
  69. // get the pointer to the capacity of timer memory
  70. HK_FORCE_INLINE char* HK_CALL getCapacity() { return m_capacity.val(); } 
  71. // Check whether at least 16 bytes are free
  72. HK_FORCE_INLINE hkBool HK_CALL memoryAvailable( ) 
  73. return getEnd() < getCapacityMinus16(); 
  74. }
  75. HK_FORCE_INLINE int HK_CALL getCurrentMonitorDataSize()
  76. {
  77. return (int)(m_end.val() - m_start.val());
  78. }
  79. // get a piece of memory from the timer memory 
  80. HK_FORCE_INLINE void* HK_CALL expandby( int size ) { char* h = m_end.val(); char* newEnd = h + size; m_end = newEnd; return h; }
  81. // set the pointer to the current write pointer
  82. HK_FORCE_INLINE void HK_CALL setEnd(char* ptr) {  m_end = ptr; } 
  83. // is the buffer allocated on the heap or not 
  84. HK_FORCE_INLINE hkBool HK_CALL isBufferAllocatedOnTheHeap() { return m_isBufferAllocatedOnTheHeap; }
  85. // set the buffer to be a static, preallocated, buffer
  86. void HK_CALL setStaticBuffer( char* buffer, int bufferSize );
  87. public:
  88. // Called by hkBaseSystem
  89. static void HK_CALL init();
  90. // Called by hkBaseSystem
  91. void HK_CALL quit();
  92. public:
  93. hkPadSpu<char*> m_start;
  94. hkPadSpu<char*> m_end;
  95. hkPadSpu<char*> m_capacity;
  96. hkPadSpu<char*> m_capacityMinus16;
  97. hkBool m_isBufferAllocatedOnTheHeap;
  98. public:
  99. struct Command
  100. {
  101. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MONITOR, hkMonitorStream::Command );
  102. const char* m_commandAndMonitor;
  103. };
  104. struct AddValueCommand : public hkMonitorStream::Command
  105. {
  106. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MONITOR, hkMonitorStream::AddValueCommand );
  107. float m_value;
  108. };
  109. struct TimerCommand : public hkMonitorStream::Command
  110. {
  111. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MONITOR, hkMonitorStream::TimerCommand );
  112. hkUint32 m_time0;
  113. hkUint32 m_time1;
  114. HK_FORCE_INLINE void setTime();
  115. };
  116. struct TimerBeginListCommand : public hkMonitorStream::TimerCommand
  117. {
  118. HK_DECLARE_NONVIRTUAL_CLASS_ALLOCATOR( HK_MEMORY_CLASS_MONITOR, hkMonitorStream::TimerBeginListCommand );
  119. const char* m_nameOfFirstSplit;
  120. };
  121. };
  122. #include <Common/Base/Monitor/hkMonitorStream.inl>
  123. #endif // HKBASE_HKMONITOR_STREAM_H
  124. /*
  125. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  126. * Confidential Information of Havok.  (C) Copyright 1999-2009
  127. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  128. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  129. * rights, and intellectual property rights in the Havok software remain in
  130. * Havok and/or its suppliers.
  131. * Use of this software for evaluation purposes is subject to and indicates
  132. * acceptance of the End User licence Agreement for this product. A copy of
  133. * the license is included with this software and is also available at www.havok.com/tryhavok.
  134. */