diff options
Diffstat (limited to 'lldb/tools/lldb-perf/lib/MemoryGauge.cpp')
-rw-r--r-- | lldb/tools/lldb-perf/lib/MemoryGauge.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lldb/tools/lldb-perf/lib/MemoryGauge.cpp b/lldb/tools/lldb-perf/lib/MemoryGauge.cpp new file mode 100644 index 00000000000..2a80fccb7e0 --- /dev/null +++ b/lldb/tools/lldb-perf/lib/MemoryGauge.cpp @@ -0,0 +1,54 @@ +// +// MemoryGauge.cpp +// PerfTestDriver +// +// Created by Enrico Granata on 3/6/13. +// Copyright (c) 2013 Apple Inc. All rights reserved. +// + +#include "MemoryGauge.h" +#include <assert.h> +#include <mach/task.h> + +using namespace lldb::perf; + +MemoryGauge::SizeType +MemoryGauge::now () +{ + task_t task = MACH_PORT_NULL; + mach_task_basic_info_data_t taskBasicInfo; + mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT; + if (task_info(task, MACH_TASK_BASIC_INFO, (task_info_t) & taskBasicInfo, &count) == KERN_SUCCESS) { + return taskBasicInfo.virtual_size; + } + return 0; +} + +MemoryGauge::MemoryGauge () : +m_start(), +m_state(MemoryGauge::State::eMSNeverUsed) +{ +} + +void +MemoryGauge::start () +{ + m_state = MemoryGauge::State::eMSCounting; + m_start = now(); +} + +MemoryGauge::SizeType +MemoryGauge::stop () +{ + auto stop = now(); + assert(m_state == MemoryGauge::State::eMSCounting && "cannot stop a non-started gauge"); + m_state = MemoryGauge::State::eMSStopped; + return (m_value = stop-m_start); +} + +MemoryGauge::SizeType +MemoryGauge::value () +{ + assert(m_state == MemoryGauge::State::eMSStopped && "gauge must be used before you can evaluate it"); + return m_value; +} |