2013-01-25 18:22:46 -05:00
< ? php
/**
* Name : rendertime
* Description : Shows the time that was needed to render the current page
* Version : 0.1
2018-04-01 05:43:49 -04:00
* Author : Michael Vogel < http :// pirati . ca / profile / heluecht >
2013-01-25 18:22:46 -05:00
*
*/
2019-02-20 11:28:32 -05:00
2022-06-23 01:16:22 -04:00
use Friendica\App ;
2018-12-26 02:28:16 -05:00
use Friendica\Core\Hook ;
2021-12-12 00:57:21 -05:00
use Friendica\Core\Renderer ;
2019-12-15 17:50:35 -05:00
use Friendica\DI ;
2017-11-06 18:55:24 -05:00
2013-01-25 18:22:46 -05:00
function rendertime_install () {
2018-12-26 02:28:16 -05:00
Hook :: register ( 'page_end' , 'addon/rendertime/rendertime.php' , 'rendertime_page_end' );
2021-12-12 00:57:21 -05:00
DI :: config () -> set ( 'system' , 'profiler' , true );
}
2022-06-23 01:16:22 -04:00
function rendertime_uninstall ()
{
2021-12-12 00:57:21 -05:00
DI :: config () -> delete ( 'system' , 'profiler' );
2013-01-25 18:22:46 -05:00
}
2022-06-23 01:16:22 -04:00
function rendertime_init_1 ( App $a )
{
2013-01-25 18:22:46 -05:00
}
2022-06-30 07:32:13 -04:00
function rendertime_addon_admin ( App $a , string & $o )
2022-06-23 01:16:22 -04:00
{
2022-07-27 21:53:47 -04:00
$t = Renderer :: getMarkupTemplate ( 'admin.tpl' , 'addon/rendertime/' );
2021-12-12 00:57:21 -05:00
$o = Renderer :: replaceMacros ( $t , [
'$submit' => DI :: l10n () -> t ( 'Save Settings' ),
2021-12-12 17:08:52 -05:00
'$callstack' => [ 'callstack' , DI :: l10n () -> t ( 'Show callstack' ), DI :: config () -> get ( 'rendertime' , 'callstack' ), DI :: l10n () -> t ( 'Show detailed performance measures in the callstack. When deactivated, only the summary will be displayed.' )],
'$minimal_time' => [ 'minimal_time' , DI :: l10n () -> t ( 'Minimal time' ), DI :: config () -> get ( 'rendertime' , 'minimal_time' ), DI :: l10n () -> t ( 'Minimal time that an activity needs to be listed in the callstack.' )],
2021-12-12 00:57:21 -05:00
]);
}
2022-06-23 01:16:22 -04:00
function rendertime_addon_admin_post ( App $a )
{
2021-12-12 00:57:21 -05:00
DI :: config () -> set ( 'rendertime' , 'callstack' , $_POST [ 'callstack' ] ? ? false );
DI :: config () -> set ( 'rendertime' , 'minimal_time' , $_POST [ 'minimal_time' ] ? ? 0 );
}
2019-02-20 11:12:40 -05:00
/**
2022-06-23 01:45:39 -04:00
* @ param App $a
2019-02-20 11:12:40 -05:00
* @ param string $o
*/
2022-06-30 07:32:13 -04:00
function rendertime_page_end ( App $a , string & $o )
2019-02-20 11:12:40 -05:00
{
2019-12-15 17:50:35 -05:00
$profiler = DI :: profiler ();
2019-02-20 11:12:40 -05:00
$duration = microtime ( true ) - $profiler -> get ( 'start' );
2013-01-25 18:22:46 -05:00
2022-11-25 17:43:07 -05:00
$ignored_modules = [
2022-11-26 18:28:29 -05:00
\Friendica\Module\Media\PhotosBrowser :: class ,
\Friendica\Module\Media\AttachmentBrowser :: class ,
2022-11-25 17:43:07 -05:00
];
$ignored = in_array ( DI :: router () -> getModuleClass (), $ignored_modules );
2016-09-15 05:52:30 -04:00
2021-11-04 16:32:16 -04:00
if ( $a -> isSiteAdmin () && (( $_GET [ 'mode' ] ? ? '' ) != 'minimal' ) && ! DI :: mode () -> isMobile () && ! DI :: mode () -> isMobile () && ! $ignored ) {
2016-01-17 08:56:05 -05:00
2020-01-18 14:52:33 -05:00
$o = $o . '<div class="renderinfo">' . DI :: l10n () -> t ( " Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s " ,
2019-02-20 11:12:40 -05:00
round ( $profiler -> get ( 'database' ) - $profiler -> get ( 'database_write' ), 3 ),
round ( $profiler -> get ( 'database_write' ), 3 ),
round ( $profiler -> get ( 'network' ), 2 ),
round ( $profiler -> get ( 'rendering' ), 2 ),
2021-07-27 09:57:36 -04:00
round ( $profiler -> get ( 'session' ), 2 ),
2019-02-20 11:12:40 -05:00
round ( $profiler -> get ( 'file' ), 2 ),
round ( $duration - $profiler -> get ( 'database' )
- $profiler -> get ( 'network' ) - $profiler -> get ( 'rendering' )
2021-07-27 09:57:36 -04:00
- $profiler -> get ( 'session' ) - $profiler -> get ( 'file' ), 2 ),
2019-02-20 11:12:40 -05:00
round ( $duration , 2 )
//round($profiler->get('markstart'), 3)
//round($profiler->get('plugin'), 3)
) . '</div>' ;
2020-12-09 17:10:44 -05:00
$total = microtime ( true ) - $profiler -> get ( 'start' );
$rest = $total - ( $profiler -> get ( 'ready' ) - $profiler -> get ( 'start' )) - $profiler -> get ( 'init' ) - $profiler -> get ( 'content' );
2020-12-09 19:03:00 -05:00
$o = $o . '<div class="renderinfo">' . DI :: l10n () -> t ( " Class-Init: %s, Boot: %s, Init: %s, Content: %s, Other: %s, Total: %s " ,
2020-12-09 17:10:44 -05:00
round ( $profiler -> get ( 'classinit' ) - $profiler -> get ( 'start' ), 3 ),
2020-12-09 17:42:45 -05:00
round ( $profiler -> get ( 'ready' ) - $profiler -> get ( 'classinit' ), 3 ),
2020-12-09 17:10:44 -05:00
round ( $profiler -> get ( 'init' ), 3 ),
round ( $profiler -> get ( 'content' ), 3 ),
round ( $rest , 3 ),
round ( $total , 3 )
) . '</div>' ;
2019-02-20 11:20:16 -05:00
if ( $profiler -> isRendertime ()) {
$o .= '<pre>' ;
2020-11-20 04:02:39 -05:00
$o .= $profiler -> getRendertimeString ( DI :: config () -> get ( 'rendertime' , 'minimal_time' , 0 ));
2019-02-20 11:20:16 -05:00
$o .= '</pre>' ;
}
2016-01-17 08:56:05 -05:00
}
2013-01-25 18:22:46 -05:00
}