The Pedigree Project 0.1
Stopwatch.cc
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#include "pedigree/kernel/time/Stopwatch.h"
21#include "pedigree/kernel/time/Time.h"
22#include "pedigree/kernel/utilities/assert.h"
23
24namespace Time {
25Stopwatch::Stopwatch(bool startRunning) : m_Value(0), m_StartValue(), m_bRunning(startRunning) {
26 reset();
27
28 if (startRunning) {
29 start();
30 }
31}
32
33Stopwatch::~Stopwatch() {}
34
35void Stopwatch::start() {
36 m_bRunning = true;
37 m_StartValue = Time::getTicks();
38}
39
40void Stopwatch::stop() {
41 assert(m_bRunning);
42 m_bRunning = false;
43 Timestamp now = Time::getTicks();
44 m_Value += now - m_StartValue;
45}
46
47void Stopwatch::reset() {
48 m_Value = 0;
49 m_StartValue = 0;
50 m_bRunning = false;
51}
52
53Timestamp Stopwatch::value() {
54 return m_Value;
55}
56} // namespace Time