/* Copyright (C) 2019 * * This file is part of the osdev components suite * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "timemeasurement.h" using namespace osdev::components::mqtt::measurement; TimeMeasurement::TimeMeasurement(const std::string& id, const TimeMeasurementCallback& cb, bool measureOnDestruction) : m_id(id) , m_start(std::chrono::steady_clock::now()) , m_last(m_start) , m_callback(cb) , m_measureOnDestruction(measureOnDestruction) { } TimeMeasurement::~TimeMeasurement() { if (m_measureOnDestruction) { this->measure(); } } void TimeMeasurement::set() { m_last = std::chrono::steady_clock::now(); } void TimeMeasurement::measure() { auto now = std::chrono::steady_clock::now(); auto sinceLast = std::chrono::duration_cast(now - m_last); auto sinceStart = std::chrono::duration_cast(now - m_start); m_last = now; m_callback(m_id, m_start, sinceStart, sinceLast); }