/**
* @global CMain $APPLICATION
**/
use Bitrix\Main\Localization\Loc;
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
{
die();
}
IncludeModuleLangFile(__FILE__);
// ************************************************************************
// $main_exec_time, $bShowTime, $bShowStat MUST be defined before include
// ************************************************************************
global $APPLICATION;
$application = \Bitrix\Main\Application::getInstance();
$sqlTracker = $application->getConnection()->getTracker();
echo CJSCore::Init('admin_interface', true);
?>
if ($bShowTime || $bShowStat || $bShowCacheStat)
{
?>
}
$bShowExtTime = $bShowTime && !defined("ADMIN_SECTION") && $bShowStat;
$DOCUMENT_ROOT_LEN = mb_strlen($_SERVER["DOCUMENT_ROOT"]);
if ($bShowExtTime)
{
$CURRENT_TIME = microtime(true);
$PROLOG_BEFORE_1 = START_EXEC_PROLOG_BEFORE_1;
$PROLOG_BEFORE = START_EXEC_PROLOG_BEFORE_2 - $PROLOG_BEFORE_1;
$PROLOG_AFTER = 0;
$PROLOG_AFTER_2 = START_EXEC_PROLOG_BEFORE_2;
if (defined('START_EXEC_PROLOG_AFTER_2') && defined('START_EXEC_PROLOG_AFTER_1'))
{
$PROLOG_AFTER_2 = START_EXEC_PROLOG_AFTER_2;
$PROLOG_AFTER_1 = START_EXEC_PROLOG_AFTER_1;
$PROLOG_AFTER = $PROLOG_AFTER_2 - $PROLOG_AFTER_1;
}
$PROLOG = $PROLOG_BEFORE + $PROLOG_AFTER;
$EPILOG_BEFORE = 0;
$EPILOG_AFTER = 0;
$EPILOG = 0;
if (defined("START_EXEC_EPILOG_BEFORE_1"))
{
$EPILOG_BEFORE_1 = START_EXEC_EPILOG_BEFORE_1;
$WORK_AREA = $EPILOG_BEFORE_1 - $PROLOG_AFTER_2;
if (defined("START_EXEC_EPILOG_AFTER_1"))
{
$EPILOG_AFTER_1 = START_EXEC_EPILOG_AFTER_1;
$EPILOG_BEFORE = $EPILOG_AFTER_1 - $EPILOG_BEFORE_1;
$EPILOG_AFTER = $CURRENT_TIME - $EPILOG_AFTER_1;
}
$EPILOG = $CURRENT_TIME - $EPILOG_BEFORE_1;
}
else
{
$WORK_AREA = $CURRENT_TIME - $PROLOG_AFTER_2;
}
$PAGE = $CURRENT_TIME - $PROLOG_BEFORE_1;
$arAreas = [
"PAGE" => ["FLT" => ["PB", "PA", "WA", "EB", "EV", "EA"], "TIME" => $PAGE],
"PROLOG" => ["FLT" => ["PB", "PA"], "TIME" => $PROLOG],
"PROLOG_BEFORE" => ["FLT" => ["PB"], "TIME" => $PROLOG_BEFORE],
"PROLOG_AFTER" => ["FLT" => ["PA"], "TIME" => $PROLOG_AFTER],
"WORK_AREA" => ["FLT" => ["WA"], "TIME" => $WORK_AREA],
"EPILOG" => ["FLT" => ["EB", "EV", "EA"], "TIME" => $EPILOG],
"EPILOG_BEFORE" => ["FLT" => ["EB"], "TIME" => $EPILOG_BEFORE],
"EPILOG_AFTER" => ["FLT" => ["EV", "EA"], "TIME" => $EPILOG_AFTER],
];
$j = 1;
foreach ($arAreas as $i => $arArea)
{
$arAreas[$i]["NUM"] = $j;
$j++;
$arAreas[$i]["TRACE"] = array(
"PATH" => $APPLICATION->GetCurPage(),
"QUERY_COUNT" => 0,
"QUERY_TIME" => 0.0,
"QUERIES" => array(),
"TIME" => $arArea["TIME"],
"COMPONENT_COUNT" => 0,
"COMPONENT_TIME" => 0.0,
"COMP_QUERY_COUNT" => 0,
"COMP_QUERY_TIME" => 0.0,
"CACHE_SIZE" => 0,
);
}
$state = "PB";
foreach ($sqlTracker->getQueries() as $arQueryDebug)
{
if ($arQueryDebug["BX_STATE"] <> '')
{
$state = $arQueryDebug["BX_STATE"];
}
foreach ($arAreas as $i => $arArea)
{
if (in_array($state, $arArea["FLT"]))
{
$arAreas[$i]["TRACE"]["QUERY_COUNT"]++;
$arAreas[$i]["TRACE"]["QUERY_TIME"]+=$arQueryDebug["TIME"];
//$arAreas[$i]["TRACE"]["QUERIES"][] = $arQueryDebug;
}
}
}
$state = "PA";
foreach ($APPLICATION->arIncludeDebug as $arIncludeDebug)
{
if ($arIncludeDebug["BX_STATE"] <> '')
{
$state = $arIncludeDebug["BX_STATE"];
}
foreach ($arAreas as $i => $arArea)
{
if (in_array($state, $arArea["FLT"]))
{
$arAreas[$i]["TRACE"]["TIME"] -= $arIncludeDebug["TIME"];
$arAreas[$i]["TRACE"]["COMPONENT_COUNT"]++;
$arAreas[$i]["TRACE"]["COMPONENT_TIME"] += $arIncludeDebug["TIME"];
$arAreas[$i]["TRACE"]["COMP_QUERY_COUNT"] += $arIncludeDebug["QUERY_COUNT"];
$arAreas[$i]["TRACE"]["COMP_QUERY_TIME"] += $arIncludeDebug["QUERY_TIME"];
$arAreas[$i]["TRACE"]["CACHE_SIZE"] += $arIncludeDebug["CACHE_SIZE"];
}
}
}
$bShowComps = !empty($APPLICATION->arIncludeDebug);
foreach ($arAreas as $i => $arArea)
{
$arAreas[$i]["IND"] = count($APPLICATION->arIncludeDebug);
$APPLICATION->arIncludeDebug[]=$arArea["TRACE"];
}
echo '
'
. Loc::getMessage("debug_info_cr_time")
. ' ' . round($PAGE, 4) . ' '
. Loc::getMessage("debug_info_sec") . '
';
}
elseif ($bShowTime)
{
echo Loc::getMessage("debug_info_cr_time") . '
'
. round($main_exec_time, 4) . ' ' . Loc::getMessage("debug_info_sec") . '
';
}
$totalQueryCount = 0;
$totalQueryTime = 0.0;
if ($bShowStat || $bShowCacheStat)
{
if ($bShowStat)
{
$totalQueryCount = $sqlTracker->getCounter();
$totalQueryTime = $sqlTracker->getTime();
foreach ($APPLICATION->arIncludeDebug as $i=>$arIncludeDebug)
{
if (array_key_exists("REL_PATH", $arIncludeDebug))
{
$totalQueryCount += $arIncludeDebug["QUERY_COUNT"];
$totalQueryTime += $arIncludeDebug["QUERY_TIME"];
}
}
echo '
'
. Loc::getMessage("debug_info_total_queries") . " " . intval($totalQueryCount) . "
";
echo Loc::getMessage("debug_info_total_time") . " " . round($totalQueryTime, 4)
. " " . Loc::getMessage("debug_info_sec") . "
";
}
if ($GLOBALS["CACHE_STAT_BYTES"] || $bShowCacheStat)
{
$arCacheDebug = \Bitrix\Main\Diag\CacheTracker::getCacheTracking();
if (!empty($arCacheDebug))
{
echo '
'
. Loc::getMessage("debug_info_cache_size") . " " . " ", CFile::FormatSize(\Bitrix\Main\Diag\CacheTracker::getCacheStatBytes(), 0)
. " (" . count($arCacheDebug) . ")
";
}
else
{
echo Loc::getMessage("debug_info_cache_size") . " ", CFile::FormatSize(\Bitrix\Main\Diag\CacheTracker::getCacheStatBytes(), 0) . "
";
}
}
}
if ($bShowTime || $bShowStat)
{
echo '