PluginProbe ʕ •ᴥ•ʔ
WooCommerce Square / 5.4.3
WooCommerce Square v5.4.3
5.4.3 5.4.2 5.4.1 5.4.0 trunk 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.7.0 2.8.0 2.9.0 2.9.1 3.0.0 3.0.1 3.0.2 3.0.3 3.1.0 3.2.0 3.3.0 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.7.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 4.0.0 4.1.0 4.2.0 4.2.1 4.2.2 4.2.3 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.4.2 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.8.8 4.9.0 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.9.7 4.9.8 4.9.9 5.0.0 5.0.1 5.1.0 5.1.1 5.1.2 5.2.0 5.3.0 5.3.1 5.3.2 5.3.3
woocommerce-square / includes / Utilities / Performance_Logger.php
woocommerce-square / includes / Utilities Last commit date
Array_Utility.php 3 years ago Coupon_Utility.php 5 months ago Encryption_Utility.php 2 years ago Helper.php 4 months ago Money_Utility.php 3 years ago Order_Ajax_Authorization.php 2 months ago Performance_Logger.php 1 year ago String_Utility.php 9 months ago Token_Scope_Utility.php 5 months ago
Performance_Logger.php
116 lines
1 <?php
2 /**
3 * WooCommerce Square
4 *
5 * This source file is subject to the GNU General Public License v3.0
6 * that is bundled with this package in the file license.txt.
7 * It is also available through the world-wide-web at this URL:
8 * http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
9 * If you did not receive a copy of the license and are unable to
10 * obtain it through the world-wide-web, please send an email
11 * to license@woocommerce.com so we can send you a copy immediately.
12 *
13 * DISCLAIMER
14 *
15 * Do not edit or add to this file if you wish to upgrade WooCommerce Square to newer
16 * versions in the future. If you wish to customize WooCommerce Square for your
17 * needs please refer to https://docs.woocommerce.com/document/woocommerce-square/
18 *
19 * @author WooCommerce
20 * @copyright Copyright: (c) 2019, Automattic, Inc.
21 * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
22 */
23
24 namespace WooCommerce\Square\Utilities;
25
26 defined( 'ABSPATH' ) || exit;
27
28 /**
29 * Performance logging utility for timing operations and memory usage.
30 *
31 * @since 4.9.1
32 */
33 class Performance_Logger {
34
35 /** @var array Stores timer start times indexed by key */
36 private static $timers = array();
37
38 /**
39 * Starts a timer for performance tracking.
40 *
41 * @since 4.9.1
42 *
43 * @param string $key Unique identifier for this timer
44 * @param \WooCommerce\Square\Plugin $plugin Plugin instance to check debug status
45 */
46 public static function start( $key, $plugin ) {
47 if ( $plugin->get_settings_handler() && $plugin->get_settings_handler()->is_debug_enabled() ) {
48 self::$timers[ $key ] = array(
49 'time' => microtime( true ),
50 'memory' => memory_get_usage(),
51 );
52 }
53 }
54
55 /**
56 * Ends a timer and logs the performance data.
57 *
58 * @since 4.9.1
59 *
60 * @param string $key Unique identifier for this timer
61 * @param \WooCommerce\Square\Plugin $plugin Plugin instance for logging
62 * @param boolean $is_error Whether the operation failed
63 */
64 public static function end( $key, $plugin, $is_error = false ) {
65 if ( ! isset( self::$timers[ $key ] ) ) {
66 return;
67 }
68
69 $duration = microtime( true ) - self::$timers[ $key ]['time'];
70 $memory_bytes = memory_get_usage() - self::$timers[ $key ]['memory'];
71
72 // Format duration: Show milliseconds if < 1 second, otherwise show seconds
73 $time_format = $duration < 1
74 ? sprintf( '%.0fms', $duration * 1000 )
75 : sprintf( '%.3fs', $duration );
76
77 // Format memory: Show MB if > 1MB, otherwise KB
78 $memory_format = $memory_bytes > 1048576
79 ? sprintf( '%.2fMB', $memory_bytes / 1048576 )
80 : sprintf( '%.2fKB', $memory_bytes / 1024 );
81
82 $plugin->log(
83 sprintf(
84 '[Performance] %s %s in %s with %s of memory usage',
85 $key,
86 $is_error ? 'failed' : 'completed',
87 $time_format,
88 $memory_format
89 )
90 );
91
92 unset( self::$timers[ $key ] );
93 }
94
95 /**
96 * Gets the current timer value without logging (useful for testing).
97 *
98 * @since 4.9.1
99 *
100 * @param string $key Timer identifier
101 * @return float|null Timer value in seconds or null if timer not found
102 */
103 public static function get_timer( $key ) {
104 return isset( self::$timers[ $key ] ) ? self::$timers[ $key ] : null;
105 }
106
107 /**
108 * Resets all timers (useful for testing).
109 *
110 * @since 4.9.1
111 */
112 public static function reset() {
113 self::$timers = array();
114 }
115 }
116