mirror of
https://github.com/MaskRay/ccls.git
synced 2024-11-22 15:45:08 +00:00
Add start/pause to Timer
This commit is contained in:
parent
76cc110cc2
commit
f0e9434163
42
src/timer.cc
42
src/timer.cc
@ -10,33 +10,47 @@ Timer::Timer() {
|
|||||||
|
|
||||||
long long Timer::ElapsedMicroseconds() const {
|
long long Timer::ElapsedMicroseconds() const {
|
||||||
std::chrono::time_point<Clock> end = Clock::now();
|
std::chrono::time_point<Clock> end = Clock::now();
|
||||||
return std::chrono::duration_cast<std::chrono::microseconds>(end - start)
|
long long elapsed = elapsed_;
|
||||||
.count();
|
if (start_.has_value()) {
|
||||||
|
// TODO: clang-format this file.
|
||||||
|
elapsed += std::chrono::duration_cast<std::chrono::microseconds>(end - *start_).count();
|
||||||
|
}
|
||||||
|
return elapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
long long Timer::ElapsedMicrosecondsAndReset() {
|
long long Timer::ElapsedMicrosecondsAndReset() {
|
||||||
std::chrono::time_point<Clock> end = Clock::now();
|
long long elapsed = ElapsedMicroseconds();
|
||||||
long long microseconds =
|
|
||||||
std::chrono::duration_cast<std::chrono::microseconds>(end - start)
|
|
||||||
.count();
|
|
||||||
Reset();
|
Reset();
|
||||||
return microseconds;
|
return elapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timer::Reset() {
|
void Timer::Reset() {
|
||||||
start = Clock::now();
|
start_ = Clock::now();
|
||||||
|
elapsed_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timer::ResetAndPrint(const std::string& message) {
|
void Timer::ResetAndPrint(const std::string& message) {
|
||||||
std::chrono::time_point<Clock> end = Clock::now();
|
long long elapsed = ElapsedMicroseconds();
|
||||||
long long elapsed =
|
|
||||||
std::chrono::duration_cast<std::chrono::microseconds>(end - start)
|
|
||||||
.count();
|
|
||||||
|
|
||||||
long long milliseconds = elapsed / 1000;
|
long long milliseconds = elapsed / 1000;
|
||||||
long long remaining = elapsed - milliseconds;
|
long long remaining = elapsed - milliseconds;
|
||||||
|
|
||||||
LOG_S(INFO) << message << " took " << milliseconds << "." << remaining
|
LOG_S(INFO) << message << " took " << milliseconds << "." << remaining
|
||||||
<< "ms";
|
<< "ms";
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Timer::Pause() {
|
||||||
|
assert(start_.has_value());
|
||||||
|
|
||||||
|
std::chrono::time_point<Clock> end = Clock::now();
|
||||||
|
long long elapsed =
|
||||||
|
std::chrono::duration_cast<std::chrono::microseconds>(end - *start_)
|
||||||
|
.count();
|
||||||
|
|
||||||
|
elapsed_ += elapsed;
|
||||||
|
start_ = nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Timer::Resume() {
|
||||||
|
assert(!start_.has_value());
|
||||||
|
start_ = Clock::now();
|
||||||
|
}
|
||||||
|
13
src/timer.h
13
src/timer.h
@ -1,8 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <optional.h>
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
using std::experimental::nullopt;
|
||||||
|
using std::experimental::optional;
|
||||||
|
|
||||||
struct Timer {
|
struct Timer {
|
||||||
using Clock = std::chrono::high_resolution_clock;
|
using Clock = std::chrono::high_resolution_clock;
|
||||||
|
|
||||||
@ -17,7 +22,13 @@ struct Timer {
|
|||||||
void Reset();
|
void Reset();
|
||||||
// Resets timer and prints a message like "<foo> took 5ms"
|
// Resets timer and prints a message like "<foo> took 5ms"
|
||||||
void ResetAndPrint(const std::string& message);
|
void ResetAndPrint(const std::string& message);
|
||||||
|
// Pause the timer.
|
||||||
|
void Pause();
|
||||||
|
// Resume the timer after it has been paused.
|
||||||
|
void Resume();
|
||||||
|
|
||||||
// Raw start time.
|
// Raw start time.
|
||||||
std::chrono::time_point<Clock> start;
|
optional<std::chrono::time_point<Clock>> start_;
|
||||||
|
// Elapsed time.
|
||||||
|
long long elapsed_ = 0;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user