1//===-- MemoryGauge.h -------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef __PerfTestDriver__MemoryGauge__
11#define __PerfTestDriver__MemoryGauge__
12
13#include "Gauge.h"
14#include "Results.h"
15
16#include <mach/task_info.h>
17
18namespace lldb_perf {
19
20class MemoryStats
21{
22public:
23    MemoryStats (mach_vm_size_t virtual_size = 0,
24                 mach_vm_size_t resident_size = 0,
25                 mach_vm_size_t max_resident_size = 0);
26    MemoryStats (const MemoryStats& rhs);
27
28    MemoryStats&
29    operator = (const MemoryStats& rhs);
30
31    MemoryStats&
32    operator += (const MemoryStats& rhs);
33
34    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