summaryrefslogtreecommitdiff
path: root/core/classes/Benchmark.php
diff options
context:
space:
mode:
authorGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-27 03:47:30 +0300
committerGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-27 03:47:30 +0300
commit059e0d95d0c28bc5060e87e146eaf7411f51bf90 (patch)
tree7c21ac432f16dde2329a0d5954d70711eceb48e6 /core/classes/Benchmark.php
parent26cd8ee99659ef1926c96a049c93645ffc9b169d (diff)
downloadgyraf1gov-059e0d95d0c28bc5060e87e146eaf7411f51bf90.tar.gz
gyraf1gov-059e0d95d0c28bc5060e87e146eaf7411f51bf90.tar.bz2
gyraf1gov-059e0d95d0c28bc5060e87e146eaf7411f51bf90.zip
skeleton commit; based on an anom project
Diffstat (limited to 'core/classes/Benchmark.php')
-rw-r--r--core/classes/Benchmark.php150
1 files changed, 150 insertions, 0 deletions
diff --git a/core/classes/Benchmark.php b/core/classes/Benchmark.php
new file mode 100644
index 0000000..a7e93ea
--- /dev/null
+++ b/core/classes/Benchmark.php
@@ -0,0 +1,150 @@
+<?php
+
+// define('BENCHMARKED', true); // then you know if class is active
+
+class Benchmark {
+
+ private static $timeSpots = Array();
+
+ private static $memoryUse = Array();
+
+ private static $enableReport = true;
+
+
+ /** add_timespot
+ * ---
+ * add new timespot
+ * @param $key : label of timespot
+ */
+ public static function add_spot(string $key)
+ {
+ self::$timeSpots[$key] = microtime(true);
+ self::$memoryUse[$key] = round(memory_get_usage()/(1024*1024),2);
+ }
+
+
+ /** exist
+ * checks if a benchmark spot with label $key exists
+ */
+ public static function exist(string $key) : bool
+ {
+ return isset(self::$timeSpots[$key]);
+ }
+
+
+ /** desableReport
+ * (Self-explanatory)
+ */
+ public static function disableReport()
+ {
+ self::$enableReport = false;
+ }
+
+
+ /** render_benchmark_report
+ * ---
+ * renders performance report
+ * as html comment at the end of webpage in various modes
+ * @param $mode (string)
+ * + 'comment' (default): include report as html comment
+ * + 'html' : include report as a html div
+ * + 'code' : include report as a pre/code block
+ */
+ public static function render_report(string $mode = 'comment' )
+ {
+ if (self::$enableReport) {
+
+ switch ($mode) {
+ case 'html':
+ $open = '<p>';
+ $close = '</b></p>';
+ $divider = ":<b>";
+ $prefix = '<div>';
+ $suffix = '</div>';
+ break;
+ case 'code':
+ $open = '';
+ $close = '';
+ $divider = ": ";
+ $prefix = '<pre>';
+ $suffix = '</pre>';
+ break;
+ case 'comment':
+ default:
+ $open = '<!--';
+ $close = '-->';
+ $divider = ":";
+ $prefix = '';
+ $suffix = '';
+ break;
+ }
+
+ echo $prefix;
+
+ // TIME REPORT
+ // ---------------------------------------------------------------------
+ echo "\n\n{$open} Timings {$close}";
+
+ // valid from php 7.3
+ // $start = self::$timeSpots[ array_key_first(self::$timespots) ];
+ // $end = self::$timeSpots[ array_key_last(self::$timespots) ];
+ $start = self::$timeSpots['start'];
+ $end = self::$timeSpots['end'];
+ $all_dt = number_format($end - $start , 4)*1000 ." ms";
+
+
+
+ // if more than 2 timespots
+ // echo dt between each spot
+ if (count(self::$timeSpots) > 2) {
+
+ // calculate dt between spots
+ $time_results = array();
+ $prev_key = '';
+ $prev_time = 0;
+ foreach(self::$timeSpots as $key => $t) {
+ if (!$prev_time) {
+ $prev_time = $t;
+ $prev_key = $key;
+ }
+ else {
+ $dt = number_format($t - $prev_time , 4)*1000 ." ms";
+ $time_results[] = array(
+ 'part' => "{$prev_key}[..{$key}]", ///$key,
+ 'dt' => $dt
+ );
+ $prev_key = $key; //// "{$prev_key}[..{$key}]";
+ $prev_time = $t;
+ }
+ }
+
+ // echo timings
+ foreach ($time_results as $key => $val) {
+ echo "\n\t{$open} {$val['part']} {$divider} {$val['dt']} {$close}";
+ }
+ }
+
+ // echo total time
+ echo "\n\t{$open} total {$divider} {$all_dt} {$close}";
+
+
+ // MEMORY REPORT
+ // ---------------------------------------------------------------------
+ echo "\n\n{$open} Memory Usage {$close}";
+
+ if (count(self::$memoryUse) > 2) {
+
+ foreach (self::$memoryUse as $key => $val) {
+ echo "\n\t{$open} {$key} {$divider} {$val}MB {$close}";
+ }
+
+ } else {
+ echo "\n\t{$open} memory usage {$divider} ". round(memory_get_usage()/(1024*1024),2) ."MB {$close}";
+ }
+
+ echo $suffix;
+
+ }
+
+ }
+}