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