53 case TimerUnit::kNanoseconds:
55 case TimerUnit::kMicroseconds:
56 return "microseconds";
57 case TimerUnit::kMilliseconds:
58 return "milliseconds";
59 case TimerUnit::kSeconds:
61 case TimerUnit::kMinutes:
63 case TimerUnit::kHours:
65 case TimerUnit::kDays:
95 std::chrono::steady_clock::time_point start_;
96 bool stopped_ =
false;
99 virtual ~Timer() =
default;
111 virtual void Record(std::chrono::nanoseconds duration) = 0;
114 template <
typename Rep,
typename Period>
115 void Record(std::chrono::duration<Rep, Period> duration) {
116 Record(std::chrono::duration_cast<std::chrono::nanoseconds>(duration));
120 virtual std::string_view
Unit()
const {
return "nanoseconds"; }
123 virtual bool IsNoop()
const {
return false; }
133 template <
typename Callable>
134 decltype(
auto)
Time(Callable&& fn) {
135 auto timed = Start();
136 using ResultType = std::invoke_result_t<Callable&&>;
137 if constexpr (std::is_void_v<ResultType>) {
138 std::invoke(std::forward<Callable>(fn));
139 }
else if constexpr (std::is_reference_v<ResultType>) {
140 return std::invoke(std::forward<Callable>(fn));
142 return std::invoke(std::forward<Callable>(fn));
147 static std::shared_ptr<Timer>
Noop();
157 void Record(std::chrono::nanoseconds duration)
override;
158 std::string_view
Unit()
const override {
return ToString(unit_); }
161 std::atomic<int64_t> count_{0};
162 std::atomic<int64_t> total_nanos_{0};
Thread-safe timer backed by std::atomic<int64_t>.
Definition timer.h:151
int64_t Count() const override
Number of timing recordings made so far.
std::chrono::nanoseconds TotalDuration() const override
Total accumulated duration across all recordings.
void Record(std::chrono::nanoseconds duration) override
Record a nanosecond duration directly.
std::string_view Unit() const override
Return the time unit used by this timer.
Definition timer.h:158
RAII guard that records elapsed time into a non-owning Timer on destruction.
Definition timer.h:78
void Stop()
Explicitly stop timing and record the duration.
Abstract timer for measuring operation durations.
Definition timer.h:75
decltype(auto) Time(Callable &&fn)
Execute a callable, record its wall-clock duration, and return its result.
Definition timer.h:134
virtual int64_t Count() const =0
Number of timing recordings made so far.
void Record(std::chrono::duration< Rep, Period > duration)
Record a duration of any chrono type, converting to nanoseconds.
Definition timer.h:115
virtual std::string_view Unit() const
Return the time unit used by this timer.
Definition timer.h:120
virtual bool IsNoop() const
Return true if this timer is a no-op.
Definition timer.h:123
virtual std::chrono::nanoseconds TotalDuration() const =0
Total accumulated duration across all recordings.
static std::shared_ptr< Timer > Noop()
Return a shared no-op timer singleton.
virtual void Record(std::chrono::nanoseconds duration)=0
Record a nanosecond duration directly.
Timed Start()
Start timing and return a RAII Timed guard.
Define symbol visibility macros for core Iceberg APIs.
Core Apache Iceberg C++ APIs.
Definition arrow_io_util.h:34
TimerUnit
Time units supported by Timer.
Definition timer.h:40
ICEBERG_EXPORT std::string_view ToString(Expression::Operation op)
Returns a string representation of an expression operation.
void unreachable() noexcept
Marks a branch the program can never take.
Definition unreachable.h:35
Portable stand-in for std::unreachable.