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