pax_global_header00006660000000000000000000000064134763632050014523gustar00rootroot0000000000000052 comment=1038454804406b0b5f5f520358e78c1c2f71501e php-timer-2.1.2/000077500000000000000000000000001347636320500134325ustar00rootroot00000000000000php-timer-2.1.2/.gitattributes000066400000000000000000000000171347636320500163230ustar00rootroot00000000000000*.php diff=php php-timer-2.1.2/.github/000077500000000000000000000000001347636320500147725ustar00rootroot00000000000000php-timer-2.1.2/.github/FUNDING.yml000066400000000000000000000000241347636320500166030ustar00rootroot00000000000000patreon: s_bergmann php-timer-2.1.2/.github/stale.yml000066400000000000000000000026771347636320500166410ustar00rootroot00000000000000# 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 php-timer-2.1.2/.gitignore000066400000000000000000000000561347636320500154230ustar00rootroot00000000000000/.idea /.php_cs.cache /vendor /composer.lock php-timer-2.1.2/.php_cs.dist000066400000000000000000000174711347636320500156630ustar00rootroot00000000000000 For the full copyright and license information, please view the LICENSE file that was distributed with this source code. EOF; return PhpCsFixer\Config::create() ->setRiskyAllowed(true) ->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', ], ], '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', ], ], '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', ], ], 'void_return' => true, 'whitespace_after_comma_in_array' => true, ] ) ->setFinder( PhpCsFixer\Finder::create() ->files() ->in(__DIR__ . '/src') ->in(__DIR__ . '/tests') ); php-timer-2.1.2/.travis.yml000066400000000000000000000005741347636320500155510ustar00rootroot00000000000000language: 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 php-timer-2.1.2/ChangeLog.md000066400000000000000000000017341347636320500156100ustar00rootroot00000000000000# ChangeLog All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. ## [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 ## [2.1.1] - 2019-02-20 ### Changed * Improved formatting of memory consumption for `resourceUsage()` ## [2.1.0] - 2019-02-20 ### Changed * Improved formatting of memory consumption for `resourceUsage()` ## [2.0.0] - 2018-02-01 ### Changed * This component now uses namespaces ### Removed * 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 php-timer-2.1.2/LICENSE000066400000000000000000000030201347636320500144320ustar00rootroot00000000000000phpunit/php-timer Copyright (c) 2010-2019, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Sebastian Bergmann nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. php-timer-2.1.2/README.md000066400000000000000000000020761347636320500147160ustar00rootroot00000000000000[![Build Status](https://travis-ci.org/sebastianbergmann/php-timer.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-timer) # phpunit/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 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 ## Usage ### Basic Timing ```php use SebastianBergmann\Timer\Timer; Timer::start(); // ... $time = Timer::stop(); var_dump($time); print Timer::secondsToTimeString($time); ``` The code above yields the output below: double(1.0967254638672E-5) 0 ms ### Resource Consumption Since PHP Startup ```php use SebastianBergmann\Timer\Timer; print Timer::resourceUsage(); ``` The code above yields the output below: Time: 0 ms, Memory: 0.50MB php-timer-2.1.2/build.xml000066400000000000000000000012671347636320500152610ustar00rootroot00000000000000 php-timer-2.1.2/composer.json000066400000000000000000000016011347636320500161520ustar00rootroot00000000000000{ "name": "phpunit/php-timer", "description": "Utility class for timing", "type": "library", "keywords": [ "timer" ], "homepage": "https://github.com/sebastianbergmann/php-timer/", "license": "BSD-3-Clause", "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues" }, "prefer-stable": true, "require": { "php": "^7.1" }, "require-dev": { "phpunit/phpunit": "^7.0" }, "config": { "optimize-autoloader": true, "sort-packages": true }, "autoload": { "classmap": [ "src/" ] }, "extra": { "branch-alias": { "dev-master": "2.1-dev" } } } php-timer-2.1.2/phpunit.xml000066400000000000000000000013041347636320500156410ustar00rootroot00000000000000 tests src php-timer-2.1.2/src/000077500000000000000000000000001347636320500142215ustar00rootroot00000000000000php-timer-2.1.2/src/Exception.php000066400000000000000000000005031347636320500166660ustar00rootroot00000000000000 * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Timer; interface Exception { } php-timer-2.1.2/src/RuntimeException.php000066400000000000000000000005731347636320500202410ustar00rootroot00000000000000 * * 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 { } php-timer-2.1.2/src/Timer.php000066400000000000000000000046771347636320500160300ustar00rootroot00000000000000 * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace SebastianBergmann\Timer; 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[] */ private static $startTimes = []; public static 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'; } /** * @throws RuntimeException */ public static function timeSinceStartOfRequest(): string { 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'); } 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)) ); } } php-timer-2.1.2/tests/000077500000000000000000000000001347636320500145745ustar00rootroot00000000000000php-timer-2.1.2/tests/TimerTest.php000066400000000000000000000073141347636320500172320ustar00rootroot00000000000000 * * 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\Timer */ 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 */ public function testCanFormatSinceStartOfRequestWhenRequestTimeIsNotAvailableAsFloat(): void { if (isset($_SERVER['REQUEST_TIME_FLOAT'])) { unset($_SERVER['REQUEST_TIME_FLOAT']); } $this->assertStringMatchesFormat('%f %s', Timer::timeSinceStartOfRequest()); } /** * @backupGlobals enabled */ public function testCannotFormatTimeSinceStartOfRequestWhenRequestTimeIsNotAvailable(): 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(); } public function testCanFormatResourceUsage(): void { $this->assertStringMatchesFormat('Time: %s, Memory: %f %s', Timer::resourceUsage()); } /** * @dataProvider secondsProvider */ public function testCanFormatSecondsAsString(string $string, float $seconds): void { $this->assertEquals($string, Timer::secondsToTimeString($seconds)); } public function secondsProvider(): array { 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], ]; } /** * @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], ]; } }