blob: beed624bf1a72d1978e79368826462b8e701fd91 [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
Kate Stoneb9c1b512016-09-06 20:57:50 +000020class MemoryStats {
Enrico Granataf3fb83a2013-03-20 21:18:20 +000021public:
Kate Stoneb9c1b512016-09-06 20:57:50 +000022 MemoryStats(mach_vm_size_t virtual_size = 0, mach_vm_size_t resident_size = 0,
23 mach_vm_size_t max_resident_size = 0);
24 MemoryStats(const MemoryStats &rhs);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000025
Kate Stoneb9c1b512016-09-06 20:57:50 +000026 MemoryStats &operator=(const MemoryStats &rhs);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000027
Kate Stoneb9c1b512016-09-06 20:57:50 +000028 MemoryStats &operator+=(const MemoryStats &rhs);
Enrico Granataf3fb83a2013-03-20 21:18:20 +000029
Kate Stoneb9c1b512016-09-06 20:57:50 +000030 MemoryStats operator-(const MemoryStats &rhs);
31
32 MemoryStats operator+(const MemoryStats &rhs);
33
34 MemoryStats operator/(size_t rhs);
35
36 MemoryStats operator*(const MemoryStats &rhs);
37
38 mach_vm_size_t GetVirtualSize() const { return m_virtual_size; }
39
40 mach_vm_size_t GetResidentSize() const { return m_resident_size; }
41
42 mach_vm_size_t GetMaxResidentSize() const { return m_max_resident_size; }
43
44 void SetVirtualSize(mach_vm_size_t vs) { m_virtual_size = vs; }
45
46 void SetResidentSize(mach_vm_size_t rs) { m_resident_size = rs; }
47
48 void SetMaxResidentSize(mach_vm_size_t mrs) { m_max_resident_size = mrs; }
49
50 Results::ResultSP GetResult(const char *name, const char *description) const;
51
Enrico Granataf3fb83a2013-03-20 21:18:20 +000052private:
Kate Stoneb9c1b512016-09-06 20:57:50 +000053 mach_vm_size_t m_virtual_size;
54 mach_vm_size_t m_resident_size;
55 mach_vm_size_t m_max_resident_size;
Enrico Granataf3fb83a2013-03-20 21:18:20 +000056};
Kate Stoneb9c1b512016-09-06 20:57:50 +000057
58class MemoryGauge : public Gauge<MemoryStats> {
Enrico Granataf58cece2013-03-08 20:29:13 +000059public:
Kate Stoneb9c1b512016-09-06 20:57:50 +000060 MemoryGauge();
Greg Clayton880afc52013-03-22 02:31:35 +000061
Kate Stoneb9c1b512016-09-06 20:57:50 +000062 virtual ~MemoryGauge() {}
Greg Clayton880afc52013-03-22 02:31:35 +000063
Kate Stoneb9c1b512016-09-06 20:57:50 +000064 void Start();
65
66 ValueType Stop();
67
68 virtual ValueType GetStartValue() const { return m_start; }
69
70 virtual ValueType GetStopValue() const { return m_stop; }
71
72 virtual ValueType GetDeltaValue() const;
Greg Claytonef0d2142013-03-21 03:32:24 +000073
74private:
Kate Stoneb9c1b512016-09-06 20:57:50 +000075 enum class State { eNeverUsed, eCounting, eStopped };
76
77 ValueType Now();
78
79 State m_state;
80 ValueType m_start;
81 ValueType m_stop;
82 ValueType m_delta;
Enrico Granataf58cece2013-03-08 20:29:13 +000083};
Enrico Granataf58cece2013-03-08 20:29:13 +000084
Greg Clayton880afc52013-03-22 02:31:35 +000085template <>
Kate Stoneb9c1b512016-09-06 20:57:50 +000086Results::ResultSP GetResult(const char *description, MemoryStats value);
87
Greg Clayton880afc52013-03-22 02:31:35 +000088} // namespace lldb_perf
89
Kate Stoneb9c1b512016-09-06 20:57:50 +000090lldb_perf::MemoryStats sqrt(const lldb_perf::MemoryStats &arg);
Enrico Granata1ed58f72013-04-02 21:59:39 +000091
Greg Clayton880afc52013-03-22 02:31:35 +000092#endif // #ifndef __PerfTestDriver__MemoryGauge__