This commit is contained in:
aschwarz
2023-05-12 12:27:19 +02:00
parent 757c2388de
commit e2f1846f03
1974 changed files with 255998 additions and 0 deletions

View File

@ -0,0 +1 @@
*.php diff=php

View File

@ -0,0 +1,4 @@
/.idea
/vendor
/composer.lock

View File

@ -0,0 +1,27 @@
language: php
php:
- 5.3
- 5.4
- 5.5
- 5.6
- 7.0
- 7.0snapshot
- 7.1
- 7.1snapshot
- master
sudo: false
before_install:
- composer self-update
- composer clear-cache
install:
- travis_retry composer update --no-interaction --no-ansi --no-progress --no-suggest --optimize-autoloader --prefer-stable
script:
- ./vendor/bin/phpunit
notifications:
email: false

View File

@ -0,0 +1,33 @@
PHP_Timer
Copyright (c) 2010-2015, Sebastian Bergmann <sebastian@phpunit.de>.
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.

View File

@ -0,0 +1,45 @@
[![Build Status](https://travis-ci.org/sebastianbergmann/php-timer.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-timer)
# 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
PHP_Timer::start();
// ...
$time = PHP_Timer::stop();
var_dump($time);
print PHP_Timer::secondsToTimeString($time);
```
The code above yields the output below:
double(1.0967254638672E-5)
0 ms
### Resource Consumption Since PHP Startup
```php
print PHP_Timer::resourceUsage();
```
The code above yields the output below:
Time: 0 ms, Memory: 0.50MB

View File

@ -0,0 +1,37 @@
{
"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": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues"
},
"require": {
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"autoload": {
"classmap": [
"src/"
]
},
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
}
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/6.0/phpunit.xsd"
bootstrap="vendor/autoload.php"
forceCoversAnnotation="true"
beStrictAboutCoversAnnotation="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTodoAnnotatedTests="true"
verbose="true">
<testsuite>
<directory suffix="Test.php">tests</directory>
</testsuite>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>
</phpunit>

View File

@ -0,0 +1,105 @@
<?php
/*
* This file is part of the PHP_Timer package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Utility class for timing.
*/
class PHP_Timer
{
/**
* @var array
*/
private static $times = array(
'hour' => 3600000,
'minute' => 60000,
'second' => 1000
);
/**
* @var array
*/
private static $startTimes = array();
/**
* @var float
*/
public static $requestTime;
/**
* Starts the timer.
*/
public static function start()
{
array_push(self::$startTimes, microtime(true));
}
/**
* Stops the timer and returns the elapsed time.
*
* @return float
*/
public static function stop()
{
return microtime(true) - array_pop(self::$startTimes);
}
/**
* Formats the elapsed time as a string.
*
* @param float $time
* @return string
*/
public static function secondsToTimeString($time)
{
$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';
}
/**
* Formats the elapsed time since the start of the request as a string.
*
* @return string
*/
public static function timeSinceStartOfRequest()
{
return self::secondsToTimeString(microtime(true) - self::$requestTime);
}
/**
* Returns the resources (time, memory) of the request as a string.
*
* @return string
*/
public static function resourceUsage()
{
return sprintf(
'Time: %s, Memory: %4.2fMB',
self::timeSinceStartOfRequest(),
memory_get_peak_usage(true) / 1048576
);
}
}
if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {
PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME_FLOAT'];
} elseif (isset($_SERVER['REQUEST_TIME'])) {
PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME'];
} else {
PHP_Timer::$requestTime = microtime(true);
}

View File

@ -0,0 +1,98 @@
<?php
/*
* This file is part of the PHP_Timer package.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use PHPUnit\Framework\TestCase;
class PHP_TimerTest extends TestCase
{
/**
* @covers PHP_Timer::start
* @covers PHP_Timer::stop
*/
public function testStartStop()
{
$this->assertInternalType('float', PHP_Timer::stop());
}
/**
* @covers PHP_Timer::secondsToTimeString
* @dataProvider secondsProvider
*/
public function testSecondsToTimeString($string, $seconds)
{
$this->assertEquals(
$string,
PHP_Timer::secondsToTimeString($seconds)
);
}
/**
* @covers PHP_Timer::timeSinceStartOfRequest
*/
public function testTimeSinceStartOfRequest()
{
$this->assertStringMatchesFormat(
'%f %s',
PHP_Timer::timeSinceStartOfRequest()
);
}
/**
* @covers PHP_Timer::resourceUsage
*/
public function testResourceUsage()
{
$this->assertStringMatchesFormat(
'Time: %s, Memory: %fMB',
PHP_Timer::resourceUsage()
);
}
public function secondsProvider()
{
return array(
array('0 ms', 0),
array('1 ms', .001),
array('10 ms', .01),
array('100 ms', .1),
array('999 ms', .999),
array('1 second', .9999),
array('1 second', 1),
array('2 seconds', 2),
array('59.9 seconds', 59.9),
array('59.99 seconds', 59.99),
array('59.99 seconds', 59.999),
array('1 minute', 59.9999),
array('59 seconds', 59.001),
array('59.01 seconds', 59.01),
array('1 minute', 60),
array('1.01 minutes', 61),
array('2 minutes', 120),
array('2.01 minutes', 121),
array('59.99 minutes', 3599.9),
array('59.99 minutes', 3599.99),
array('59.99 minutes', 3599.999),
array('1 hour', 3599.9999),
array('59.98 minutes', 3599.001),
array('59.98 minutes', 3599.01),
array('1 hour', 3600),
array('1 hour', 3601),
array('1 hour', 3601.9),
array('1 hour', 3601.99),
array('1 hour', 3601.999),
array('1 hour', 3601.9999),
array('1.01 hours', 3659.9999),
array('1.01 hours', 3659.001),
array('1.01 hours', 3659.01),
array('2 hours', 7199.9999),
);
}
}