mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-26 17:41:58 +00:00
40 lines
911 B
C++
40 lines
911 B
C++
#pragma once
|
|
|
|
#include <optional.h>
|
|
|
|
#include <chrono>
|
|
#include <string>
|
|
|
|
struct Timer {
|
|
using Clock = std::chrono::high_resolution_clock;
|
|
|
|
// Creates a new timer. A timer is always running.
|
|
Timer();
|
|
|
|
// Returns elapsed microseconds.
|
|
long long ElapsedMicroseconds() const;
|
|
// Returns elapsed microseconds and restarts/resets the timer.
|
|
long long ElapsedMicrosecondsAndReset();
|
|
// Restart/reset the timer.
|
|
void Reset();
|
|
// Resets timer and prints a message like "<foo> took 5ms"
|
|
void ResetAndPrint(const std::string& message);
|
|
// Pause the timer.
|
|
void Pause();
|
|
// Resume the timer after it has been paused.
|
|
void Resume();
|
|
|
|
// Raw start time.
|
|
optional<std::chrono::time_point<Clock>> start_;
|
|
// Elapsed time.
|
|
long long elapsed_ = 0;
|
|
};
|
|
|
|
struct ScopedPerfTimer {
|
|
ScopedPerfTimer(const std::string& message);
|
|
~ScopedPerfTimer();
|
|
|
|
Timer timer_;
|
|
std::string message_;
|
|
};
|