diff --git a/ecrire/base/db_mysql.php b/ecrire/base/db_mysql.php index e9d8599550636adc11f1f03e0e7b32d40be6acd6..9c1637f4ae96e3c4e931882d8126be94f6f50d9d 100644 --- a/ecrire/base/db_mysql.php +++ b/ecrire/base/db_mysql.php @@ -105,11 +105,13 @@ function spip_mysql_trace($query, $start, $result) function spip_mysql_timing($m1, $m2, $query, $result) { static $tt = 0; + global $tableau_des_temps; + list($usec, $sec) = explode(" ", $m1); list($usec2, $sec2) = explode(" ", $m2); $dt = $sec2 + $usec2 - $sec - $usec; $tt += $dt; - echo "<small>", htmlentities($query), " -> <span style='color: blue'>", sprintf("%3f", $dt),"</span> (", $tt, ")</small> $result<p>\n"; + $tableau_des_temps[] = array(sprintf("%3f", $dt), "$query -> $result"); } // fonction appelant la precedente specifiquement pour l'espace public diff --git a/ecrire/index.php b/ecrire/index.php index b6c27faa2662621665045f1beb7680b85be440e6..1fab08e721d2d2d94c52f9fa52b84a2f2b1e82bd 100644 --- a/ecrire/index.php +++ b/ecrire/index.php @@ -170,4 +170,10 @@ $var_f = charger_fonction($exec); // Z'y va $var_f(); + +// avec &var_profile=1 on a le tableau de mesures SQL +if (count($tableau_des_temps)) { + include_spip('public/debug'); + chrono_requete($tableau_des_temps); +} ?> diff --git a/ecrire/public.php b/ecrire/public.php index 0c04b1c59ae8b1f22c4eec12e4998225c7093f1b..1f1a0a3466aee15a58c7ae052d47fcb56ab8c37f 100644 --- a/ecrire/public.php +++ b/ecrire/public.php @@ -112,7 +112,7 @@ if (defined('_INC_PUBLIC')) { // Aller chercher la page // - $tableau_des_erreurs = array(); + $tableau_des_erreurs = $tableau_des_temps = array(); $assembler = charger_fonction('assembler', 'public'); $page = $assembler($fond); @@ -211,8 +211,7 @@ if (defined('_INC_PUBLIC')) { } } - if($html) - $page = analyse_js_ajoutee($page); + if ($html) $page = analyse_js_ajoutee($page); // Passer la main au debuggueur le cas echeant if ($var_mode == 'debug') { @@ -237,6 +236,11 @@ if (defined('_INC_PUBLIC')) { // cf. public/assembler.php) echo pipeline('affichage_final', $page['texte']); + if (count($tableau_des_temps) AND $affiche_boutons_admin) { + include_spip('public/debug'); + chrono_requete($tableau_des_temps); + } + // Gestion des statistiques du site public if (($GLOBALS['meta']["activer_statistiques"] != "non") AND $spip_compter_visites!='non') { diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php index 7e4cab5a6a691e570850b922910f20609e536454..32974d4a655f156eb76c3abdc05d100d9f65e8ad 100644 --- a/ecrire/public/debug.php +++ b/ecrire/public/debug.php @@ -45,7 +45,7 @@ function afficher_debug_contexte($env) { // et en mode validation (fausse erreur "double occurrence insert_head") // ajouter &var_mode=debug pour voir les erreurs et en parler sur spip@rezo.net // http://doc.spip.org/@affiche_erreurs_page -function affiche_erreurs_page($tableau_des_erreurs) { +function affiche_erreurs_page($tableau_des_erreurs, $message='') { if ($GLOBALS['exec']=='valider_xml') return ''; $GLOBALS['bouton_admin_debug'] = true; @@ -54,10 +54,10 @@ function affiche_erreurs_page($tableau_des_erreurs) { $res .= "<li>" .$err[0] . ", <small>".$err[1]."</small><br /></li>\n"; } return "\n<div id='spip-debug' style='" - . "position: absolute; top: 20px; left: 20px; z-index: 1000;" - . "filter:alpha(opacity=60); -moz-opacity:0.6; opacity: 0.6;" + . "position: absolute; top: 90px; left: 10px; z-index: 1000;" + . "filter:alpha(opacity=95); -moz-opacity:0.9; opacity: 0.95;" . "'><ul><li>" - . _T('zbug_erreur_squelette') + . ($message ? $message : _T('zbug_erreur_squelette')) ## aide locale courte a ecrire, avec lien vers une grosse page de documentation # aide('erreur_compilation'), . "<br /></li>" @@ -66,6 +66,17 @@ function affiche_erreurs_page($tableau_des_erreurs) { . "</ul></ul></div>"; } +function chrono_requete($tableau_des_temps) +{ + foreach ($tableau_des_temps as $key => $row) { + $t[$key] = $row[0]; + $q[$key] = $row[1]; + } + array_multisort($t, SORT_DESC, $q, $tableau_des_temps); + echo affiche_erreurs_page($tableau_des_temps, + _T('zbug_profile', array('time'=>''))); +} + // // Si une boucle cree des soucis, on peut afficher la requete fautive // avec son code d'erreur