PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.2
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 2 months ago ArrayableTrait.php 7 months ago BatchSizeCalculateTrait.php 7 months ago BearerTokenTrait.php 4 months ago BenchmarkTrait.php 2 years ago BooleanTransientTrait.php 5 years ago DatabaseSearchReplaceTrait.php 2 weeks ago DbRowsGeneratorTrait.php 3 years ago DebugLogTrait.php 1 year ago DeveloperTimerTrait.php 8 months ago EndOfLinePlaceholderTrait.php 1 year ago EventLoggerTrait.php 1 month ago FileScanToCacheTrait.php 10 months ago FormatTrait.php 11 months ago HttpRequestTrait.php 8 months ago HydrateTrait.php 1 year ago I18nTrait.php 1 year ago IpResolverTrait.php 10 months ago MaintenanceTrait.php 5 months ago MemoryExhaustTrait.php 2 years ago MySQLRowsGeneratorTrait.php 7 months ago NoticesTrait.php 1 day ago PropertyConstructor.php 5 years ago RenameTmpDirectoryTrait.php 5 months ago ResourceTrait.php 4 months ago RestRequestTrait.php 3 months ago RestoreFileExclusionTrait.php 1 year ago SerializeTrait.php 1 year ago SetTimeLimitTrait.php 1 month ago SlashTrait.php 1 year ago SqlCommentTrait.php 3 months ago TablePrefixValidator.php 3 months ago UrlTrait.php 1 year ago ValueGetterTrait.php 1 year 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