in agent/php/ElasticApm/Impl/ExecutionSegment.php [424:473]
public static function calcDurationInMicroseconds(
float $systemClockBeginTime,
float $monotonicBeginTime,
float $systemClockEndTime,
float $monotonicEndTime,
LoggerFactory $loggerFactory
): float {
$monotonicDurationInMicroseconds = TimeUtil::calcDurationInMicrosecondsClampNegativeToZero(
$monotonicBeginTime,
$monotonicEndTime
);
$systemClockDurationInMicroseconds = TimeUtil::calcDurationInMicrosecondsClampNegativeToZero(
$systemClockBeginTime,
$systemClockEndTime
);
/** @var ?Logger $logger */
$logger = null;
$logLevel = LogLevel::TRACE;
if ($loggerFactory->isEnabledForLevel($logLevel)) {
$logger = self::createLogger($loggerFactory);
$monotonicMinusSystemDurationInSeconds = TimeUtil::microsecondsToSeconds(
$systemClockDurationInMicroseconds - $monotonicDurationInMicroseconds
);
$logger->addAllContext(
[
'systemClockDurationInMicroseconds' => $systemClockDurationInMicroseconds,
'monotonicDurationInMicroseconds' => $monotonicDurationInMicroseconds,
'monotonicMinusSystemDurationInSeconds' => $monotonicMinusSystemDurationInSeconds,
'systemClockBeginTime' => $systemClockBeginTime,
'monotonicBeginTime' => $monotonicBeginTime,
'systemClockEndTime' => $systemClockEndTime,
'monotonicEndTime' => $monotonicEndTime,
]
);
}
if ($monotonicDurationInMicroseconds >= $systemClockDurationInMicroseconds) {
$durationInMicroseconds = $monotonicDurationInMicroseconds;
$logger && ($loggerProxy = $logger->ifLevelEnabled($logLevel, __LINE__, __FUNCTION__))
&& $loggerProxy->log('Using monotonic clock duration');
} else {
$durationInMicroseconds = $systemClockDurationInMicroseconds;
$logger && ($loggerProxy = $logger->ifLevelEnabled($logLevel, __LINE__, __FUNCTION__))
&& $loggerProxy->log(
'Using system clock duration instead of monotonic clock duration'
. ' because system clock duration is larger'
);
}
return $durationInMicroseconds;
}