PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 3.3.1
WP STAGING – WordPress Backup, Restore, Migration & Clone v3.3.1
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
ArrayableTrait.php 5 years ago BenchmarkTrait.php 2 years ago BooleanTransientTrait.php 5 years ago DatabaseSearchReplaceTrait.php 2 years ago DbRowsGeneratorTrait.php 3 years ago DeveloperTimerTrait.php 4 years ago FileScanToCacheTrait.php 2 years ago HydrateTrait.php 2 years ago MaintenanceTrait.php 5 years ago MemoryExhaustTrait.php 2 years ago MySQLRowsGeneratorTrait.php 2 years ago NoticesTrait.php 2 years ago PropertyConstructor.php 5 years ago ResourceTrait.php 2 years 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