feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory - Added PROJECT_OVERVIEW.md with feature highlights and getting started guide - Added ARCHITECTURE.md with system design and technical details - Added SECURITY.md with comprehensive security implementation guide - Added DEVELOPMENT.md with development workflows and best practices - Added DEPLOYMENT.md with production deployment instructions - Added API.md with complete REST API documentation - Added CONTRIBUTING.md with contribution guidelines - Added CHANGELOG.md with version history and migration notes - Reorganized all documentation files into docs/ directory for better organization - Updated README.md with proper documentation links and quick navigation - Enhanced project structure with professional documentation standards
This commit is contained in:
67
f_core/f_classes/class.benchmark.php
Normal file
67
f_core/f_classes/class.benchmark.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/*******************************************************************************************************************
|
||||
| Software Name : EasyStream
|
||||
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
|
||||
| Software Author : (c) Sami Ahmed
|
||||
|*******************************************************************************************************************
|
||||
|
|
||||
|*******************************************************************************************************************
|
||||
| This source file is subject to the EasyStream Proprietary License Agreement.
|
||||
|
|
||||
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|
||||
|*******************************************************************************************************************
|
||||
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|
||||
|*******************************************************************************************************************/
|
||||
|
||||
defined('_ISVALID') or header('Location: /error');
|
||||
|
||||
class VBenchmark
|
||||
{
|
||||
private static $timers = array();
|
||||
|
||||
public static function start($name)
|
||||
{
|
||||
if (!isset(self::$timers[$name]) || !is_array(self::$timers[$name])) {
|
||||
self::$timers[$name] = array(
|
||||
'start' => microtime(true),
|
||||
'stop' => false,
|
||||
'memory_start' => function_exists('memory_get_usage') ? memory_get_usage() : 0,
|
||||
'memory_stop' => false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public static function stop($name)
|
||||
{
|
||||
if (isset(self::$timers[$name]) && self::$timers[$name]['stop'] === false) {
|
||||
self::$timers[$name]['stop'] = microtime(true);
|
||||
self::$timers[$name]['memory_stop'] = function_exists('memory_get_usage') ? memory_get_usage() : 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static function get($name, $decimals = 4)
|
||||
{
|
||||
if (!isset(self::$timers[$name])) {
|
||||
return false;
|
||||
}
|
||||
if (self::$timers[$name]['stop'] === false) {
|
||||
self::stop($name);
|
||||
}
|
||||
return array(
|
||||
'time' => number_format(self::$timers[$name]['stop'] - self::$timers[$name]['start'], $decimals),
|
||||
'memory' => self::bytes(self::$timers[$name]['memory_stop'] - self::$timers[$name]['memory_start']),
|
||||
);
|
||||
}
|
||||
|
||||
public static function bytes($bytes)
|
||||
{
|
||||
$i = 0;
|
||||
$formats = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
|
||||
while ($bytes >= 1024) {
|
||||
$bytes = $bytes / 1024;
|
||||
++$i;
|
||||
}
|
||||
|
||||
return number_format($bytes, ($i ? 2 : 0), ',', '.') . ' ' . $formats[$i];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user