1 parent
bbc7ff1ada
commit
bd42c7b6a1
3 files changed
+72
No files matched your search
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
### Added
|
||||
- plotting of early SQL queries (WP 5.1+)
|
||||
- tracking load of individual plugin load (WP 5.1+)
|
||||
|
||||
### Changed
|
||||
- unit tests for PHPUnit 8
|
||||
|
||||
@@ -10,6 +10,7 @@ use Rarst\Laps\Record\Collector\Core_Load_Collector;
|
||||
use Rarst\Laps\Record\Collector\Hook_Collector;
|
||||
use Rarst\Laps\Record\Collector\Http_Collector;
|
||||
use Rarst\Laps\Record\Collector\Lazy_Proxy_Collector;
|
||||
use Rarst\Laps\Record\Collector\Plugin_Load_Collector;
|
||||
use Rarst\Laps\Record\Collector\Sql_Collector;
|
||||
use Symfony\Component\Stopwatch\Stopwatch;
|
||||
|
||||
@@ -31,6 +32,7 @@ class Record_Provider implements ServiceProviderInterface, Bootable_Provider_Int
|
||||
return [
|
||||
'core' => new Core_Load_Collector(),
|
||||
'hook' => new Hook_Collector( $laps['stopwatch'], $laps['hook.events'] ),
|
||||
'plugins' => new Plugin_Load_Collector(),
|
||||
'http' => new Http_Collector( $laps['stopwatch'] ),
|
||||
'sql' => new Sql_Collector(),
|
||||
];
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
declare( strict_types=1 );
|
||||
|
||||
namespace Rarst\Laps\Record\Collector;
|
||||
|
||||
use Rarst\Laps\Record\Record;
|
||||
use Rarst\Laps\Record\Record_Interface;
|
||||
|
||||
/**
|
||||
* Tracks load time of individual plugins.
|
||||
*/
|
||||
class Plugin_Load_Collector implements Record_Collector_Interface {
|
||||
|
||||
/** @var float */
|
||||
private $last;
|
||||
|
||||
/** @var array */
|
||||
private $entries = [];
|
||||
|
||||
/**
|
||||
* Sets up start time and tracking callbacks.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->last = microtime( true );
|
||||
|
||||
add_action( 'network_plugin_loaded', [ $this, 'plugin_loaded' ] );
|
||||
add_action( 'plugin_loaded', [ $this, 'plugin_loaded' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Records time for a plugin that just finished loading.
|
||||
*
|
||||
* @param string $plugin Plugin file path.
|
||||
*/
|
||||
public function plugin_loaded( string $plugin ): void {
|
||||
|
||||
$time = microtime( true );
|
||||
$this->entries[] = [
|
||||
'name' => $plugin,
|
||||
'origin' => $this->last,
|
||||
'duration' => $time - $this->last,
|
||||
];
|
||||
$this->last = $time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Record_Interface[]
|
||||
*/
|
||||
public function get_records(): array {
|
||||
return array_map( [ $this, 'create_record' ], $this->entries );
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts recorded information into a Record instance.
|
||||
*
|
||||
* @param array $entry Data entry for the plugin.
|
||||
*
|
||||
* @return Record_Interface
|
||||
*/
|
||||
private function create_record( array $entry ): Record_Interface {
|
||||
return new Record(
|
||||
plugin_basename( $entry['name'] ),
|
||||
$entry['origin'],
|
||||
$entry['duration'],
|
||||
'',
|
||||
'plugin'
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user