mirror of
https://hk.gh-proxy.com/https://github.com/wp-cli/profile-command.git
synced 2025-08-18 06:11:48 +08:00
Abstract, to avoid direct manipulation of the global
This commit is contained in:
parent
8969a5a859
commit
d15f6ac6c9
1 changed files with 53 additions and 36 deletions
|
@ -77,7 +77,6 @@ class Profiler {
|
||||||
* Profiling verbosity at the beginning of every action and filter
|
* Profiling verbosity at the beginning of every action and filter
|
||||||
*/
|
*/
|
||||||
public function wp_hook_begin() {
|
public function wp_hook_begin() {
|
||||||
global $wpdb, $wp_filter;
|
|
||||||
|
|
||||||
foreach( Logger::$active_loggers as $logger ) {
|
foreach( Logger::$active_loggers as $logger ) {
|
||||||
$logger->start_hook_timer();
|
$logger->start_hook_timer();
|
||||||
|
@ -90,17 +89,10 @@ class Profiler {
|
||||||
$this->loggers[ $pseudo_hook ]->stop();
|
$this->loggers[ $pseudo_hook ]->stop();
|
||||||
}
|
}
|
||||||
$callback_count = 0;
|
$callback_count = 0;
|
||||||
if ( isset( $wp_filter[ $current_filter ] ) && is_a( $wp_filter[ $current_filter ], 'WP_Hook' ) ) {
|
$callbacks = self::get_filter_callbacks( $current_filter );
|
||||||
if ( is_array( $wp_filter[ $current_filter ]->callbacks ) ) {
|
if ( false !== $callbacks ) {
|
||||||
foreach( $wp_filter[ $current_filter ]->callbacks as $priority => $callbacks ) {
|
foreach( $callbacks as $priority => $cbs ) {
|
||||||
$callback_count += count( $callbacks );
|
$callback_count += count( $cbs );
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ( isset( $wp_filter[ $current_filter ] ) && is_array( $wp_filter[ $current_filter ] ) ) {
|
|
||||||
foreach( $wp_filter[ $current_filter ] as $priority => $callbacks ) {
|
|
||||||
$callback_count += count( $callbacks );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->loggers[ $current_filter ] = new Logger( array( 'hook' => $current_filter, 'callback_count' => $callback_count ) );
|
$this->loggers[ $current_filter ] = new Logger( array( 'hook' => $current_filter, 'callback_count' => $callback_count ) );
|
||||||
|
@ -108,11 +100,7 @@ class Profiler {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! is_null( $this->previous_filter_callbacks ) && 0 === $this->filter_depth ) {
|
if ( ! is_null( $this->previous_filter_callbacks ) && 0 === $this->filter_depth ) {
|
||||||
if ( is_a( $wp_filter[ $this->previous_filter ], 'WP_Hook' ) ) {
|
self::set_filter_callbacks( $this->previous_filter, $this->previous_filter_callbacks );
|
||||||
$wp_filter[ $this->previous_filter ]->callbacks = $this->previous_filter_callbacks;
|
|
||||||
} else {
|
|
||||||
$wp_filter[ $this->previous_filter ] = $this->previous_filter_callbacks;
|
|
||||||
}
|
|
||||||
$this->previous_filter_callbacks = null;
|
$this->previous_filter_callbacks = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,22 +118,13 @@ class Profiler {
|
||||||
* Wrap current filter callbacks with a timer
|
* Wrap current filter callbacks with a timer
|
||||||
*/
|
*/
|
||||||
private function wrap_current_filter_callbacks( $current_filter ) {
|
private function wrap_current_filter_callbacks( $current_filter ) {
|
||||||
global $wp_filter;
|
|
||||||
|
|
||||||
if ( ! isset( $wp_filter[ $current_filter ] ) ) {
|
$callbacks = self::get_filter_callbacks( $current_filter );
|
||||||
|
if ( false === $callbacks ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->previous_filter = $current_filter;
|
$this->previous_filter = $current_filter;
|
||||||
if ( is_a( $wp_filter[ $current_filter ], 'WP_Hook' ) ) {
|
$this->previous_filter_callbacks = $callbacks;
|
||||||
$callbacks = $this->previous_filter_callbacks = $wp_filter[ $current_filter ]->callbacks;
|
|
||||||
} else {
|
|
||||||
$callbacks = $this->previous_filter_callbacks = $wp_filter[ $current_filter ];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! is_array( $callbacks ) ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach( $callbacks as $priority => $priority_callbacks ) {
|
foreach( $callbacks as $priority => $priority_callbacks ) {
|
||||||
foreach( $priority_callbacks as $i => $the_ ) {
|
foreach( $priority_callbacks as $i => $the_ ) {
|
||||||
|
@ -168,19 +147,13 @@ class Profiler {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self::set_filter_callbacks( $current_filter, $callbacks );
|
||||||
if ( is_a( $wp_filter[ $current_filter ], 'WP_Hook' ) ) {
|
|
||||||
$wp_filter[ $current_filter ]->callbacks = $callbacks;
|
|
||||||
} else {
|
|
||||||
$wp_filter[ $current_filter ] = $callbacks;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Profiling verbosity at the end of every action and filter
|
* Profiling verbosity at the end of every action and filter
|
||||||
*/
|
*/
|
||||||
public function wp_hook_end( $filter_value = null ) {
|
public function wp_hook_end( $filter_value = null ) {
|
||||||
global $wpdb, $wp_filter;
|
|
||||||
|
|
||||||
foreach( Logger::$active_loggers as $logger ) {
|
foreach( Logger::$active_loggers as $logger ) {
|
||||||
$logger->stop_hook_timer();
|
$logger->stop_hook_timer();
|
||||||
|
@ -350,5 +323,49 @@ class Profiler {
|
||||||
$this->loggers[ $pseudo_hook ] = new Logger( array( 'hook' => '' ) );
|
$this->loggers[ $pseudo_hook ] = new Logger( array( 'hook' => '' ) );
|
||||||
$this->loggers[ $pseudo_hook ]->start();
|
$this->loggers[ $pseudo_hook ]->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the callbacks for a given filter
|
||||||
|
*
|
||||||
|
* @param string
|
||||||
|
* @return array|false
|
||||||
|
*/
|
||||||
|
private static function get_filter_callbacks( $filter ) {
|
||||||
|
global $wp_filter;
|
||||||
|
|
||||||
|
if ( ! isset( $wp_filter[ $filter ] ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( is_a( $wp_filter[ $filter ], 'WP_Hook' ) ) {
|
||||||
|
$callbacks = $wp_filter[ $filter ]->callbacks;
|
||||||
|
} else {
|
||||||
|
$callbacks = $wp_filter[ $filter ];
|
||||||
|
}
|
||||||
|
if ( is_array( $callbacks ) ) {
|
||||||
|
return $callbacks;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the callbacks for a given filter
|
||||||
|
*
|
||||||
|
* @param string $filter
|
||||||
|
* @param mixed $callbacks
|
||||||
|
*/
|
||||||
|
private static function set_filter_callbacks( $filter, $callbacks ) {
|
||||||
|
global $wp_filter;
|
||||||
|
|
||||||
|
if ( ! isset( $wp_filter[ $filter ] ) && class_exists( 'WP_Hook' ) ) {
|
||||||
|
$wp_filter[ $filter ] = new \WP_Hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( is_a( $wp_filter[ $filter ], 'WP_Hook' ) ) {
|
||||||
|
$wp_filter[ $filter ]->callbacks = $callbacks;
|
||||||
|
} else {
|
||||||
|
$wp_filter[ $filter ] = $callbacks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue