blob: a1221b6b66cc84b769e1f1ba6c39255082563399 [file] [log] [blame]
Greg Clayton5dbe5d42013-03-21 03:39:51 +00001//===-- MemoryGauge.h -------------------------------------------*- C++ -*-===//
Enrico Granataf58cece2013-03-08 20:29:13 +00002//
Greg Clayton5dbe5d42013-03-21 03:39:51 +00003// The LLVM Compiler Infrastructure
Enrico Granataf58cece2013-03-08 20:29:13 +00004//
Greg Clayton5dbe5d42013-03-21 03:39:51 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Enrico Granataf58cece2013-03-08 20:29:13 +00007//
Greg Clayton5dbe5d42013-03-21 03:39:51 +00008//===----------------------------------------------------------------------===//
Enrico Granataf58cece2013-03-08 20:29:13 +00009
10#ifndef __PerfTestDriver__MemoryGauge__
11#define __PerfTestDriver__MemoryGauge__
12
13#include "Gauge.h"
Greg Clayton880afc52013-03-22 02:31:35 +000014#include "Results.h"
Enrico Granataf58cece2013-03-08 20:29:13 +000015
16#include <mach/task_info.h>
17
Greg Clayton880afc52013-03-22 02:31:35 +000018namespace lldb_perf {
19
Enrico Granataf3fb83a2013-03-20 21:18:20 +000020class MemoryStats
21{
22public:
Greg Claytonef0d2142013-03-21 03:32:24 +000023 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);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000026 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
Enrico Granata1ed58f72013-04-02 21:59:39 +000037 MemoryStats
38 operator + (const MemoryStats& rhs);
39
40 MemoryStats
Enrico Granataf3fb83a2013-03-20 21:18:20 +000041 operator / (size_t rhs);
42
Enrico Granata1ed58f72013-04-02 21:59:39 +000043 MemoryStats
44 operator * (const MemoryStats& rhs);
45
Enrico Granataf3fb83a2013-03-20 21:18:20 +000046 mach_vm_size_t
Greg Clayton880afc52013-03-22 02:31:35 +000047 GetVirtualSize () const
Enrico Granataf3fb83a2013-03-20 21:18:20 +000048 {
49 return m_virtual_size;
50 }
51
52 mach_vm_size_t
Greg Clayton880afc52013-03-22 02:31:35 +000053 GetResidentSize () const
Enrico Granataf3fb83a2013-03-20 21:18:20 +000054 {
55 return m_resident_size;
56 }
57
58 mach_vm_size_t
Greg Clayton880afc52013-03-22 02:31:35 +000059 GetMaxResidentSize () const
Enrico Granataf3fb83a2013-03-20 21:18:20 +000060 {
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
Greg Clayton880afc52013-03-22 02:31:35 +000082 Results::ResultSP
83 GetResult (const char *name, const char *description) const;
Enrico Granataf3fb83a2013-03-20 21:18:20 +000084private:
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};
Enrico Granata1ed58f72013-04-02 21:59:39 +000089
Enrico Granataf3fb83a2013-03-20 21:18:20 +000090class MemoryGauge : public Gauge<MemoryStats>
Enrico Granataf58cece2013-03-08 20:29:13 +000091{
Enrico Granataf58cece2013-03-08 20:29:13 +000092public:
93 MemoryGauge ();
94
95 virtual
96 ~MemoryGauge ()
Greg Claytonef0d2142013-03-21 03:32:24 +000097 {
98 }
Enrico Granataf58cece2013-03-08 20:29:13 +000099
100 void
Greg Claytonef0d2142013-03-21 03:32:24 +0000101 Start ();
Enrico Granataf58cece2013-03-08 20:29:13 +0000102
Greg Clayton880afc52013-03-22 02:31:35 +0000103 ValueType
Greg Claytonef0d2142013-03-21 03:32:24 +0000104 Stop ();
Enrico Granataf58cece2013-03-08 20:29:13 +0000105
Greg Clayton880afc52013-03-22 02:31:35 +0000106 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;
Greg Claytonef0d2142013-03-21 03:32:24 +0000120
121private:
122 enum class State
123 {
124 eNeverUsed,
125 eCounting,
126 eStopped
127 };
128
Greg Clayton880afc52013-03-22 02:31:35 +0000129 ValueType
Greg Claytonef0d2142013-03-21 03:32:24 +0000130 Now ();
131
Greg Claytonef0d2142013-03-21 03:32:24 +0000132 State m_state;
Greg Clayton880afc52013-03-22 02:31:35 +0000133 ValueType m_start;
134 ValueType m_stop;
135 ValueType m_delta;
Enrico Granataf58cece2013-03-08 20:29:13 +0000136};
Enrico Granataf58cece2013-03-08 20:29:13 +0000137
Greg Clayton880afc52013-03-22 02:31:35 +0000138template <>
139Results::ResultSP
140GetResult (const char *description, MemoryStats value);
141
142} // namespace lldb_perf
143
Enrico Granata1ed58f72013-04-02 21:59:39 +0000144lldb_perf::MemoryStats
145sqrt (const lldb_perf::MemoryStats& arg);
146
Greg Clayton880afc52013-03-22 02:31:35 +0000147#endif // #ifndef __PerfTestDriver__MemoryGauge__