MemoryGauge.cpp revision f5af85a2946ed4e1ff4766829d328cfb4961f259
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MemoryGauge.cpp 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PerfTestDriver 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Created by Enrico Granata on 3/6/13. 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright (c) 2013 Apple Inc. All rights reserved. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "MemoryGauge.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <assert.h> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <mach/task.h> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace lldb::perf; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MemoryGauge::SizeType 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MemoryGauge::now () 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles){ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) task_t task = MACH_PORT_NULL; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mach_task_basic_info_data_t taskBasicInfo; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (task_info(task, MACH_TASK_BASIC_INFO, (task_info_t) & taskBasicInfo, &count) == KERN_SUCCESS) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return taskBasicInfo.virtual_size; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return 0; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MemoryGauge::MemoryGauge () : 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)m_start(), 298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)m_state(MemoryGauge::State::eMSNeverUsed) 308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles){ 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MemoryGauge::start () 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_state = MemoryGauge::State::eMSCounting; 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) m_start = now(); 38} 39 40MemoryGauge::SizeType 41MemoryGauge::stop () 42{ 43 auto stop = now(); 44 assert(m_state == MemoryGauge::State::eMSCounting && "cannot stop a non-started gauge"); 45 m_state = MemoryGauge::State::eMSStopped; 46 return (m_value = stop-m_start); 47} 48 49MemoryGauge::SizeType 50MemoryGauge::value () 51{ 52 assert(m_state == MemoryGauge::State::eMSStopped && "gauge must be used before you can evaluate it"); 53 return m_value; 54} 55