PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.0.0
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.0.0
4.11.2 4.11.1 4.11.0 4.10.0 4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / Traits / DeveloperTimerTrait.php
wp-staging / Framework / Traits Last commit date
ApplyFiltersTrait.php 1 year ago ArrayableTrait.php 1 year ago BenchmarkTrait.php 3 years ago BooleanTransientTrait.php 5 years ago DatabaseSearchReplaceTrait.php 1 year ago DbRowsGeneratorTrait.php 4 years ago DebugLogTrait.php 1 year ago DeveloperTimerTrait.php 4 years ago EndOfLinePlaceholderTrait.php 1 year ago EventLoggerTrait.php 1 year ago FileScanToCacheTrait.php 2 years ago FormatTrait.php 1 year ago HttpRequestTrait.php 1 year ago HydrateTrait.php 1 year ago I18nTrait.php 1 year ago MaintenanceTrait.php 5 years ago MemoryExhaustTrait.php 2 years ago MySQLRowsGeneratorTrait.php 1 year ago NoticesTrait.php 1 year ago PropertyConstructor.php 5 years ago ResourceTrait.php 2 years ago RestoreFileExclusionTrait.php 1 year ago SerializeTrait.php 1 year ago SlashTrait.php 1 year ago UrlTrait.php 1 year ago ValueGetterTrait.php 2 years ago WindowsOsTrait.php 1 year ago
DeveloperTimerTrait.php
100 lines
1 <?php
2
3 /**
4 * Provides methods to fetch potentially unlimited rows from a database table
5 * with resource-usage awareness using raw MySQL(i) queries.
6 *
7 * @package WPStaging\Framework\Traits
8 */
9
10 namespace WPStaging\Framework\Traits;
11
12 /**
13 * Trait DeveloperTimerTrait
14 *
15 * This trait should be used ONLY FOR DEBUGGING DURING DEVELOPMENT.
16 *
17 * This is NOT a substitute to real Profiling, but it proved to be
18 * useful to gather data in a way that the developer would like to profile.
19 *
20 * No production code should call methods from this trait.
21 * Feel free to commit code that uses this while the PR is under progress,
22 * but it should be removed before the PR is approved.
23 *
24 * @todo Add a PHPCS rule that looks for these methods and fail CI.
25 *
26 * @package WPStaging\Framework\Traits
27 */
28 trait DeveloperTimerTrait
29 {
30 use ResourceTrait;
31
32 protected $debugTimingIteration = 0;
33
34 protected $eventsStart = [];
35
36 protected $timings = [];
37
38 protected $eventStart;
39
40 protected function startEventTimer($event)
41 {
42 if (!defined('WPSTG_DEBUG') || !WPSTG_DEBUG) {
43 return;
44 }
45
46 $this->eventsStart[$event] = microtime(true);
47 }
48
49 public function __destruct()
50 {
51 if (!defined('WPSTG_DEBUG') || !WPSTG_DEBUG) {
52 return;
53 }
54
55 \WPStaging\functions\debug_log(json_encode($this->timings, JSON_PRETTY_PRINT));
56 }
57
58 protected function finishEventTimer($event, $context = [])
59 {
60 if (!defined('WPSTG_DEBUG') || !WPSTG_DEBUG) {
61 return;
62 }
63
64 if (!array_key_exists($event, $this->eventsStart)) {
65 throw new \BadMethodCallException('You should initiate the event timer with startEventTimer("Name of the event")');
66 }
67
68 if (!array_key_exists($this->debugTimingIteration, $this->timings)) {
69 $this->timings[$this->debugTimingIteration] = [];
70 }
71
72 if (!array_key_exists($event, $this->timings[$this->debugTimingIteration])) {
73 $this->timings[$this->debugTimingIteration][$event] = [];
74 $this->timings[$this->debugTimingIteration][$event]['accumulatedTime'] = 0;
75 }
76
77 if (count($this->timings[$this->debugTimingIteration][$event]) > 100) {
78 return;
79 }
80
81 $this->timings[$this->debugTimingIteration][$event]['accumulatedTime'] += microtime(true) - $this->eventsStart[$event];
82
83 $this->timings[$this->debugTimingIteration][$event][] = [
84 'completedIn' => number_format(microtime(true) - $this->eventsStart[$event]) . ' seconds',
85 'memoryUsage' => size_format($this->getMemoryUsage()),
86 'runningTime' => $this->getRunningTime(),
87 'context' => $context,
88 ];
89 }
90
91 protected function incrementTimerIteration()
92 {
93 if (!defined('WPSTG_DEBUG') || !WPSTG_DEBUG) {
94 return;
95 }
96
97 $this->debugTimingIteration++;
98 }
99 }
100