update_cache( $processes );
}
private static function get_processes() {
$mywp_cache = new MywpCache( 'mywp_times' );
$procecces = $mywp_cache->get_cache();
if( empty( $procecces ) ) {
$procecces = array();
}
return $procecces;
}
private static function get_process( $filter_name = false ) {
if( empty( $filter_name ) ) {
return false;
}
$processes = self::get_processes();
if( empty( $processes[ $filter_name ] ) ) {
return false;
}
return $processes[ $filter_name ];
}
public static function process_set_1() {
self::set_process( -1 );
}
public static function process_set_10() {
self::set_process( 10 );
}
public static function process_set_100() {
self::set_process( 100 );
}
public static function process_set_10000() {
self::set_process( 10000 );
}
public static function mywp_debug_renders( $debug_renders ) {
$debug_renders[ self::$id ] = array(
'debug_type' => 'dev',
'title' => __( 'Action Times' , 'my-wp' ),
);
return $debug_renders;
}
protected static function mywp_developer_debug() {
if( ! MywpDeveloper::is_debug_item( 'debug_time' ) ) {
echo esc_html( __( 'Not activated.' , 'my-wp' ) );
return false;
}
$processes = self::get_processes();
if( empty( $processes ) ) {
return false;
}
$first_process = self::get_first_process();
if( empty( $first_process ) ) {
return false;
}
echo esc_html( sprintf( '%s = ' , __( 'All' ) ) );
echo esc_html( self::print_format( $first_process ) );
echo esc_html( sprintf( 'Memory peak: %s' , MywpHelper::get_byte( memory_get_peak_usage() ) ) );
$before_screen_process = self::get_before_screen_process();
if( empty( $before_screen_process ) ) {
return false;
}
echo esc_html( sprintf( '%s = ' , __( 'Before Screen' , 'my-wp' ) ) );
echo esc_html( self::print_format( $before_screen_process ) );
$screen_process = self::get_screen_process();
if( empty( $screen_process ) ) {
return false;
}
echo esc_html( sprintf( '%s = ' , __( 'Screen' , 'my-wp' ) ) );
echo esc_html( self::print_format( $screen_process ) );
foreach( $processes as $action_hook_name => $priority_processes ) {
echo esc_html( $action_hook_name ) . "\n";
$last_priority_process = end( $priority_processes );
$first_priority_process = reset( $priority_processes );
$total_screen_process = self::format_process( $first_priority_process , $last_priority_process );
echo esc_html( sprintf( '%s = ' , __( 'Total' , 'my-wp' ) ) );
echo esc_html( self::print_format( $total_screen_process ) );
$priority_processes_count = count( $priority_processes );
$priority_processes_keys = array_keys( $priority_processes );
for( $i = 0; $i < ( $priority_processes_count -1 ); ++$i ) {
$current_priority = $priority_processes_keys[ $i ];
$next_priority = $priority_processes_keys[ ( $i + 1 ) ];
$current_process = $priority_processes[ $current_priority ];
$next_process = $priority_processes[ $next_priority ];
$diff_process = self::format_process( $current_process , $next_process );
echo esc_html( sprintf( '[%s] - [%s] = ' , $current_priority , $next_priority ) );
echo esc_html( self::print_format( $diff_process ) );
echo self::print_filters( $action_hook_name , $current_priority , $next_priority );
}
}
}
protected static function mywp_debug_render() {
if( ! MywpDeveloper::is_debug_item( 'debug_time' ) ) {
echo esc_html( __( 'Not activated.' , 'my-wp' ) );
return false;
}
$processes = self::get_processes();
if( empty( $processes ) ) {
return false;
}
echo '
';
$first_process = self::get_first_process();
if( empty( $first_process ) ) {
return false;
}
echo '';
printf( '| %s | ' , __( 'All' ) );
printf( '%s' , esc_html( self::print_format( $first_process ) ) );
echo esc_html( sprintf( ' - Memory peak: %s | ' , MywpHelper::get_byte( memory_get_peak_usage() ) ) );
echo '
';
echo '
';
echo '';
$before_screen_process = self::get_before_screen_process();
if( empty( $before_screen_process ) ) {
return false;
}
echo '';
printf( '| %s | ' , __( 'Before Screen' , 'my-wp' ) );
printf( '%s | ' , esc_html( self::print_format( $before_screen_process ) ) );
echo '
';
$screen_process = self::get_screen_process();
if( empty( $screen_process ) ) {
return false;
}
echo '';
printf( '| %s | ' , __( 'Screen' , 'my-wp' ) );
printf( '%s | ' , esc_html( self::print_format( $screen_process ) ) );
echo '
';
echo '
';
foreach( $processes as $action_hook_name => $priority_processes ) {
printf( '%s
' , esc_html( $action_hook_name ) );
echo '';
$last_priority_process = end( $priority_processes );
$first_priority_process = reset( $priority_processes );
$total_screen_process = self::format_process( $first_priority_process , $last_priority_process );
echo '';
printf( '| %s | ' , __( 'Total' , 'my-wp' ) );
printf( '%s | ' , esc_html( self::print_format( $total_screen_process ) ) );
echo '
';
$priority_processes_count = count( $priority_processes );
$priority_processes_keys = array_keys( $priority_processes );
for( $i = 0; $i < ( $priority_processes_count -1 ); ++$i ) {
$current_priority = $priority_processes_keys[ $i ];
$next_priority = $priority_processes_keys[ ( $i + 1 ) ];
$current_process = $priority_processes[ $current_priority ];
$next_process = $priority_processes[ $next_priority ];
$diff_process = self::format_process( $current_process , $next_process );
echo '';
printf( '| %s | ' , esc_html( sprintf( '[%s] - [%s]' , $current_priority , $next_priority ) ) );
printf( '%s' , esc_html( self::print_format( $diff_process ) ) );
echo self::print_filters( $action_hook_name , $current_priority , $next_priority , true );
echo ' | ';
echo '
';
}
echo '
';
}
//printf( '%s
' , print_r( $processes , true ) );
}
private static function get_first_process() {
$processes = self::get_processes();
if( empty( $processes ) ) {
return false;
}
$init_process = self::$init_process;
$last_process_priorities = end( $processes );
$last_process = end( $last_process_priorities );
return self::format_process( $init_process , $last_process );
}
private static function get_before_screen_process() {
$processes = self::get_processes();
if( empty( $processes ) ) {
return false;
}
$init_process = self::$init_process;
$before_screen_process = false;
if( ! empty( $processes['admin_head'][-1] ) ) {
$before_screen_process = $processes['admin_head'][-1];
} elseif( ! empty( $processes['wp_head'][-1] ) ) {
$before_screen_process = $processes['wp_head'][-1];
}
return self::format_process( $init_process , $before_screen_process );
}
private static function get_screen_process() {
$processes = self::get_processes();
if( empty( $processes ) ) {
return false;
}
$before_screen_process = false;
if( ! empty( $processes['admin_head'][-1] ) ) {
$before_screen_process = $processes['admin_head'][-1];
} elseif( ! empty( $processes['wp_head'][-1] ) ) {
$before_screen_process = $processes['wp_head'][-1];
}
$last_process_priorities = end( $processes );
$last_process = end( $last_process_priorities );
return self::format_process( $before_screen_process , $last_process );
}
private static function format_process( $start_process = false , $end_process = false ) {
if( empty( $start_process ) or empty( $end_process ) ) {
return false;
}
$format_process = array(
'start' => $start_process,
'end' => $end_process,
'second' => ( $end_process['microtime'] - $start_process['microtime'] ),
'memory' => ( $end_process['memory_get_usage'] - $start_process['memory_get_usage'] ),
'load_avg' => $start_process['load_avg'],
);
return $format_process;
}
private static function print_format( $process ) {
if( ! isset( $process['second'] ) or ! isset( $process['memory'] ) ) {
return false;
}
if( function_exists( 'sys_getloadavg' ) ) {
$print_format = sprintf( 'Time: %s - Memory: %s - LoadAvg: %s' , self::get_second( $process['second'] ) , MywpHelper::get_byte( $process['memory'] ) , strip_tags( $process['load_avg'] ) );
} else {
$print_format = sprintf( 'Time: %s - Memory: %s' , self::get_second( $process['second'] ) , MywpHelper::get_byte( $process['memory'] ) );
}
$print_format .= "\n";
return $print_format;
}
private static function print_filters( $action_hook_name , $from_priority , $to_priority , $is_list = false ) {
if( empty( $action_hook_name ) ) {
return false;
}
$filter_to_func = MywpDeveloper::get_filter_to_func( $action_hook_name );
if( empty( $filter_to_func ) ) {
return false;
}
$print_filters = false;
if( $is_list ) {
$print_filters = '';
} else {
$print_filters .= "\n";
}
return $print_filters;
}
private static function get_second( $second = false ) {
if( $second === false ) {
return false;
}
$decimals = 3;
$number = false;
if( function_exists( 'number_format_i18n' ) ) {
$number = number_format_i18n( $second , $decimals );
} else {
$number = number_format( $second , $decimals );
}
return "{$number} seconds";
}
}
MywpDeveloperModuleDevTimes::init();
endif;