public static function calcDurationInMicroseconds()

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;
    }