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