summaryrefslogtreecommitdiff
path: root/src/mongo/db/single_transaction_stats.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/single_transaction_stats.cpp')
-rw-r--r--src/mongo/db/single_transaction_stats.cpp57
1 files changed, 28 insertions, 29 deletions
diff --git a/src/mongo/db/single_transaction_stats.cpp b/src/mongo/db/single_transaction_stats.cpp
index 5057d2e356e..5d0da69dffb 100644
--- a/src/mongo/db/single_transaction_stats.cpp
+++ b/src/mongo/db/single_transaction_stats.cpp
@@ -32,68 +32,67 @@
namespace mongo {
-unsigned long long SingleTransactionStats::getStartTime() const {
- invariant(_startTime > 0);
-
- return _startTime;
-}
-
-void SingleTransactionStats::setStartTime(unsigned long long time) {
+void SingleTransactionStats::setStartTime(TickSource::Tick curTick, Date_t curWallClockTime) {
invariant(_startTime == 0);
- _startTime = time;
+ _startTime = curTick;
+ _startWallClockTime = curWallClockTime;
}
-unsigned long long SingleTransactionStats::getDuration(unsigned long long curTime) const {
+Microseconds SingleTransactionStats::getDuration(TickSource* tickSource,
+ TickSource::Tick curTick) const {
invariant(_startTime > 0);
// The transaction hasn't ended yet, so we return how long it has currently been running for.
if (_endTime == 0) {
- return curTime - _startTime;
+ return tickSource->ticksTo<Microseconds>(curTick - _startTime);
}
- return _endTime - _startTime;
+ return tickSource->ticksTo<Microseconds>(_endTime - _startTime);
}
-void SingleTransactionStats::setEndTime(unsigned long long time) {
+void SingleTransactionStats::setEndTime(TickSource::Tick time) {
invariant(_startTime > 0);
_endTime = time;
}
-Microseconds SingleTransactionStats::getTimeActiveMicros(unsigned long long curTime) const {
+Microseconds SingleTransactionStats::getTimeActiveMicros(TickSource* tickSource,
+ TickSource::Tick curTick) const {
invariant(_startTime > 0);
// The transaction is currently active, so we return the recorded active time so far plus the
// time since _timeActiveStart.
if (isActive()) {
return _timeActiveMicros +
- Microseconds{static_cast<long long>(curTime - _lastTimeActiveStart)};
+ tickSource->ticksTo<Microseconds>(curTick - _lastTimeActiveStart);
}
return _timeActiveMicros;
}
-Microseconds SingleTransactionStats::getTimeInactiveMicros(unsigned long long curTime) const {
+Microseconds SingleTransactionStats::getTimeInactiveMicros(TickSource* tickSource,
+ TickSource::Tick curTick) const {
invariant(_startTime > 0);
- return Microseconds{static_cast<long long>(getDuration(curTime))} -
- getTimeActiveMicros(curTime);
+ return getDuration(tickSource, curTick) - getTimeActiveMicros(tickSource, curTick);
}
-void SingleTransactionStats::setActive(unsigned long long time) {
+void SingleTransactionStats::setActive(TickSource::Tick curTick) {
invariant(!isActive());
- _lastTimeActiveStart = time;
+ _lastTimeActiveStart = curTick;
}
-void SingleTransactionStats::setInactive(unsigned long long time) {
+void SingleTransactionStats::setInactive(TickSource* tickSource, TickSource::Tick curTick) {
invariant(isActive());
- _timeActiveMicros += Microseconds{static_cast<long long>(time - _lastTimeActiveStart)};
+ _timeActiveMicros += tickSource->ticksTo<Microseconds>(curTick - _lastTimeActiveStart);
_lastTimeActiveStart = 0;
}
void SingleTransactionStats::report(BSONObjBuilder* builder,
- const repl::ReadConcernArgs& readConcernArgs) const {
+ const repl::ReadConcernArgs& readConcernArgs,
+ TickSource* tickSource,
+ TickSource::Tick curTick) const {
BSONObjBuilder parametersBuilder(builder->subobjStart("parameters"));
parametersBuilder.append("txnNumber", _txnNumber);
@@ -108,15 +107,15 @@ void SingleTransactionStats::report(BSONObjBuilder* builder,
parametersBuilder.done();
builder->append("readTimestamp", _readTimestamp);
- builder->append("startWallClockTime",
- dateToISOStringLocal(Date_t::fromMillisSinceEpoch(getStartTime() / 1000)));
+ builder->append("startWallClockTime", dateToISOStringLocal(_startWallClockTime));
- // We use the same "now" time so that the following time metrics are consistent with each other.
- auto curTime = curTimeMicros64();
- builder->append("timeOpenMicros", static_cast<long long>(getDuration(curTime)));
+ // The same "now" time must be used so that the following time metrics are consistent with each
+ // other.
+ builder->append("timeOpenMicros",
+ durationCount<Microseconds>(getDuration(tickSource, curTick)));
- auto timeActive = durationCount<Microseconds>(getTimeActiveMicros(curTime));
- auto timeInactive = durationCount<Microseconds>(getTimeInactiveMicros(curTime));
+ auto timeActive = durationCount<Microseconds>(getTimeActiveMicros(tickSource, curTick));
+ auto timeInactive = durationCount<Microseconds>(getTimeInactiveMicros(tickSource, curTick));
builder->append("timeActiveMicros", timeActive);
builder->append("timeInactiveMicros", timeInactive);