52 case TimerUnit::kNanoseconds:
54 case TimerUnit::kMicroseconds:
55 return "microseconds";
56 case TimerUnit::kMilliseconds:
57 return "milliseconds";
58 case TimerUnit::kSeconds:
60 case TimerUnit::kMinutes:
62 case TimerUnit::kHours:
64 case TimerUnit::kDays:
94 std::chrono::steady_clock::time_point start_;
95 bool stopped_ =
false;
98 virtual ~Timer() =
default;
110 virtual void Record(std::chrono::nanoseconds duration) = 0;
113 template <
typename Rep,
typename Period>
114 void Record(std::chrono::duration<Rep, Period> duration) {
115 Record(std::chrono::duration_cast<std::chrono::nanoseconds>(duration));
119 virtual std::string_view
Unit()
const {
return "nanoseconds"; }
122 virtual bool IsNoop()
const {
return false; }
132 template <
typename Callable>
133 decltype(
auto)
Time(Callable&& fn) {
134 auto timed = Start();
135 using ResultType = std::invoke_result_t<Callable&&>;
136 if constexpr (std::is_void_v<ResultType>) {
137 std::invoke(std::forward<Callable>(fn));
138 }
else if constexpr (std::is_reference_v<ResultType>) {
139 return std::invoke(std::forward<Callable>(fn));
141 return std::invoke(std::forward<Callable>(fn));
146 static std::shared_ptr<Timer>
Noop();
156 void Record(std::chrono::nanoseconds duration)
override;
157 std::string_view
Unit()
const override {
return ToString(unit_); }
160 std::atomic<int64_t> count_{0};
161 std::atomic<int64_t> total_nanos_{0};
Thread-safe timer backed by std::atomic<int64_t>.
Definition timer.h:150
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:157
RAII guard that records elapsed time into a non-owning Timer on destruction.
Definition timer.h:77
void Stop()
Explicitly stop timing and record the duration.
Abstract timer for measuring operation durations.
Definition timer.h:74
decltype(auto) Time(Callable &&fn)
Execute a callable, record its wall-clock duration, and return its result.
Definition timer.h:133
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:114
virtual std::string_view Unit() const
Return the time unit used by this timer.
Definition timer.h:119
virtual bool IsNoop() const
Return true if this timer is a no-op.
Definition timer.h:122
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:33
TimerUnit
Time units supported by Timer.
Definition timer.h:39
ICEBERG_EXPORT std::string_view ToString(Expression::Operation op)
Returns a string representation of an expression operation.