summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-timer/src
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/php-timer/src')
-rw-r--r--vendor/phpunit/php-timer/src/Duration.php109
-rw-r--r--vendor/phpunit/php-timer/src/ResourceUsageFormatter.php73
-rw-r--r--vendor/phpunit/php-timer/src/Timer.php40
-rw-r--r--vendor/phpunit/php-timer/src/exceptions/Exception.php16
-rw-r--r--vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php16
-rw-r--r--vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php16
6 files changed, 270 insertions, 0 deletions
diff --git a/vendor/phpunit/php-timer/src/Duration.php b/vendor/phpunit/php-timer/src/Duration.php
new file mode 100644
index 000000000..e52bf018f
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/Duration.php
@@ -0,0 +1,109 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use function floor;
+use function sprintf;
+
+/**
+ * @psalm-immutable
+ */
+final class Duration
+{
+ /**
+ * @var float
+ */
+ private $nanoseconds;
+
+ /**
+ * @var int
+ */
+ private $hours;
+
+ /**
+ * @var int
+ */
+ private $minutes;
+
+ /**
+ * @var int
+ */
+ private $seconds;
+
+ /**
+ * @var int
+ */
+ private $milliseconds;
+
+ public static function fromMicroseconds(float $microseconds): self
+ {
+ return new self($microseconds * 1000);
+ }
+
+ public static function fromNanoseconds(float $nanoseconds): self
+ {
+ return new self($nanoseconds);
+ }
+
+ private function __construct(float $nanoseconds)
+ {
+ $this->nanoseconds = $nanoseconds;
+ $timeInMilliseconds = $nanoseconds / 1000000;
+ $hours = floor($timeInMilliseconds / 60 / 60 / 1000);
+ $hoursInMilliseconds = $hours * 60 * 60 * 1000;
+ $minutes = floor($timeInMilliseconds / 60 / 1000) % 60;
+ $minutesInMilliseconds = $minutes * 60 * 1000;
+ $seconds = floor(($timeInMilliseconds - $hoursInMilliseconds - $minutesInMilliseconds) / 1000);
+ $secondsInMilliseconds = $seconds * 1000;
+ $milliseconds = $timeInMilliseconds - $hoursInMilliseconds - $minutesInMilliseconds - $secondsInMilliseconds;
+ $this->hours = (int) $hours;
+ $this->minutes = $minutes;
+ $this->seconds = (int) $seconds;
+ $this->milliseconds = (int) $milliseconds;
+ }
+
+ public function asNanoseconds(): float
+ {
+ return $this->nanoseconds;
+ }
+
+ public function asMicroseconds(): float
+ {
+ return $this->nanoseconds / 1000;
+ }
+
+ public function asMilliseconds(): float
+ {
+ return $this->nanoseconds / 1000000;
+ }
+
+ public function asSeconds(): float
+ {
+ return $this->nanoseconds / 1000000000;
+ }
+
+ public function asString(): string
+ {
+ $result = '';
+
+ if ($this->hours > 0) {
+ $result = sprintf('%02d', $this->hours) . ':';
+ }
+
+ $result .= sprintf('%02d', $this->minutes) . ':';
+ $result .= sprintf('%02d', $this->seconds);
+
+ if ($this->milliseconds > 0) {
+ $result .= '.' . sprintf('%03d', $this->milliseconds);
+ }
+
+ return $result;
+ }
+}
diff --git a/vendor/phpunit/php-timer/src/ResourceUsageFormatter.php b/vendor/phpunit/php-timer/src/ResourceUsageFormatter.php
new file mode 100644
index 000000000..ad7926277
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/ResourceUsageFormatter.php
@@ -0,0 +1,73 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use function is_float;
+use function memory_get_peak_usage;
+use function microtime;
+use function sprintf;
+
+final class ResourceUsageFormatter
+{
+ /**
+ * @psalm-var array<string,int>
+ */
+ private const SIZES = [
+ 'GB' => 1073741824,
+ 'MB' => 1048576,
+ 'KB' => 1024,
+ ];
+
+ public function resourceUsage(Duration $duration): string
+ {
+ return sprintf(
+ 'Time: %s, Memory: %s',
+ $duration->asString(),
+ $this->bytesToString(memory_get_peak_usage(true))
+ );
+ }
+
+ /**
+ * @throws TimeSinceStartOfRequestNotAvailableException
+ */
+ public function resourceUsageSinceStartOfRequest(): string
+ {
+ if (!isset($_SERVER['REQUEST_TIME_FLOAT'])) {
+ throw new TimeSinceStartOfRequestNotAvailableException(
+ 'Cannot determine time at which the request started because $_SERVER[\'REQUEST_TIME_FLOAT\'] is not available'
+ );
+ }
+
+ if (!is_float($_SERVER['REQUEST_TIME_FLOAT'])) {
+ throw new TimeSinceStartOfRequestNotAvailableException(
+ 'Cannot determine time at which the request started because $_SERVER[\'REQUEST_TIME_FLOAT\'] is not of type float'
+ );
+ }
+
+ return $this->resourceUsage(
+ Duration::fromMicroseconds(
+ (1000000 * (microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']))
+ )
+ );
+ }
+
+ private function bytesToString(int $bytes): string
+ {
+ foreach (self::SIZES as $unit => $value) {
+ if ($bytes >= $value) {
+ return sprintf('%.2f %s', $bytes >= 1024 ? $bytes / $value : $bytes, $unit);
+ }
+ }
+
+ // @codeCoverageIgnoreStart
+ return $bytes . ' byte' . ($bytes !== 1 ? 's' : '');
+ // @codeCoverageIgnoreEnd
+ }
+}
diff --git a/vendor/phpunit/php-timer/src/Timer.php b/vendor/phpunit/php-timer/src/Timer.php
new file mode 100644
index 000000000..0917109be
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/Timer.php
@@ -0,0 +1,40 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use function array_pop;
+use function hrtime;
+
+final class Timer
+{
+ /**
+ * @psalm-var list<float>
+ */
+ private $startTimes = [];
+
+ public function start(): void
+ {
+ $this->startTimes[] = (float) hrtime(true);
+ }
+
+ /**
+ * @throws NoActiveTimerException
+ */
+ public function stop(): Duration
+ {
+ if (empty($this->startTimes)) {
+ throw new NoActiveTimerException(
+ 'Timer::start() has to be called before Timer::stop()'
+ );
+ }
+
+ return Duration::fromNanoseconds((float) hrtime(true) - array_pop($this->startTimes));
+ }
+}
diff --git a/vendor/phpunit/php-timer/src/exceptions/Exception.php b/vendor/phpunit/php-timer/src/exceptions/Exception.php
new file mode 100644
index 000000000..996da0860
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/exceptions/Exception.php
@@ -0,0 +1,16 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use Throwable;
+
+interface Exception extends Throwable
+{
+}
diff --git a/vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php b/vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php
new file mode 100644
index 000000000..40fe45e86
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php
@@ -0,0 +1,16 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use LogicException;
+
+final class NoActiveTimerException extends LogicException implements Exception
+{
+}
diff --git a/vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php b/vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php
new file mode 100644
index 000000000..a2d94ce80
--- /dev/null
+++ b/vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php
@@ -0,0 +1,16 @@
+<?php declare(strict_types=1);
+/*
+ * This file is part of phpunit/php-timer.
+ *
+ * (c) Sebastian Bergmann <[email protected]>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use RuntimeException;
+
+final class TimeSinceStartOfRequestNotAvailableException extends RuntimeException implements Exception
+{
+}