diff -Nru php-timer-2.1.2/build.xml php-timer-5.0.3/build.xml
--- php-timer-2.1.2/build.xml 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/build.xml 2020-12-20 19:31:24.000000000 +0000
@@ -1,19 +1,30 @@
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
diff -Nru php-timer-2.1.2/ChangeLog.md php-timer-5.0.3/ChangeLog.md
--- php-timer-2.1.2/ChangeLog.md 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/ChangeLog.md 2020-12-20 19:31:24.000000000 +0000
@@ -2,11 +2,102 @@
All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
+## [5.0.3] - 2020-10-26
+
+### Fixed
+
+* `SebastianBergmann\Timer\Exception` now correctly extends `\Throwable`
+
+## [5.0.2] - 2020-09-28
+
+### Changed
+
+* Changed PHP version constraint in `composer.json` from `^7.3 || ^8.0` to `>=7.3`
+
+## [5.0.1] - 2020-06-26
+
+### Added
+
+* This component is now supported on PHP 8
+
+## [5.0.0] - 2020-06-07
+
+### Changed
+
+* Parameter type for `SebastianBergmann\Timer\Duration::fromMicroseconds()` was changed from `int` to `float`
+* Parameter type for `SebastianBergmann\Timer\Duration::fromNanoseconds()` was changed from `int` to `float`
+* Return type for `SebastianBergmann\Timer\Duration::asNanoseconds()` was changed from `int` to `float`
+
+### Fixed
+
+* [#31](https://github.com/sebastianbergmann/php-timer/issues/31): Type Error on 32-bit systems (where `hrtime()` returns `float` instead of `int`)
+
+## [4.0.0] - 2020-06-01
+
+### Added
+
+* Introduced `Duration` value object for encapsulating a duration with nanosecond granularity
+* Introduced `ResourceUsageFormatter` object for formatting resource usage with option to explicitly pass a duration (instead of looking at the unreliable `$_SERVER['REQUEST_TIME_FLOAT']` variable)
+
+### Changed
+
+* The methods of `Timer` are no longer static
+* `Timer::stop()` now returns a `Duration` value object
+
+### Removed
+
+* Functionality that is now implemented in `Duration` and `ResourceUsageFormatter` has been removed from `Timer`
+
+## [3.1.4] - 2020-04-20
+
+### Changed
+
+* `Timer::timeSinceStartOfRequest()` no longer tries `$_SERVER['REQUEST_TIME']` when `$_SERVER['REQUEST_TIME_FLOAT']` is not available (`$_SERVER['REQUEST_TIME_FLOAT']` was added in PHP 5.4 and this library requires PHP 7.3)
+* Improved exception messages when `$_SERVER['REQUEST_TIME_FLOAT']` is not set or is not of type `float`
+
+### Changed
+
+## [3.1.3] - 2020-04-20
+
+### Changed
+
+* `Timer::timeSinceStartOfRequest()` now raises an exception if `$_SERVER['REQUEST_TIME_FLOAT']` does not contain a `float` (or `$_SERVER['REQUEST_TIME']` does not contain an `int`)
+
+## [3.1.2] - 2020-04-17
+
+### Changed
+
+* Improved the fix for [#30](https://github.com/sebastianbergmann/php-timer/issues/30) and restored usage of `hrtime()`
+
+## [3.1.1] - 2020-04-17
+
+### Fixed
+
+* [#30](https://github.com/sebastianbergmann/php-timer/issues/30): Resolution of time returned by `Timer::stop()` is different than before (this reverts using `hrtime()` instead of `microtime()`)
+
+## [3.1.0] - 2020-04-17
+
+### Added
+
+* `Timer::secondsToShortTimeString()` as alternative to `Timer::secondsToTimeString()`
+
+### Changed
+
+* `Timer::start()` and `Timer::stop()` now use `hrtime()` (high resolution monotonic timer) instead of `microtime()`
+* `Timer::timeSinceStartOfRequest()` now uses `Timer::secondsToShortTimeString()` for time formatting
+* Improved formatting of `Timer::secondsToTimeString()` result
+
+## [3.0.0] - 2020-02-07
+
+### Removed
+
+* This component is no longer supported on PHP 7.1 and PHP 7.2
+
## [2.1.2] - 2019-06-07
### Fixed
-* Fixed [#21](https://github.com/sebastianbergmann/php-timer/pull/3352): Formatting of memory consumption does not work on 32bit systems
+* [#21](https://github.com/sebastianbergmann/php-timer/pull/21): Formatting of memory consumption does not work on 32bit systems
## [2.1.1] - 2019-02-20
@@ -30,7 +121,18 @@
* This component is no longer supported on PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6, and PHP 7.0
-[2.1.2]: https://github.com/sebastianbergmann/diff/compare/2.1.1...2.1.2
-[2.1.1]: https://github.com/sebastianbergmann/diff/compare/2.1.0...2.1.1
-[2.1.0]: https://github.com/sebastianbergmann/diff/compare/2.0.0...2.1.0
-[2.0.0]: https://github.com/sebastianbergmann/diff/compare/1.0.9...2.0.0
+[5.0.3]: https://github.com/sebastianbergmann/php-timer/compare/5.0.2...5.0.3
+[5.0.2]: https://github.com/sebastianbergmann/php-timer/compare/5.0.1...5.0.2
+[5.0.1]: https://github.com/sebastianbergmann/php-timer/compare/5.0.0...5.0.1
+[5.0.0]: https://github.com/sebastianbergmann/php-timer/compare/4.0.0...5.0.0
+[4.0.0]: https://github.com/sebastianbergmann/php-timer/compare/3.1.4...4.0.0
+[3.1.4]: https://github.com/sebastianbergmann/php-timer/compare/3.1.3...3.1.4
+[3.1.3]: https://github.com/sebastianbergmann/php-timer/compare/3.1.2...3.1.3
+[3.1.2]: https://github.com/sebastianbergmann/php-timer/compare/3.1.1...3.1.2
+[3.1.1]: https://github.com/sebastianbergmann/php-timer/compare/3.1.0...3.1.1
+[3.1.0]: https://github.com/sebastianbergmann/php-timer/compare/3.0.0...3.1.0
+[3.0.0]: https://github.com/sebastianbergmann/php-timer/compare/2.1.2...3.0.0
+[2.1.2]: https://github.com/sebastianbergmann/php-timer/compare/2.1.1...2.1.2
+[2.1.1]: https://github.com/sebastianbergmann/php-timer/compare/2.1.0...2.1.1
+[2.1.0]: https://github.com/sebastianbergmann/php-timer/compare/2.0.0...2.1.0
+[2.0.0]: https://github.com/sebastianbergmann/php-timer/compare/1.0.9...2.0.0
diff -Nru php-timer-2.1.2/composer.json php-timer-5.0.3/composer.json
--- php-timer-2.1.2/composer.json 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/composer.json 2020-12-20 19:31:24.000000000 +0000
@@ -19,12 +19,15 @@
},
"prefer-stable": true,
"require": {
- "php": "^7.1"
+ "php": ">=7.3"
},
"require-dev": {
- "phpunit/phpunit": "^7.0"
+ "phpunit/phpunit": "^9.3"
},
"config": {
+ "platform": {
+ "php": "7.3.0"
+ },
"optimize-autoloader": true,
"sort-packages": true
},
@@ -35,7 +38,7 @@
},
"extra": {
"branch-alias": {
- "dev-master": "2.1-dev"
+ "dev-master": "5.0-dev"
}
}
}
diff -Nru php-timer-2.1.2/debian/changelog php-timer-5.0.3/debian/changelog
--- php-timer-2.1.2/debian/changelog 2019-08-18 18:24:16.000000000 +0000
+++ php-timer-5.0.3/debian/changelog 2020-12-21 13:04:01.000000000 +0000
@@ -1,3 +1,96 @@
+php-timer (5.0.3-2) unstable; urgency=medium
+
+ [ Remi Collet ]
+ * Fix test failing on 32-bit (Closes: #966412)
+
+ -- David Prévot Mon, 21 Dec 2020 09:04:01 -0400
+
+php-timer (5.0.3-1) unstable; urgency=medium
+
+ * Source upload now that everything is in place
+
+ -- David Prévot Sun, 20 Dec 2020 17:25:51 -0400
+
+php-timer (5.0.3-1~stage1) unstable; urgency=medium
+
+ * Upload to unstable in sync with PHPUnit 9
+
+ [ Sebastian Bergmann ]
+ * Prepare release
+
+ [ David Prévot ]
+ * Update watch file format version to 4.
+ * Update Standards-Version to 4.5.1
+
+ -- David Prévot Sun, 20 Dec 2020 15:32:59 -0400
+
+php-timer (5.0.2-1) experimental; urgency=medium
+
+ [ Sebastian Bergmann ]
+ * Prepare release
+
+ [ David Prévot ]
+ * Rename main branch to debian/latest (DEP-14)
+ * Set Rules-Requires-Root: no.
+
+ -- David Prévot Wed, 30 Sep 2020 11:44:55 -0400
+
+php-timer (5.0.1-1) experimental; urgency=medium
+
+ [ Sebastian Bergmann ]
+ * Support PHP 8 for https://github.com/sebastianbergmann/phpunit/issues/4325
+ * Prepare release
+
+ -- David Prévot Sun, 28 Jun 2020 13:51:50 -1000
+
+php-timer (5.0.0-1) experimental; urgency=medium
+
+ [ Sebastian Bergmann ]
+ * Closes #31
+
+ -- David Prévot Wed, 10 Jun 2020 15:20:09 -1000
+
+php-timer (4.0.0-1) experimental; urgency=medium
+
+ [ Sebastian Bergmann ]
+ * Ignore tests etc. from archive exports
+ * Prepare release
+
+ [ David Prévot ]
+ * Document gbp import-ref usage
+ * Use debhelper-compat 13
+ * Simplify override_dh_auto_test
+ * Build-Depend on recent phpunit
+
+ -- David Prévot Fri, 05 Jun 2020 17:50:12 -1000
+
+php-timer (3.1.4-1) experimental; urgency=medium
+
+ [ Sebastian Bergmann ]
+ * Prepare release
+
+ -- David Prévot Sun, 26 Apr 2020 08:33:12 -1000
+
+php-timer (3.0.0-1) experimental; urgency=medium
+
+ * Upload version compatible with PHPUnit 9 to experimental
+
+ [ Sebastian Bergmann ]
+ * Bump copyright year
+ * Drop support for PHP 7.1 and PHP 7.2
+ * Prepare release
+
+ [ David Prévot ]
+ * debian/copyright: Update copyright (years)
+ * debian/upstream/metadata:
+ + Set fields: Bug-Database, Bug-Submit, Repository, Repository-Browse
+ + Remove obsolete fields: Contact, Name
+ * debian/control:
+ + Drop versioned dependency satisfied in (old)stable
+ + Update standards version to 4.5.0
+
+ -- David Prévot Fri, 07 Feb 2020 19:57:34 -1000
+
php-timer (2.1.2-2) unstable; urgency=medium
* Upload to unstable now thet buster has been released
diff -Nru php-timer-2.1.2/debian/control php-timer-5.0.3/debian/control
--- php-timer-2.1.2/debian/control 2019-08-18 18:20:00.000000000 +0000
+++ php-timer-5.0.3/debian/control 2020-12-20 19:38:25.000000000 +0000
@@ -5,14 +5,15 @@
Uploaders: Prach Pongpanich ,
David Prévot
Build-Depends: ant,
- debhelper-compat (= 12),
+ debhelper-compat (= 13),
phpab,
- phpunit,
- pkg-php-tools (>= 1.7~)
-Standards-Version: 4.4.0
+ phpunit (>= 9.2),
+ pkg-php-tools
+Standards-Version: 4.5.1
Homepage: https://github.com/sebastianbergmann/php-timer
-Vcs-Git: https://salsa.debian.org/php-team/pear/php-timer.git
+Vcs-Git: https://salsa.debian.org/php-team/pear/php-timer.git -b debian/latest
Vcs-Browser: https://salsa.debian.org/php-team/pear/php-timer
+Rules-Requires-Root: no
Package: php-timer
Architecture: all
diff -Nru php-timer-2.1.2/debian/copyright php-timer-5.0.3/debian/copyright
--- php-timer-2.1.2/debian/copyright 2019-08-18 18:19:37.000000000 +0000
+++ php-timer-5.0.3/debian/copyright 2020-12-20 19:32:04.000000000 +0000
@@ -4,7 +4,7 @@
Source: https://github.com/sebastianbergmann/php-timer/
Files: *
-Copyright: 2009-2019, Sebastian Bergmann
+Copyright: 2009-2020, Sebastian Bergmann
License: BSD-3-clause
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
diff -Nru php-timer-2.1.2/debian/gbp.conf php-timer-5.0.3/debian/gbp.conf
--- php-timer-2.1.2/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/debian/gbp.conf 2020-12-20 19:31:30.000000000 +0000
@@ -0,0 +1,9 @@
+[DEFAULT]
+debian-branch = debian/latest
+pristine-tar = True
+pristine-tar-commit = True
+
+## Once --filter support gets added to gbp import-ref, we should be able
+## to simplify the workflow and ignore the upstream branch.
+# filter = [ '.gitattributes' ]
+# upstream-tag = %(version%~%-)s
diff -Nru php-timer-2.1.2/debian/patches/0001-Fix-34-test-failing-on-32-bit.patch php-timer-5.0.3/debian/patches/0001-Fix-34-test-failing-on-32-bit.patch
--- php-timer-2.1.2/debian/patches/0001-Fix-34-test-failing-on-32-bit.patch 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/debian/patches/0001-Fix-34-test-failing-on-32-bit.patch 2020-12-21 13:02:23.000000000 +0000
@@ -0,0 +1,99 @@
+From: Remi Collet
+Date: Tue, 27 Oct 2020 11:38:32 +0100
+Subject: Fix #34 test failing on 32-bit
+
+Origin: upstream, https://github.com/sebastianbergmann/php-timer/commit/e6f95693a8082d4639a8488b0e997ab35d081fc9
+Bug: https://github.com/sebastianbergmann/php-timer/issues/34
+Bug-Debian: #966412
+---
+ tests/DurationTest.php | 70 +++++++++++++++++++++++++-------------------------
+ 1 file changed, 35 insertions(+), 35 deletions(-)
+
+diff --git a/tests/DurationTest.php b/tests/DurationTest.php
+index d8ba2a0..2129757 100644
+--- a/tests/DurationTest.php
++++ b/tests/DurationTest.php
+@@ -43,7 +43,7 @@ final class DurationTest extends TestCase
+ * @dataProvider durationProvider
+ * @testdox Formats $microseconds microseconds as "$string"
+ */
+- public function testCanBeFormattedAsString(string $string, int $microseconds): void
++ public function testCanBeFormattedAsString(string $string, float $microseconds): void
+ {
+ $duration = Duration::fromMicroseconds($microseconds);
+
+@@ -53,40 +53,40 @@ final class DurationTest extends TestCase
+ public function durationProvider(): array
+ {
+ return [
+- ['00:00', (int) round((0 * 1000000))],
+- ['00:00.001', (int) round((.001 * 1000000))],
+- ['00:00.010', (int) round((.01 * 1000000))],
+- ['00:00.100', (int) round((.1 * 1000000))],
+- ['00:00.999', (int) round((.999 * 1000000))],
+- ['00:00.999', (int) round((.9999 * 1000000))],
+- ['00:01', (int) round((1 * 1000000))],
+- ['00:02', (int) round((2 * 1000000))],
+- ['00:59.900', (int) round((59.9 * 1000000))],
+- ['00:59.990', (int) round((59.99 * 1000000))],
+- ['00:59.999', (int) round((59.999 * 1000000))],
+- ['00:59.999', (int) round((59.9999 * 1000000))],
+- ['00:59.001', (int) round((59.001 * 1000000))],
+- ['00:59.010', (int) round((59.01 * 1000000))],
+- ['01:00', (int) round((60 * 1000000))],
+- ['01:01', (int) round((61 * 1000000))],
+- ['02:00', (int) round((120 * 1000000))],
+- ['02:01', (int) round((121 * 1000000))],
+- ['59:59.900', (int) round((3599.9 * 1000000))],
+- ['59:59.990', (int) round((3599.99 * 1000000))],
+- ['59:59.999', (int) round((3599.999 * 1000000))],
+- ['59:59.999', (int) round((3599.9999 * 1000000))],
+- ['59:59.001', (int) round((3599.001 * 1000000))],
+- ['59:59.010', (int) round((3599.01 * 1000000))],
+- ['01:00:00', (int) round((3600 * 1000000))],
+- ['01:00:01', (int) round((3601 * 1000000))],
+- ['01:00:01.900', (int) round((3601.9 * 1000000))],
+- ['01:00:01.990', (int) round((3601.99 * 1000000))],
+- ['01:00:01.999', (int) round((3601.999 * 1000000))],
+- ['01:00:01.999', (int) round((3601.9999 * 1000000))],
+- ['01:00:59.999', (int) round((3659.9999 * 1000000))],
+- ['01:00:59.001', (int) round((3659.001 * 1000000))],
+- ['01:00:59.010', (int) round((3659.01 * 1000000))],
+- ['01:59:59.999', (int) round((7199.9999 * 1000000))],
++ ['00:00', round((0 * 1000000))],
++ ['00:00.001', round((.001 * 1000000))],
++ ['00:00.010', round((.01 * 1000000))],
++ ['00:00.100', round((.1 * 1000000))],
++ ['00:00.999', round((.999 * 1000000))],
++ ['00:00.999', round((.9999 * 1000000))],
++ ['00:01', round((1 * 1000000))],
++ ['00:02', round((2 * 1000000))],
++ ['00:59.900', round((59.9 * 1000000))],
++ ['00:59.990', round((59.99 * 1000000))],
++ ['00:59.999', round((59.999 * 1000000))],
++ ['00:59.999', round((59.9999 * 1000000))],
++ ['00:59.001', round((59.001 * 1000000))],
++ ['00:59.010', round((59.01 * 1000000))],
++ ['01:00', round((60 * 1000000))],
++ ['01:01', round((61 * 1000000))],
++ ['02:00', round((120 * 1000000))],
++ ['02:01', round((121 * 1000000))],
++ ['59:59.900', round((3599.9 * 1000000))],
++ ['59:59.990', round((3599.99 * 1000000))],
++ ['59:59.999', round((3599.999 * 1000000))],
++ ['59:59.999', round((3599.9999 * 1000000))],
++ ['59:59.001', round((3599.001 * 1000000))],
++ ['59:59.010', round((3599.01 * 1000000))],
++ ['01:00:00', round((3600 * 1000000))],
++ ['01:00:01', round((3601 * 1000000))],
++ ['01:00:01.900', round((3601.9 * 1000000))],
++ ['01:00:01.990', round((3601.99 * 1000000))],
++ ['01:00:01.999', round((3601.999 * 1000000))],
++ ['01:00:01.999', round((3601.9999 * 1000000))],
++ ['01:00:59.999', round((3659.9999 * 1000000))],
++ ['01:00:59.001', round((3659.001 * 1000000))],
++ ['01:00:59.010', round((3659.01 * 1000000))],
++ ['01:59:59.999', round((7199.9999 * 1000000))],
+ ];
+ }
+ }
diff -Nru php-timer-2.1.2/debian/patches/series php-timer-5.0.3/debian/patches/series
--- php-timer-2.1.2/debian/patches/series 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/debian/patches/series 2020-12-21 13:02:23.000000000 +0000
@@ -0,0 +1 @@
+0001-Fix-34-test-failing-on-32-bit.patch
diff -Nru php-timer-2.1.2/debian/README.source php-timer-5.0.3/debian/README.source
--- php-timer-2.1.2/debian/README.source 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/debian/README.source 2020-12-20 19:31:30.000000000 +0000
@@ -0,0 +1,8 @@
+Starting with 4.0.0, we are merging the signed upstream tags as
+upstream, instead of using the tarball that doesn’t ship tests.
+
+# Example to import upstream 4.0.0 version
+version=4.0.0
+# We still use the upstream branch to drop the .gitattributes file from upstream
+gbp import-ref --upstream-tag=%\(version%~%-\)s -u$version --debian-branch=upstream
+gbp import-ref --upstream-tree=BRANCH -u$version
diff -Nru php-timer-2.1.2/debian/rules php-timer-5.0.3/debian/rules
--- php-timer-2.1.2/debian/rules 2019-08-18 18:19:36.000000000 +0000
+++ php-timer-5.0.3/debian/rules 2020-12-20 19:31:30.000000000 +0000
@@ -10,8 +10,4 @@
src
override_dh_auto_test:
-ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS)))
phpunit --bootstrap src/autoload.php
-else
- @echo "** tests disabled"
-endif
diff -Nru php-timer-2.1.2/debian/upstream/metadata php-timer-5.0.3/debian/upstream/metadata
--- php-timer-2.1.2/debian/upstream/metadata 2019-08-18 18:19:37.000000000 +0000
+++ php-timer-5.0.3/debian/upstream/metadata 2020-12-20 19:31:30.000000000 +0000
@@ -1,2 +1,4 @@
-Name: PHP_Timer
-Contact: Sebastian Bergmann
+Bug-Database: https://github.com/sebastianbergmann/php-timer/issues
+Bug-Submit: https://github.com/sebastianbergmann/php-timer/issues/new
+Repository: https://github.com/sebastianbergmann/php-timer.git
+Repository-Browse: https://github.com/sebastianbergmann/php-timer
diff -Nru php-timer-2.1.2/debian/watch php-timer-5.0.3/debian/watch
--- php-timer-2.1.2/debian/watch 2019-02-25 22:46:09.000000000 +0000
+++ php-timer-5.0.3/debian/watch 2020-12-20 19:32:13.000000000 +0000
@@ -1,3 +1,3 @@
-version=3
+version=4
https://github.com/sebastianbergmann/php-timer/releases \
.*/archive/v?([\d\.]+)\.tar.gz
diff -Nru php-timer-2.1.2/.gitattributes php-timer-5.0.3/.gitattributes
--- php-timer-2.1.2/.gitattributes 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/.gitattributes 1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-*.php diff=php
diff -Nru php-timer-2.1.2/.github/FUNDING.yml php-timer-5.0.3/.github/FUNDING.yml
--- php-timer-2.1.2/.github/FUNDING.yml 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/.github/FUNDING.yml 2020-12-20 19:31:24.000000000 +0000
@@ -1 +1 @@
-patreon: s_bergmann
+github: sebastianbergmann
diff -Nru php-timer-2.1.2/.github/stale.yml php-timer-5.0.3/.github/stale.yml
--- php-timer-2.1.2/.github/stale.yml 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/.github/stale.yml 1970-01-01 00:00:00.000000000 +0000
@@ -1,40 +0,0 @@
-# Configuration for probot-stale - https://github.com/probot/stale
-
-# Number of days of inactivity before an Issue or Pull Request becomes stale
-daysUntilStale: 60
-
-# Number of days of inactivity before a stale Issue or Pull Request is closed.
-# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
-daysUntilClose: 7
-
-# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
-exemptLabels:
- - enhancement
-
-# Set to true to ignore issues in a project (defaults to false)
-exemptProjects: false
-
-# Set to true to ignore issues in a milestone (defaults to false)
-exemptMilestones: false
-
-# Label to use when marking as stale
-staleLabel: stale
-
-# Comment to post when marking as stale. Set to `false` to disable
-markComment: >
- This issue has been automatically marked as stale because it has not had activity within the last 60 days. It will be closed after 7 days if no further activity occurs. Thank you for your contributions.
-
-# Comment to post when removing the stale label.
-# unmarkComment: >
-# Your comment here.
-
-# Comment to post when closing a stale Issue or Pull Request.
-closeComment: >
- This issue has been automatically closed because it has not had activity since it was marked as stale. Thank you for your contributions.
-
-# Limit the number of actions per hour, from 1-30. Default is 30
-limitPerRun: 30
-
-# Limit to only `issues` or `pulls`
-only: issues
-
diff -Nru php-timer-2.1.2/.github/workflows/ci.yml php-timer-5.0.3/.github/workflows/ci.yml
--- php-timer-2.1.2/.github/workflows/ci.yml 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/.github/workflows/ci.yml 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,101 @@
+# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
+
+on:
+ - "pull_request"
+ - "push"
+
+name: "CI"
+
+jobs:
+ coding-guidelines:
+ name: "Coding Guidelines"
+
+ runs-on: "ubuntu-latest"
+
+ steps:
+ - name: "Checkout"
+ uses: "actions/checkout@v2"
+
+ - name: "Run friendsofphp/php-cs-fixer"
+ run: "php7.4 ./tools/php-cs-fixer fix --diff-format=udiff --dry-run --show-progress=dots --using-cache=no --verbose"
+
+ type-checker:
+ name: "Type Checker"
+
+ runs-on: "ubuntu-latest"
+
+ steps:
+ - name: "Checkout"
+ uses: "actions/checkout@v2"
+
+ - name: "Update dependencies with composer"
+ run: "php7.4 ./tools/composer update --no-ansi --no-interaction --no-progress"
+
+ - name: "Run vimeo/psalm"
+ run: "php7.4 ./tools/psalm --config=.psalm/config.xml --no-progress --shepherd --show-info=false --stats"
+
+ backward-compatibility:
+ name: Backward Compatibility
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+
+ - name: Fetch tags
+ run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
+
+ - name: Install PHP with extensions
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: 7.4
+ coverage: none
+ extensions: intl
+
+ - name: Run roave/backward-compatibility-check
+ run: ./tools/roave-backward-compatibility-check --from=5.0.3
+
+ tests:
+ name: "Tests"
+
+ runs-on: "ubuntu-latest"
+
+ strategy:
+ fail-fast: false
+ matrix:
+ php-version:
+ - "7.3"
+ - "7.4"
+ - "8.0"
+ - "8.1"
+
+ steps:
+ - name: "Checkout"
+ uses: "actions/checkout@v2"
+
+ - name: "Install PHP with extensions"
+ uses: "shivammathur/setup-php@v2"
+ with:
+ php-version: "${{ matrix.php-version }}"
+ coverage: "pcov"
+
+ - name: "Cache dependencies installed with composer"
+ uses: "actions/cache@v1"
+ with:
+ path: "~/.composer/cache"
+ key: "php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('**/composer.json') }}"
+ restore-keys: "php${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-"
+
+ - name: "Install dependencies with composer"
+ run: "./tools/composer update --no-ansi --no-interaction --no-progress"
+
+ - name: "Run tests with phpunit/phpunit"
+ run: "vendor/bin/phpunit --coverage-clover=coverage.xml"
+
+ - name: "Send code coverage report to Codecov.io"
+ env:
+ CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}"
+ run: "bash <(curl -s https://codecov.io/bash) || true"
diff -Nru php-timer-2.1.2/.gitignore php-timer-5.0.3/.gitignore
--- php-timer-2.1.2/.gitignore 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/.gitignore 2020-12-20 19:31:24.000000000 +0000
@@ -1,5 +1,6 @@
/.idea
+/.php_cs
/.php_cs.cache
-/vendor
+/.phpunit.result.cache
/composer.lock
-
+/vendor
diff -Nru php-timer-2.1.2/LICENSE php-timer-5.0.3/LICENSE
--- php-timer-2.1.2/LICENSE 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/LICENSE 2020-12-20 19:31:24.000000000 +0000
@@ -1,6 +1,6 @@
phpunit/php-timer
-Copyright (c) 2010-2019, Sebastian Bergmann .
+Copyright (c) 2010-2020, Sebastian Bergmann .
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff -Nru php-timer-2.1.2/.phive/phars.xml php-timer-5.0.3/.phive/phars.xml
--- php-timer-2.1.2/.phive/phars.xml 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/.phive/phars.xml 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff -Nru php-timer-2.1.2/.php_cs.dist php-timer-5.0.3/.php_cs.dist
--- php-timer-2.1.2/.php_cs.dist 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/.php_cs.dist 2020-12-20 19:31:24.000000000 +0000
@@ -8,190 +8,206 @@
file that was distributed with this source code.
EOF;
+$finder = PhpCsFixer\Finder::create()
+ ->files()
+ ->in(__DIR__ . '/src')
+ ->in(__DIR__ . '/tests');
+
return PhpCsFixer\Config::create()
+ ->setFinder($finder)
->setRiskyAllowed(true)
- ->setRules(
- [
- 'align_multiline_comment' => true,
- 'array_indentation' => true,
- 'array_syntax' => ['syntax' => 'short'],
- 'binary_operator_spaces' => [
- 'operators' => [
- '=' => 'align',
- '=>' => 'align',
- ],
+ ->setRules([
+ 'align_multiline_comment' => true,
+ 'array_indentation' => true,
+ 'array_syntax' => ['syntax' => 'short'],
+ 'binary_operator_spaces' => [
+ 'operators' => [
+ '=' => 'align',
+ '=>' => 'align',
],
- 'blank_line_after_namespace' => true,
- 'blank_line_before_statement' => [
- 'statements' => [
- 'break',
- 'continue',
- 'declare',
- 'do',
- 'for',
- 'foreach',
- 'if',
- 'include',
- 'include_once',
- 'require',
- 'require_once',
- 'return',
- 'switch',
- 'throw',
- 'try',
- 'while',
- 'yield',
- ],
+ ],
+ 'blank_line_after_namespace' => true,
+ 'blank_line_before_statement' => [
+ 'statements' => [
+ 'break',
+ 'continue',
+ 'declare',
+ 'do',
+ 'for',
+ 'foreach',
+ 'if',
+ 'include',
+ 'include_once',
+ 'require',
+ 'require_once',
+ 'return',
+ 'switch',
+ 'throw',
+ 'try',
+ 'while',
+ 'yield',
],
- 'braces' => true,
- 'cast_spaces' => true,
- 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']],
- 'combine_consecutive_issets' => true,
- 'combine_consecutive_unsets' => true,
- 'compact_nullable_typehint' => true,
- 'concat_space' => ['spacing' => 'one'],
- 'declare_equal_normalize' => ['space' => 'none'],
- 'declare_strict_types' => true,
- 'dir_constant' => true,
- 'elseif' => true,
- 'encoding' => true,
- 'full_opening_tag' => true,
- 'function_declaration' => true,
- 'header_comment' => ['header' => $header, 'separate' => 'none'],
- 'indentation_type' => true,
- 'is_null' => true,
- 'line_ending' => true,
- 'list_syntax' => ['syntax' => 'short'],
- 'logical_operators' => true,
- 'lowercase_cast' => true,
- 'lowercase_constants' => true,
- 'lowercase_keywords' => true,
- 'lowercase_static_reference' => true,
- 'magic_constant_casing' => true,
- 'method_argument_space' => ['ensure_fully_multiline' => true],
- 'modernize_types_casting' => true,
- 'multiline_comment_opening_closing' => true,
- 'multiline_whitespace_before_semicolons' => true,
- 'native_constant_invocation' => true,
- 'native_function_casing' => true,
- 'native_function_invocation' => true,
- 'new_with_braces' => false,
- 'no_alias_functions' => true,
- 'no_alternative_syntax' => true,
- 'no_blank_lines_after_class_opening' => true,
- 'no_blank_lines_after_phpdoc' => true,
- 'no_blank_lines_before_namespace' => true,
- 'no_closing_tag' => true,
- 'no_empty_comment' => true,
- 'no_empty_phpdoc' => true,
- 'no_empty_statement' => true,
- 'no_extra_blank_lines' => true,
- 'no_homoglyph_names' => true,
- 'no_leading_import_slash' => true,
- 'no_leading_namespace_whitespace' => true,
- 'no_mixed_echo_print' => ['use' => 'print'],
- 'no_multiline_whitespace_around_double_arrow' => true,
- 'no_null_property_initialization' => true,
- 'no_php4_constructor' => true,
- 'no_short_bool_cast' => true,
- 'no_short_echo_tag' => true,
- 'no_singleline_whitespace_before_semicolons' => true,
- 'no_spaces_after_function_name' => true,
- 'no_spaces_inside_parenthesis' => true,
- 'no_superfluous_elseif' => true,
- 'no_superfluous_phpdoc_tags' => true,
- 'no_trailing_comma_in_list_call' => true,
- 'no_trailing_comma_in_singleline_array' => true,
- 'no_trailing_whitespace' => true,
- 'no_trailing_whitespace_in_comment' => true,
- 'no_unneeded_control_parentheses' => true,
- 'no_unneeded_curly_braces' => true,
- 'no_unneeded_final_method' => true,
- 'no_unreachable_default_argument_value' => true,
- 'no_unset_on_property' => true,
- 'no_unused_imports' => true,
- 'no_useless_else' => true,
- 'no_useless_return' => true,
- 'no_whitespace_before_comma_in_array' => true,
- 'no_whitespace_in_blank_line' => true,
- 'non_printable_character' => true,
- 'normalize_index_brace' => true,
- 'object_operator_without_whitespace' => true,
- 'ordered_class_elements' => [
- 'order' => [
- 'use_trait',
- 'constant_public',
- 'constant_protected',
- 'constant_private',
- 'property_public_static',
- 'property_protected_static',
- 'property_private_static',
- 'property_public',
- 'property_protected',
- 'property_private',
- 'method_public_static',
- 'construct',
- 'destruct',
- 'magic',
- 'phpunit',
- 'method_public',
- 'method_protected',
- 'method_private',
- 'method_protected_static',
- 'method_private_static',
- ],
+ ],
+ 'braces' => true,
+ 'cast_spaces' => true,
+ 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']],
+ 'combine_consecutive_issets' => true,
+ 'combine_consecutive_unsets' => true,
+ 'compact_nullable_typehint' => true,
+ 'concat_space' => ['spacing' => 'one'],
+ 'declare_equal_normalize' => ['space' => 'none'],
+ 'declare_strict_types' => true,
+ 'dir_constant' => true,
+ 'elseif' => true,
+ 'encoding' => true,
+ 'full_opening_tag' => true,
+ 'function_declaration' => true,
+ 'global_namespace_import' => [
+ 'import_classes' => true,
+ 'import_constants' => true,
+ 'import_functions' => true,
+ ],
+ 'header_comment' => ['header' => $header, 'separate' => 'none'],
+ 'indentation_type' => true,
+ 'is_null' => true,
+ 'line_ending' => true,
+ 'list_syntax' => ['syntax' => 'short'],
+ 'logical_operators' => true,
+ 'lowercase_cast' => true,
+ 'lowercase_constants' => true,
+ 'lowercase_keywords' => true,
+ 'lowercase_static_reference' => true,
+ 'magic_constant_casing' => true,
+ 'method_argument_space' => ['ensure_fully_multiline' => true],
+ 'modernize_types_casting' => true,
+ 'multiline_comment_opening_closing' => true,
+ 'multiline_whitespace_before_semicolons' => true,
+ 'native_constant_invocation' => false,
+ 'native_function_casing' => false,
+ 'native_function_invocation' => false,
+ 'new_with_braces' => false,
+ 'no_alias_functions' => true,
+ 'no_alternative_syntax' => true,
+ 'no_blank_lines_after_class_opening' => true,
+ 'no_blank_lines_after_phpdoc' => true,
+ 'no_blank_lines_before_namespace' => true,
+ 'no_closing_tag' => true,
+ 'no_empty_comment' => true,
+ 'no_empty_phpdoc' => true,
+ 'no_empty_statement' => true,
+ 'no_extra_blank_lines' => true,
+ 'no_homoglyph_names' => true,
+ 'no_leading_import_slash' => true,
+ 'no_leading_namespace_whitespace' => true,
+ 'no_mixed_echo_print' => ['use' => 'print'],
+ 'no_multiline_whitespace_around_double_arrow' => true,
+ 'no_null_property_initialization' => true,
+ 'no_php4_constructor' => true,
+ 'no_short_bool_cast' => true,
+ 'no_short_echo_tag' => true,
+ 'no_singleline_whitespace_before_semicolons' => true,
+ 'no_spaces_after_function_name' => true,
+ 'no_spaces_inside_parenthesis' => true,
+ 'no_superfluous_elseif' => true,
+ 'no_superfluous_phpdoc_tags' => [
+ 'allow_mixed' => true,
+ ],
+ 'no_trailing_comma_in_list_call' => true,
+ 'no_trailing_comma_in_singleline_array' => true,
+ 'no_trailing_whitespace' => true,
+ 'no_trailing_whitespace_in_comment' => true,
+ 'no_unneeded_control_parentheses' => true,
+ 'no_unneeded_curly_braces' => true,
+ 'no_unneeded_final_method' => true,
+ 'no_unreachable_default_argument_value' => true,
+ 'no_unset_on_property' => true,
+ 'no_unused_imports' => true,
+ 'no_useless_else' => true,
+ 'no_useless_return' => true,
+ 'no_whitespace_before_comma_in_array' => true,
+ 'no_whitespace_in_blank_line' => true,
+ 'non_printable_character' => true,
+ 'normalize_index_brace' => true,
+ 'object_operator_without_whitespace' => true,
+ 'ordered_class_elements' => [
+ 'order' => [
+ 'use_trait',
+ 'constant_public',
+ 'constant_protected',
+ 'constant_private',
+ 'property_public_static',
+ 'property_protected_static',
+ 'property_private_static',
+ 'property_public',
+ 'property_protected',
+ 'property_private',
+ 'method_public_static',
+ 'construct',
+ 'destruct',
+ 'magic',
+ 'phpunit',
+ 'method_public',
+ 'method_protected',
+ 'method_private',
+ 'method_protected_static',
+ 'method_private_static',
],
- 'ordered_imports' => true,
- 'phpdoc_add_missing_param_annotation' => true,
- 'phpdoc_align' => true,
- 'phpdoc_annotation_without_dot' => true,
- 'phpdoc_indent' => true,
- 'phpdoc_no_access' => true,
- 'phpdoc_no_empty_return' => true,
- 'phpdoc_no_package' => true,
- 'phpdoc_order' => true,
- 'phpdoc_return_self_reference' => true,
- 'phpdoc_scalar' => true,
- 'phpdoc_separation' => true,
- 'phpdoc_single_line_var_spacing' => true,
- 'phpdoc_to_comment' => true,
- 'phpdoc_trim' => true,
- 'phpdoc_trim_consecutive_blank_line_separation' => true,
- 'phpdoc_types' => ['groups' => ['simple', 'meta']],
- 'phpdoc_types_order' => true,
- 'phpdoc_var_without_name' => true,
- 'pow_to_exponentiation' => true,
- 'protected_to_private' => true,
- 'return_assignment' => true,
- 'return_type_declaration' => ['space_before' => 'none'],
- 'self_accessor' => true,
- 'semicolon_after_instruction' => true,
- 'set_type_to_cast' => true,
- 'short_scalar_cast' => true,
- 'simplified_null_return' => true,
- 'single_blank_line_at_eof' => true,
- 'single_import_per_statement' => true,
- 'single_line_after_imports' => true,
- 'single_quote' => true,
- 'standardize_not_equals' => true,
- 'ternary_to_null_coalescing' => true,
- 'trailing_comma_in_multiline_array' => true,
- 'trim_array_spaces' => true,
- 'unary_operator_spaces' => true,
- 'visibility_required' => [
- 'elements' => [
- 'const',
- 'method',
- 'property',
- ],
+ ],
+ 'ordered_imports' => [
+ 'imports_order' => [
+ PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CONST,
+ PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_FUNCTION,
+ PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CLASS,
+ ]
+ ],
+ 'ordered_interfaces' => [
+ 'direction' => 'ascend',
+ 'order' => 'alpha',
+ ],
+ 'phpdoc_add_missing_param_annotation' => false,
+ 'phpdoc_align' => true,
+ 'phpdoc_annotation_without_dot' => true,
+ 'phpdoc_indent' => true,
+ 'phpdoc_no_access' => true,
+ 'phpdoc_no_empty_return' => true,
+ 'phpdoc_no_package' => true,
+ 'phpdoc_order' => true,
+ 'phpdoc_return_self_reference' => true,
+ 'phpdoc_scalar' => true,
+ 'phpdoc_separation' => true,
+ 'phpdoc_single_line_var_spacing' => true,
+ 'phpdoc_summary' => true,
+ 'phpdoc_to_comment' => true,
+ 'phpdoc_trim' => true,
+ 'phpdoc_trim_consecutive_blank_line_separation' => true,
+ 'phpdoc_types' => ['groups' => ['simple', 'meta']],
+ 'phpdoc_types_order' => true,
+ 'phpdoc_var_without_name' => true,
+ 'pow_to_exponentiation' => true,
+ 'protected_to_private' => true,
+ 'return_assignment' => true,
+ 'return_type_declaration' => ['space_before' => 'none'],
+ 'self_accessor' => true,
+ 'semicolon_after_instruction' => true,
+ 'set_type_to_cast' => true,
+ 'short_scalar_cast' => true,
+ 'simplified_null_return' => false,
+ 'single_blank_line_at_eof' => true,
+ 'single_import_per_statement' => true,
+ 'single_line_after_imports' => true,
+ 'single_quote' => true,
+ 'standardize_not_equals' => true,
+ 'ternary_to_null_coalescing' => true,
+ 'trailing_comma_in_multiline_array' => true,
+ 'trim_array_spaces' => true,
+ 'unary_operator_spaces' => true,
+ 'visibility_required' => [
+ 'elements' => [
+ 'const',
+ 'method',
+ 'property',
],
- 'void_return' => true,
- 'whitespace_after_comma_in_array' => true,
- ]
- )
- ->setFinder(
- PhpCsFixer\Finder::create()
- ->files()
- ->in(__DIR__ . '/src')
- ->in(__DIR__ . '/tests')
- );
+ ],
+ 'void_return' => true,
+ 'whitespace_after_comma_in_array' => true,
+ ]);
diff -Nru php-timer-2.1.2/phpunit.xml php-timer-5.0.3/phpunit.xml
--- php-timer-2.1.2/phpunit.xml 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/phpunit.xml 2020-12-20 19:31:24.000000000 +0000
@@ -1,19 +1,24 @@
-
- tests
-
+
+
+ tests
+
+
-
-
+
+
src
-
-
+
+
diff -Nru php-timer-2.1.2/.psalm/baseline.xml php-timer-5.0.3/.psalm/baseline.xml
--- php-timer-2.1.2/.psalm/baseline.xml 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/.psalm/baseline.xml 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,2 @@
+
+
diff -Nru php-timer-2.1.2/.psalm/config.xml php-timer-5.0.3/.psalm/config.xml
--- php-timer-2.1.2/.psalm/config.xml 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/.psalm/config.xml 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
diff -Nru php-timer-2.1.2/README.md php-timer-5.0.3/README.md
--- php-timer-2.1.2/README.md 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/README.md 2020-12-20 19:31:24.000000000 +0000
@@ -1,49 +1,104 @@
-[![Build Status](https://travis-ci.org/sebastianbergmann/php-timer.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-timer)
-
# phpunit/php-timer
+[![CI Status](https://github.com/sebastianbergmann/php-timer/workflows/CI/badge.svg)](https://github.com/sebastianbergmann/php-timer/actions)
+[![Type Coverage](https://shepherd.dev/github/sebastianbergmann/php-timer/coverage.svg)](https://shepherd.dev/github/sebastianbergmann/php-timer)
+
Utility class for timing things, factored out of PHPUnit into a stand-alone component.
## Installation
You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):
- composer require phpunit/php-timer
+```
+composer require phpunit/php-timer
+```
If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency:
- composer require --dev phpunit/php-timer
+```
+composer require --dev phpunit/php-timer
+```
## Usage
### Basic Timing
```php
-use SebastianBergmann\Timer\Timer;
+require __DIR__ . '/vendor/autoload.php';
-Timer::start();
+use SebastianBergmann\Timer\Timer;
-// ...
+$timer = new Timer;
-$time = Timer::stop();
-var_dump($time);
+$timer->start();
-print Timer::secondsToTimeString($time);
+foreach (\range(0, 100000) as $i) {
+ // ...
+}
+
+$duration = $timer->stop();
+
+var_dump(get_class($duration));
+var_dump($duration->asString());
+var_dump($duration->asSeconds());
+var_dump($duration->asMilliseconds());
+var_dump($duration->asMicroseconds());
+var_dump($duration->asNanoseconds());
```
The code above yields the output below:
- double(1.0967254638672E-5)
- 0 ms
+```
+string(32) "SebastianBergmann\Timer\Duration"
+string(9) "00:00.002"
+float(0.002851062)
+float(2.851062)
+float(2851.062)
+int(2851062)
+```
+
+### Resource Consumption
-### Resource Consumption Since PHP Startup
+#### Explicit duration
```php
+require __DIR__ . '/vendor/autoload.php';
+
+use SebastianBergmann\Timer\ResourceUsageFormatter;
use SebastianBergmann\Timer\Timer;
-print Timer::resourceUsage();
+$timer = new Timer;
+$timer->start();
+
+foreach (\range(0, 100000) as $i) {
+ // ...
+}
+
+print (new ResourceUsageFormatter)->resourceUsage($timer->stop());
```
The code above yields the output below:
- Time: 0 ms, Memory: 0.50MB
+```
+Time: 00:00.002, Memory: 6.00 MB
+```
+
+#### Duration since PHP Startup (using unreliable `$_SERVER['REQUEST_TIME_FLOAT']`)
+
+```php
+require __DIR__ . '/vendor/autoload.php';
+
+use SebastianBergmann\Timer\ResourceUsageFormatter;
+
+foreach (\range(0, 100000) as $i) {
+ // ...
+}
+
+print (new ResourceUsageFormatter)->resourceUsageSinceStartOfRequest();
+```
+
+The code above yields the output below:
+
+```
+Time: 00:00.002, Memory: 6.00 MB
+```
diff -Nru php-timer-2.1.2/src/Duration.php php-timer-5.0.3/src/Duration.php
--- php-timer-2.1.2/src/Duration.php 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/src/Duration.php 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,109 @@
+
+ *
+ * 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 -Nru php-timer-2.1.2/src/Exception.php php-timer-5.0.3/src/Exception.php
--- php-timer-2.1.2/src/Exception.php 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/src/Exception.php 1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-namespace SebastianBergmann\Timer;
-
-interface Exception
-{
-}
diff -Nru php-timer-2.1.2/src/exceptions/Exception.php php-timer-5.0.3/src/exceptions/Exception.php
--- php-timer-2.1.2/src/exceptions/Exception.php 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/src/exceptions/Exception.php 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,16 @@
+
+ *
+ * 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 -Nru php-timer-2.1.2/src/exceptions/NoActiveTimerException.php php-timer-5.0.3/src/exceptions/NoActiveTimerException.php
--- php-timer-2.1.2/src/exceptions/NoActiveTimerException.php 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/src/exceptions/NoActiveTimerException.php 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,16 @@
+
+ *
+ * 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 -Nru php-timer-2.1.2/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php php-timer-5.0.3/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php
--- php-timer-2.1.2/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,16 @@
+
+ *
+ * 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
+{
+}
diff -Nru php-timer-2.1.2/src/ResourceUsageFormatter.php php-timer-5.0.3/src/ResourceUsageFormatter.php
--- php-timer-2.1.2/src/ResourceUsageFormatter.php 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/src/ResourceUsageFormatter.php 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,73 @@
+
+ *
+ * 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
+ */
+ 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 -Nru php-timer-2.1.2/src/RuntimeException.php php-timer-5.0.3/src/RuntimeException.php
--- php-timer-2.1.2/src/RuntimeException.php 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/src/RuntimeException.php 1970-01-01 00:00:00.000000000 +0000
@@ -1,14 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-namespace SebastianBergmann\Timer;
-
-final class RuntimeException extends \RuntimeException implements Exception
-{
-}
diff -Nru php-timer-2.1.2/src/Timer.php php-timer-5.0.3/src/Timer.php
--- php-timer-2.1.2/src/Timer.php 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/src/Timer.php 2020-12-20 19:31:24.000000000 +0000
@@ -9,92 +9,32 @@
*/
namespace SebastianBergmann\Timer;
+use function array_pop;
+use function hrtime;
+
final class Timer
{
/**
- * @var int[]
- */
- private static $sizes = [
- 'GB' => 1073741824,
- 'MB' => 1048576,
- 'KB' => 1024,
- ];
-
- /**
- * @var int[]
- */
- private static $times = [
- 'hour' => 3600000,
- 'minute' => 60000,
- 'second' => 1000,
- ];
-
- /**
- * @var float[]
+ * @psalm-var list
*/
- private static $startTimes = [];
+ private $startTimes = [];
- public static function start(): void
+ public function start(): void
{
- self::$startTimes[] = \microtime(true);
- }
-
- public static function stop(): float
- {
- return \microtime(true) - \array_pop(self::$startTimes);
- }
-
- public static function bytesToString(float $bytes): string
- {
- foreach (self::$sizes as $unit => $value) {
- if ($bytes >= $value) {
- return \sprintf('%.2f %s', $bytes >= 1024 ? $bytes / $value : $bytes, $unit);
- }
- }
-
- return $bytes . ' byte' . ((int) $bytes !== 1 ? 's' : '');
- }
-
- public static function secondsToTimeString(float $time): string
- {
- $ms = \round($time * 1000);
-
- foreach (self::$times as $unit => $value) {
- if ($ms >= $value) {
- $time = \floor($ms / $value * 100.0) / 100.0;
-
- return $time . ' ' . ($time == 1 ? $unit : $unit . 's');
- }
- }
-
- return $ms . ' ms';
+ $this->startTimes[] = (float) hrtime(true);
}
/**
- * @throws RuntimeException
+ * @throws NoActiveTimerException
*/
- public static function timeSinceStartOfRequest(): string
+ public function stop(): Duration
{
- if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {
- $startOfRequest = $_SERVER['REQUEST_TIME_FLOAT'];
- } elseif (isset($_SERVER['REQUEST_TIME'])) {
- $startOfRequest = $_SERVER['REQUEST_TIME'];
- } else {
- throw new RuntimeException('Cannot determine time at which the request started');
+ if (empty($this->startTimes)) {
+ throw new NoActiveTimerException(
+ 'Timer::start() has to be called before Timer::stop()'
+ );
}
- return self::secondsToTimeString(\microtime(true) - $startOfRequest);
- }
-
- /**
- * @throws RuntimeException
- */
- public static function resourceUsage(): string
- {
- return \sprintf(
- 'Time: %s, Memory: %s',
- self::timeSinceStartOfRequest(),
- self::bytesToString(\memory_get_peak_usage(true))
- );
+ return Duration::fromNanoseconds((float) hrtime(true) - array_pop($this->startTimes));
}
}
diff -Nru php-timer-2.1.2/tests/DurationTest.php php-timer-5.0.3/tests/DurationTest.php
--- php-timer-2.1.2/tests/DurationTest.php 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/tests/DurationTest.php 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,92 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use function round;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @covers \SebastianBergmann\Timer\Duration
+ *
+ * @uses \SebastianBergmann\Timer\Timer
+ */
+final class DurationTest extends TestCase
+{
+ public function testCanBeCreatedFromNanoseconds(): void
+ {
+ $duration = Duration::fromNanoseconds(1);
+
+ $this->assertSame(1.0, $duration->asNanoseconds());
+ $this->assertSame(1.0E-3, $duration->asMicroseconds());
+ $this->assertSame(1.0E-6, $duration->asMilliseconds());
+ $this->assertSame(1.0E-9, $duration->asSeconds());
+ }
+
+ public function testCanBeCreatedFromMicroseconds(): void
+ {
+ $duration = Duration::fromMicroseconds(1);
+
+ $this->assertSame(1000.0, $duration->asNanoseconds());
+ $this->assertSame(1.0, $duration->asMicroseconds());
+ $this->assertSame(1.0E-3, $duration->asMilliseconds());
+ $this->assertSame(1.0E-6, $duration->asSeconds());
+ }
+
+ /**
+ * @dataProvider durationProvider
+ * @testdox Formats $microseconds microseconds as "$string"
+ */
+ public function testCanBeFormattedAsString(string $string, int $microseconds): void
+ {
+ $duration = Duration::fromMicroseconds($microseconds);
+
+ $this->assertSame($string, $duration->asString());
+ }
+
+ public function durationProvider(): array
+ {
+ return [
+ ['00:00', (int) round((0 * 1000000))],
+ ['00:00.001', (int) round((.001 * 1000000))],
+ ['00:00.010', (int) round((.01 * 1000000))],
+ ['00:00.100', (int) round((.1 * 1000000))],
+ ['00:00.999', (int) round((.999 * 1000000))],
+ ['00:00.999', (int) round((.9999 * 1000000))],
+ ['00:01', (int) round((1 * 1000000))],
+ ['00:02', (int) round((2 * 1000000))],
+ ['00:59.900', (int) round((59.9 * 1000000))],
+ ['00:59.990', (int) round((59.99 * 1000000))],
+ ['00:59.999', (int) round((59.999 * 1000000))],
+ ['00:59.999', (int) round((59.9999 * 1000000))],
+ ['00:59.001', (int) round((59.001 * 1000000))],
+ ['00:59.010', (int) round((59.01 * 1000000))],
+ ['01:00', (int) round((60 * 1000000))],
+ ['01:01', (int) round((61 * 1000000))],
+ ['02:00', (int) round((120 * 1000000))],
+ ['02:01', (int) round((121 * 1000000))],
+ ['59:59.900', (int) round((3599.9 * 1000000))],
+ ['59:59.990', (int) round((3599.99 * 1000000))],
+ ['59:59.999', (int) round((3599.999 * 1000000))],
+ ['59:59.999', (int) round((3599.9999 * 1000000))],
+ ['59:59.001', (int) round((3599.001 * 1000000))],
+ ['59:59.010', (int) round((3599.01 * 1000000))],
+ ['01:00:00', (int) round((3600 * 1000000))],
+ ['01:00:01', (int) round((3601 * 1000000))],
+ ['01:00:01.900', (int) round((3601.9 * 1000000))],
+ ['01:00:01.990', (int) round((3601.99 * 1000000))],
+ ['01:00:01.999', (int) round((3601.999 * 1000000))],
+ ['01:00:01.999', (int) round((3601.9999 * 1000000))],
+ ['01:00:59.999', (int) round((3659.9999 * 1000000))],
+ ['01:00:59.001', (int) round((3659.001 * 1000000))],
+ ['01:00:59.010', (int) round((3659.01 * 1000000))],
+ ['01:59:59.999', (int) round((7199.9999 * 1000000))],
+ ];
+ }
+}
diff -Nru php-timer-2.1.2/tests/ResourceUsageFormatterTest.php php-timer-5.0.3/tests/ResourceUsageFormatterTest.php
--- php-timer-2.1.2/tests/ResourceUsageFormatterTest.php 1970-01-01 00:00:00.000000000 +0000
+++ php-timer-5.0.3/tests/ResourceUsageFormatterTest.php 2020-12-20 19:31:24.000000000 +0000
@@ -0,0 +1,75 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+namespace SebastianBergmann\Timer;
+
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @covers \SebastianBergmann\Timer\ResourceUsageFormatter
+ *
+ * @uses \SebastianBergmann\Timer\Duration
+ * @uses \SebastianBergmann\Timer\Timer
+ */
+final class ResourceUsageFormatterTest extends TestCase
+{
+ /**
+ * @var ResourceUsageFormatter
+ */
+ private $formatter;
+
+ protected function setUp(): void
+ {
+ $this->formatter = new ResourceUsageFormatter;
+ }
+
+ public function testCanFormatResourceUsage(): void
+ {
+ $this->assertStringMatchesFormat(
+ 'Time: 01:01, Memory: %s',
+ $this->formatter->resourceUsage(
+ Duration::fromMicroseconds(61000000)
+ )
+ );
+ }
+
+ public function testCanFormatResourceUsageSinceStartOfRequest(): void
+ {
+ $this->assertStringMatchesFormat(
+ 'Time: %s, Memory: %s',
+ $this->formatter->resourceUsageSinceStartOfRequest()
+ );
+ }
+
+ /**
+ * @backupGlobals enabled
+ * @testdox Cannot format resource usage since start of request when $_SERVER['REQUEST_TIME_FLOAT'] is not available
+ */
+ public function testCannotFormatResourceUsageSinceStartOfRequestWhenRequestTimeFloatIsNotAvailable(): void
+ {
+ unset($_SERVER['REQUEST_TIME_FLOAT']);
+
+ $this->expectException(TimeSinceStartOfRequestNotAvailableException::class);
+
+ $this->formatter->resourceUsageSinceStartOfRequest();
+ }
+
+ /**
+ * @backupGlobals enabled
+ * @testdox Cannot format resource usage since start of request when $_SERVER['REQUEST_TIME_FLOAT'] is not valid
+ */
+ public function testCannotFormatResourceUsageSinceStartOfRequestWhenRequestTimeFloatIsNotValid(): void
+ {
+ $_SERVER['REQUEST_TIME_FLOAT'] = 'string';
+
+ $this->expectException(TimeSinceStartOfRequestNotAvailableException::class);
+
+ $this->formatter->resourceUsageSinceStartOfRequest();
+ }
+}
diff -Nru php-timer-2.1.2/tests/TimerTest.php php-timer-5.0.3/tests/TimerTest.php
--- php-timer-2.1.2/tests/TimerTest.php 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/tests/TimerTest.php 2020-12-20 19:31:24.000000000 +0000
@@ -13,122 +13,33 @@
/**
* @covers \SebastianBergmann\Timer\Timer
+ *
+ * @uses \SebastianBergmann\Timer\Duration
*/
final class TimerTest extends TestCase
{
- public function testCanBeStartedAndStopped(): void
- {
- $this->assertIsFloat(Timer::stop());
- }
-
- public function testCanFormatTimeSinceStartOfRequest(): void
- {
- $this->assertStringMatchesFormat('%f %s', Timer::timeSinceStartOfRequest());
- }
-
/**
- * @backupGlobals enabled
+ * @var Timer
*/
- public function testCanFormatSinceStartOfRequestWhenRequestTimeIsNotAvailableAsFloat(): void
- {
- if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {
- unset($_SERVER['REQUEST_TIME_FLOAT']);
- }
-
- $this->assertStringMatchesFormat('%f %s', Timer::timeSinceStartOfRequest());
- }
+ private $timer;
- /**
- * @backupGlobals enabled
- */
- public function testCannotFormatTimeSinceStartOfRequestWhenRequestTimeIsNotAvailable(): void
+ protected function setUp(): void
{
- if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {
- unset($_SERVER['REQUEST_TIME_FLOAT']);
- }
-
- if (isset($_SERVER['REQUEST_TIME'])) {
- unset($_SERVER['REQUEST_TIME']);
- }
-
- $this->expectException(RuntimeException::class);
-
- Timer::timeSinceStartOfRequest();
+ $this->timer = new Timer;
}
- public function testCanFormatResourceUsage(): void
+ public function testCanBeStartedAndStopped(): void
{
- $this->assertStringMatchesFormat('Time: %s, Memory: %f %s', Timer::resourceUsage());
- }
+ $this->timer->start();
- /**
- * @dataProvider secondsProvider
- */
- public function testCanFormatSecondsAsString(string $string, float $seconds): void
- {
- $this->assertEquals($string, Timer::secondsToTimeString($seconds));
+ /* @noinspection UnnecessaryAssertionInspection */
+ $this->assertInstanceOf(Duration::class, $this->timer->stop());
}
- public function secondsProvider(): array
+ public function testCannotBeStoppedWhenItWasNotStarted(): void
{
- return [
- ['0 ms', 0],
- ['1 ms', .001],
- ['10 ms', .01],
- ['100 ms', .1],
- ['999 ms', .999],
- ['1 second', .9999],
- ['1 second', 1],
- ['2 seconds', 2],
- ['59.9 seconds', 59.9],
- ['59.99 seconds', 59.99],
- ['59.99 seconds', 59.999],
- ['1 minute', 59.9999],
- ['59 seconds', 59.001],
- ['59.01 seconds', 59.01],
- ['1 minute', 60],
- ['1.01 minutes', 61],
- ['2 minutes', 120],
- ['2.01 minutes', 121],
- ['59.99 minutes', 3599.9],
- ['59.99 minutes', 3599.99],
- ['59.99 minutes', 3599.999],
- ['1 hour', 3599.9999],
- ['59.98 minutes', 3599.001],
- ['59.98 minutes', 3599.01],
- ['1 hour', 3600],
- ['1 hour', 3601],
- ['1 hour', 3601.9],
- ['1 hour', 3601.99],
- ['1 hour', 3601.999],
- ['1 hour', 3601.9999],
- ['1.01 hours', 3659.9999],
- ['1.01 hours', 3659.001],
- ['1.01 hours', 3659.01],
- ['2 hours', 7199.9999],
- ];
- }
+ $this->expectException(NoActiveTimerException::class);
- /**
- * @dataProvider bytesProvider
- */
- public function testCanFormatBytesAsString(string $string, float $bytes): void
- {
- $this->assertEquals($string, Timer::bytesToString($bytes));
- }
-
- public function bytesProvider(): array
- {
- return [
- ['0 bytes', 0],
- ['1 byte', 1],
- ['1023 bytes', 1023],
- ['1.00 KB', 1024],
- ['1.50 KB', 1.5 * 1024],
- ['2.00 MB', 2 * 1048576],
- ['2.50 MB', 2.5 * 1048576],
- ['3.00 GB', 3 * 1073741824],
- ['3.50 GB', 3.5 * 1073741824],
- ];
+ $this->timer->stop();
}
}
diff -Nru php-timer-2.1.2/.travis.yml php-timer-5.0.3/.travis.yml
--- php-timer-2.1.2/.travis.yml 2019-06-07 04:22:29.000000000 +0000
+++ php-timer-5.0.3/.travis.yml 1970-01-01 00:00:00.000000000 +0000
@@ -1,23 +0,0 @@
-language: php
-
-php:
- - 7.1
- - 7.2
- - 7.3
- - 7.4snapshot
-
-before_install:
- - composer self-update
- - composer clear-cache
-
-install:
- - travis_retry composer update --no-interaction --no-ansi --no-progress --no-suggest
-
-script:
- - ./vendor/bin/phpunit --coverage-clover=coverage.xml
-
-after_success:
- - bash <(curl -s https://codecov.io/bash)
-
-notifications:
- email: false