Skip to content

Commit 5c0ead8

Browse files
committed
feat(Chronometer): start and stop timer
1 parent 5355b0f commit 5c0ead8

File tree

3 files changed

+148
-0
lines changed

3 files changed

+148
-0
lines changed

include/geode/basic/chronometer.hpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Copyright (c) 2019 - 2025 Geode-solutions
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy
5+
* of this software and associated documentation files (the "Software"), to deal
6+
* in the Software without restriction, including without limitation the rights
7+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
* copies of the Software, and to permit persons to whom the Software is
9+
* furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in
12+
* all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20+
* SOFTWARE.
21+
*
22+
*/
23+
24+
#pragma once
25+
26+
#include <absl/time/time.h>
27+
28+
#include <geode/basic/common.hpp>
29+
#include <geode/basic/pimpl.hpp>
30+
31+
namespace geode
32+
{
33+
class opengeode_basic_api Chronometer
34+
{
35+
public:
36+
Chronometer();
37+
Chronometer( Chronometer&& other ) noexcept;
38+
~Chronometer();
39+
40+
void start();
41+
42+
void stop();
43+
44+
[[nodiscard]] absl::Duration raw_duration() const;
45+
46+
[[nodiscard]] std::string duration() const;
47+
48+
void reset();
49+
50+
private:
51+
IMPLEMENTATION_MEMBER( impl_ );
52+
};
53+
} // namespace geode

src/geode/basic/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ add_geode_library(
2828
"bitsery_input.cpp"
2929
"bitsery_output.cpp"
3030
"cell_array.cpp"
31+
"chronometer.cpp"
3132
"common.cpp"
3233
"console_logger_client.cpp"
3334
"console_progress_logger_client.cpp"
@@ -54,6 +55,7 @@ add_geode_library(
5455
"attribute.hpp"
5556
"bitsery_archive.hpp"
5657
"cell_array.hpp"
58+
"chronometer.hpp"
5759
"common.hpp"
5860
"console_logger_client.hpp"
5961
"console_progress_logger_client.hpp"

src/geode/basic/chronometer.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* Copyright (c) 2019 - 2025 Geode-solutions
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy
5+
* of this software and associated documentation files (the "Software"), to deal
6+
* in the Software without restriction, including without limitation the rights
7+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
* copies of the Software, and to permit persons to whom the Software is
9+
* furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in
12+
* all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20+
* SOFTWARE.
21+
*
22+
*/
23+
24+
#include <geode/basic/chronometer.hpp>
25+
26+
#include <absl/time/clock.h>
27+
28+
#include <geode/basic/pimpl_impl.hpp>
29+
30+
namespace geode
31+
{
32+
class Chronometer::Impl
33+
{
34+
public:
35+
void start()
36+
{
37+
start_time_ = absl::Now();
38+
}
39+
40+
void stop()
41+
{
42+
duration_ += absl::Now() - start_time_;
43+
}
44+
45+
[[nodiscard]] absl::Duration raw_duration() const
46+
{
47+
return duration_;
48+
}
49+
50+
[[nodiscard]] std::string duration() const
51+
{
52+
return absl::FormatDuration( raw_duration() );
53+
}
54+
55+
void reset()
56+
{
57+
duration_ = absl::ZeroDuration();
58+
}
59+
60+
private:
61+
absl::Time start_time_;
62+
absl::Duration duration_;
63+
};
64+
65+
Chronometer::Chronometer() = default;
66+
Chronometer::Chronometer( Chronometer&& other ) noexcept = default;
67+
Chronometer::~Chronometer() = default;
68+
69+
void Chronometer::start()
70+
{
71+
impl_->start();
72+
}
73+
74+
void Chronometer::stop()
75+
{
76+
impl_->stop();
77+
}
78+
79+
[[nodiscard]] absl::Duration Chronometer::raw_duration() const
80+
{
81+
return impl_->raw_duration();
82+
}
83+
84+
[[nodiscard]] std::string Chronometer::duration() const
85+
{
86+
return impl_->duration();
87+
}
88+
89+
void Chronometer::reset()
90+
{
91+
impl_->reset();
92+
}
93+
} // namespace geode

0 commit comments

Comments
 (0)