summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-timer/src/ResourceUsageFormatter.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/phpunit/php-timer/src/ResourceUsageFormatter.php')
-rw-r--r--vendor/phpunit/php-timer/src/ResourceUsageFormatter.php73
1 files changed, 73 insertions, 0 deletions
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
+ }
+}