Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <AK/Assertions.h>
8#include <AK/Time.h>
9#include <LibCore/ElapsedTimer.h>
10
11namespace Core {
12
13ElapsedTimer ElapsedTimer::start_new()
14{
15 ElapsedTimer timer;
16 timer.start();
17 return timer;
18}
19
20void ElapsedTimer::start()
21{
22 m_valid = true;
23 m_origin_time = m_precise ? Time::now_monotonic() : Time::now_monotonic_coarse();
24}
25
26void ElapsedTimer::reset()
27{
28 m_valid = false;
29 m_origin_time = {};
30}
31
32i64 ElapsedTimer::elapsed() const
33{
34 return elapsed_time().to_milliseconds();
35}
36
37Time ElapsedTimer::elapsed_time() const
38{
39 VERIFY(is_valid());
40 auto now = m_precise ? Time::now_monotonic() : Time::now_monotonic_coarse();
41 return now - m_origin_time;
42}
43
44}