2013-01-25 23:22:46 +00:00
< ? php
/**
* Name : rendertime
* Description : Shows the time that was needed to render the current page
* Version : 0.1
2018-04-01 09:43:49 +00:00
* Author : Michael Vogel < http :// pirati . ca / profile / heluecht >
2013-01-25 23:22:46 +00:00
*
*/
2019-02-20 16:28:32 +00:00
2022-06-23 05:16:22 +00:00
use Friendica\App ;
2018-12-26 07:28:16 +00:00
use Friendica\Core\Hook ;
2021-12-12 05:57:21 +00:00
use Friendica\Core\Renderer ;
2019-12-15 22:50:35 +00:00
use Friendica\DI ;
2017-11-06 23:55:24 +00:00
2013-01-25 23:22:46 +00:00
function rendertime_install () {
2018-12-26 07:28:16 +00:00
Hook :: register ( 'page_end' , 'addon/rendertime/rendertime.php' , 'rendertime_page_end' );
2021-12-12 05:57:21 +00:00
DI :: config () -> set ( 'system' , 'profiler' , true );
}
2022-06-23 05:16:22 +00:00
function rendertime_uninstall ()
{
2021-12-12 05:57:21 +00:00
DI :: config () -> delete ( 'system' , 'profiler' );
2013-01-25 23:22:46 +00:00
}
2023-01-14 02:16:09 +00:00
function rendertime_init_1 ()
2022-06-23 05:16:22 +00:00
{
2013-01-25 23:22:46 +00:00
}
2023-01-14 02:16:09 +00:00
function rendertime_addon_admin ( string & $o )
2022-06-23 05:16:22 +00:00
{
2022-07-28 01:53:47 +00:00
$t = Renderer :: getMarkupTemplate ( 'admin.tpl' , 'addon/rendertime/' );
2021-12-12 05:57:21 +00:00
$o = Renderer :: replaceMacros ( $t , [
'$submit' => DI :: l10n () -> t ( 'Save Settings' ),
2021-12-12 22:08:52 +00: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 05:57:21 +00:00
]);
}
2023-01-14 02:16:09 +00:00
function rendertime_addon_admin_post ()
2022-06-23 05:16:22 +00:00
{
2021-12-12 05:57:21 +00:00
DI :: config () -> set ( 'rendertime' , 'callstack' , $_POST [ 'callstack' ] ? ? false );
DI :: config () -> set ( 'rendertime' , 'minimal_time' , $_POST [ 'minimal_time' ] ? ? 0 );
}
2019-02-20 16:12:40 +00:00
/**
* @ param string $o
*/
2023-01-14 02:16:09 +00:00
function rendertime_page_end ( string & $o )
2019-02-20 16:12:40 +00:00
{
2019-12-15 22:50:35 +00:00
$profiler = DI :: profiler ();
2019-02-20 16:12:40 +00:00
$duration = microtime ( true ) - $profiler -> get ( 'start' );
2013-01-25 23:22:46 +00:00
2022-11-25 22:43:07 +00:00
$ignored_modules = [
2022-11-27 00:25:58 +00:00
\Friendica\Module\Media\Photo\Browser :: class ,
\Friendica\Module\Media\Attachment\Browser :: class ,
2022-11-25 22:43:07 +00:00
];
$ignored = in_array ( DI :: router () -> getModuleClass (), $ignored_modules );
2016-09-15 09:52:30 +00:00
2023-01-14 02:16:09 +00:00
if ( DI :: userSession () -> isSiteAdmin () && (( $_GET [ 'mode' ] ? ? '' ) != 'minimal' ) && ! DI :: mode () -> isMobile () && ! DI :: mode () -> isMobile () && ! $ignored ) {
2016-01-17 13:56:05 +00:00
2020-01-18 19:52:33 +00: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 16:12:40 +00: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 13:57:36 +00:00
round ( $profiler -> get ( 'session' ), 2 ),
2019-02-20 16:12:40 +00:00
round ( $profiler -> get ( 'file' ), 2 ),
round ( $duration - $profiler -> get ( 'database' )
- $profiler -> get ( 'network' ) - $profiler -> get ( 'rendering' )
2021-07-27 13:57:36 +00:00
- $profiler -> get ( 'session' ) - $profiler -> get ( 'file' ), 2 ),
2019-02-20 16:12:40 +00:00
round ( $duration , 2 )
//round($profiler->get('markstart'), 3)
//round($profiler->get('plugin'), 3)
) . '</div>' ;
2020-12-09 22:10:44 +00:00
$total = microtime ( true ) - $profiler -> get ( 'start' );
$rest = $total - ( $profiler -> get ( 'ready' ) - $profiler -> get ( 'start' )) - $profiler -> get ( 'init' ) - $profiler -> get ( 'content' );
2020-12-10 00:03:00 +00: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 22:10:44 +00:00
round ( $profiler -> get ( 'classinit' ) - $profiler -> get ( 'start' ), 3 ),
2020-12-09 22:42:45 +00:00
round ( $profiler -> get ( 'ready' ) - $profiler -> get ( 'classinit' ), 3 ),
2020-12-09 22:10:44 +00:00
round ( $profiler -> get ( 'init' ), 3 ),
round ( $profiler -> get ( 'content' ), 3 ),
round ( $rest , 3 ),
round ( $total , 3 )
) . '</div>' ;
2019-02-20 16:20:16 +00:00
if ( $profiler -> isRendertime ()) {
$o .= '<pre>' ;
2022-11-28 18:51:56 +00:00
$o .= $profiler -> getRendertimeString ( floatval ( DI :: config () -> get ( 'rendertime' , 'minimal_time' , 0 )));
2019-02-20 16:20:16 +00:00
$o .= '</pre>' ;
}
2016-01-17 13:56:05 +00:00
}
2013-01-25 23:22:46 +00:00
}