Overview

Packages

  • Framework
  • None
  • PHP
  • Utilitaire

Classes

  • Bdd
  • Cache
  • CacheSimple
  • Chronometre
  • Cli
  • Config
  • Controleur
  • Debug
  • Framework
  • GestionnaireException
  • I18n
  • Log
  • Registre
  • RestClient
  • RestServeur
  • RestService
  • Script
  • SquelettePhp
  • Url
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: // declare(encoding='UTF-8');
  3: /** Chronometre permet de stocker et d'afficher les temps d'éxécution de script.
  4:  *
  5:  * Cette classe permet de réaliser un ensemble de mesure de temps prises à différents endroits d'un script.
  6:  * Ces mesures peuvent ensuite être affichées au sein d'un tableau XHTML.
  7:  *
  8:  * @category    PHP 5.2
  9:  * @package Framework
 10:  * @author      Jean-Pascal MILCENT <jpm@tela-botanica.org>
 11:  * @copyright   Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
 12:  * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
 13:  * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2 
 14:  * @version $Id: Chronometre.php 327 2011-02-08 17:54:34Z jpm $
 15:  * @link        /doc/framework/
 16:  */
 17: class Chronometre {
 18:     /*** Attributs : ***/
 19:     private static $pointArretNumero = 1;
 20:     private static $temps = array();
 21: 
 22:     /** Accesseurs :
 23:      *
 24:      * @param string $cle la cle associée à un chronomètre particulier
 25:      *
 26:      * @return int le temps écoulé
 27:      */
 28:     private static function getTemps($cle = null) {
 29:         if (is_null($cle)) {
 30:             $temps = self::$temps;
 31:         } else {
 32:             foreach (self::$temps as $temps_enrg) {
 33:                 if (isset($temps_enrg[$cle])) {
 34:                     $temps = $temps_enrg;
 35:                     break;
 36:                 }
 37:             }
 38:         }
 39:         return $temps;
 40:     }
 41: 
 42:     /** Setteur pour la variable temps
 43:      *
 44:      * @param array() $moment ajoute des points de chronométrage au tableau _temps
 45:      *
 46:      * @return null
 47:      */
 48:     private static function setTemps($cle, $moment) {
 49:         array_push(self::$temps, array($cle => $moment));
 50:     }
 51: 
 52:     /*** Méthodes : ***/
 53:     
 54:     /** 
 55:      *  Effectue un chronometrage. 
 56:      * Vous pouvez indiquer le nom du point de chronométrage.
 57:      * Si vous n'indiquez rien, un nombre sera généré en débutant à 1.
 58:      *
 59:      * @param string le nom du point de chronométrage
 60:      * @return null
 61:      */
 62:     public static function chrono($cle = null) {
 63:         if ($cle == null) {
 64:             $cle = (count(self::$temps) == 0) ? 'Début' : self::$pointArretNumero++;
 65:         }
 66:         $moment = microtime();
 67:         self::setTemps($cle, $moment);
 68:     }
 69:     
 70:     /** 
 71:     * Permet d'afficher les temps d'éxécution de différentes parties d'un script.
 72:     *
 73:     * Cette fonction permet d'afficher un ensemble de  mesure de temps prises à différents endroits d'un script.
 74:     * Ces mesures sont affichées au sein d'un tableau XHTML dont on peut controler l'indentation des balises.
 75:     * Pour un site en production, il suffit d'ajouter un style #chrono {display:none;} dans la css.
 76:     * De cette façon, le tableau ne s'affichera pas. Le webmaster lui pourra rajouter sa propre feuille de style 
 77:     * affichant le tableau.
 78:     * Le développeur initial de cette fonction est Loic d'Anterroches.
 79:     * Elle a été modifiée par Jean-Pascal Milcent.
 80:     *
 81:     * @author Loic d'Anterroches
 82:     * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
 83:     * @param string l'eventuel nom du point de chronométrage de fin.
 84:     * @return   string  la chaine XHTML de mesure des temps.
 85:     */
 86:     public static function afficherChrono($cle = null) {
 87:         if (count(self::$temps) == 0) {
 88:             $sortie = "Aucun chronométrage à l'aide de Chronometre::chrono() n'a été réalisé.";
 89:         } else {
 90:             // Création du chrono de fin
 91:             self::chrono('Fin');
 92:             
 93:             $total_tps_ecoule = 0;
 94:             $tps_debut = null;
 95:             $tbody = '';
 96:             foreach (self::getTemps() as $temps) {
 97:                 foreach ($temps as $cle => $valeur) {
 98:                     // Récupération de la premiére mesure
 99:                     if (is_null($tps_debut)) {
100:                         $tps_debut = self::getMicroTime($valeur);
101:                     }
102:                     // Récupération de la mesure courrante
103:                     $tps_fin = self::getMicroTime($valeur);
104:     
105:                     $tps_ecoule = abs($tps_fin - $tps_debut);
106:                     $total_tps_ecoule += $tps_ecoule;
107:                     $tps_debut = $tps_fin;
108:                     
109:                     // Gestion affichage
110:                     $total_tps_ecoule_fmt = number_format($total_tps_ecoule, 3, ',', ' ');
111:                     $tps_ecoule_fmt = number_format($tps_ecoule, 3, ',', ' ');
112:                     $tbody .= '<tr><th>'.$cle.'</th><td>'.$tps_ecoule_fmt.'</td><td>'.$total_tps_ecoule_fmt.'</td></tr>'."\n";
113:                 }
114:             }
115:             $total_tps_ecoule_final_fmt = number_format($total_tps_ecoule, 3, ',', ' ');
116:             // Début création de l'affichage
117:             $sortie = '<table id="chrono" lang="fr" summary="Résultat duchronométrage du programme affichant la page actuelle.">'."\n".
118:                 '<caption>Chronométrage</caption>'."\n".
119:                 '<thead>'."\n".
120:                 '   <tr><th>Action</th><th title="Temps écoulé vis à vis de l\'action précédente">Temps écoulé (en s.)</th><th>Cumul du temps écoulé (en s.)</th></tr>'."\n".
121:                 '</thead>'."\n".
122:                 '<tbody>'."\n".
123:                     $tbody.
124:                 '</tbody>'."\n".
125:                 '<tfoot>'."\n".
126:                 '   <tr><th>Total du temps écoulé (en s.)</th><td colspan="2">'.$total_tps_ecoule_final_fmt.'</td></tr>'."\n".
127:                 '</tfoot>'."\n".
128:                 '</table>'."\n";
129:         }
130:         return $sortie;
131:     }
132:     
133:     private static function getMicroTime($utps) {
134:         list($usec, $sec) = explode(' ', $utps);
135:         return ((float)$usec + (float)$sec);
136:     }
137: }
138: ?>
TBFramework - v0.3 API documentation generated by ApiGen 2.8.0