MemoryGauge.h revision 08257e457b2aab6453618cb64c033e5a64115da1
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- MemoryGauge.h -------------------------------------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef __PerfTestDriver__MemoryGauge__ 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define __PerfTestDriver__MemoryGauge__ 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "Gauge.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "Results.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <mach/task_info.h> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace lldb_perf { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MemoryStats 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MemoryStats (mach_vm_size_t virtual_size = 0, 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mach_vm_size_t resident_size = 0, 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mach_vm_size_t max_resident_size = 0); 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MemoryStats (const MemoryStats& rhs); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MemoryStats& 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) operator = (const MemoryStats& rhs); 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MemoryStats& 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) operator += (const MemoryStats& rhs); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MemoryStats 35 operator - (const MemoryStats& rhs); 36 37 MemoryStats 38 operator + (const MemoryStats& rhs); 39 40 MemoryStats 41 operator / (size_t rhs); 42 43 MemoryStats 44 operator * (const MemoryStats& rhs); 45 46 mach_vm_size_t 47 GetVirtualSize () const 48 { 49 return m_virtual_size; 50 } 51 52 mach_vm_size_t 53 GetResidentSize () const 54 { 55 return m_resident_size; 56 } 57 58 mach_vm_size_t 59 GetMaxResidentSize () const 60 { 61 return m_max_resident_size; 62 } 63 64 void 65 SetVirtualSize (mach_vm_size_t vs) 66 { 67 m_virtual_size = vs; 68 } 69 70 void 71 SetResidentSize (mach_vm_size_t rs) 72 { 73 m_resident_size = rs; 74 } 75 76 void 77 SetMaxResidentSize (mach_vm_size_t mrs) 78 { 79 m_max_resident_size = mrs; 80 } 81 82 Results::ResultSP 83 GetResult (const char *name, const char *description) const; 84private: 85 mach_vm_size_t m_virtual_size; 86 mach_vm_size_t m_resident_size; 87 mach_vm_size_t m_max_resident_size; 88}; 89 90class MemoryGauge : public Gauge<MemoryStats> 91{ 92public: 93 MemoryGauge (); 94 95 virtual 96 ~MemoryGauge () 97 { 98 } 99 100 void 101 Start (); 102 103 ValueType 104 Stop (); 105 106 virtual ValueType 107 GetStartValue() const 108 { 109 return m_start; 110 } 111 112 virtual ValueType 113 GetStopValue() const 114 { 115 return m_stop; 116 } 117 118 virtual ValueType 119 GetDeltaValue() const; 120 121private: 122 enum class State 123 { 124 eNeverUsed, 125 eCounting, 126 eStopped 127 }; 128 129 ValueType 130 Now (); 131 132 State m_state; 133 ValueType m_start; 134 ValueType m_stop; 135 ValueType m_delta; 136}; 137 138template <> 139Results::ResultSP 140GetResult (const char *description, MemoryStats value); 141 142} // namespace lldb_perf 143 144lldb_perf::MemoryStats 145sqrt (const lldb_perf::MemoryStats& arg); 146 147#endif // #ifndef __PerfTestDriver__MemoryGauge__ 148