Ejemplo n.º 1
0
 public static function fireEvent($event)
 {
     $logger = Kwf_Events_Log::getInstance();
     if ($logger && $logger->indent == 0) {
         $logger->info('----');
         $logger->resetTimer();
     }
     $class = $event->class;
     $eventClass = get_class($event);
     $cacheId = '-ev-lst-' . Kwf_Component_Data_Root::getComponentClass() . '-' . $eventClass . '-' . $class;
     $callbacks = Kwf_Cache_SimpleStatic::fetch($cacheId);
     if ($callbacks === false) {
         $listeners = self::getAllListeners();
         $callbacks = array();
         if ($class && isset($listeners[$eventClass][$class])) {
             $callbacks = $listeners[$eventClass][$class];
         }
         if (isset($listeners[$eventClass]['all'])) {
             $callbacks = array_merge($callbacks, $listeners[$eventClass]['all']);
         }
         Kwf_Cache_SimpleStatic::add($cacheId, $callbacks);
     }
     if ($logger) {
         $logger->info($event->__toString() . ':');
         $logger->indent++;
     }
     static $callbackBenchmark = array();
     foreach ($callbacks as $callback) {
         $ev = call_user_func(array($callback['class'], 'getInstance'), $callback['class'], $callback['config']);
         if ($logger) {
             $msg = '-> ' . $callback['class'] . '::' . $callback['method'] . '(' . Kwf_Debug::_btArgsString($callback['config']) . ')';
             $logger->info($msg . ':');
             $start = microtime(true);
         }
         $ev->{$callback['method']}($event);
         if ($logger) {
             if (!isset($callbackBenchmark[$callback['class'] . '::' . $callback['method']])) {
                 $callbackBenchmark[$callback['class'] . '::' . $callback['method']] = array('calls' => 0, 'time' => 0);
             }
             $callbackBenchmark[$callback['class'] . '::' . $callback['method']]['calls']++;
             $callbackBenchmark[$callback['class'] . '::' . $callback['method']]['time'] += (microtime(true) - $start) * 1000;
             //ATM includes everything which is missleading
         }
     }
     if ($logger) {
         $logger->indent--;
         if ($logger->indent == 0) {
             foreach ($callbackBenchmark as $cb => $i) {
                 $logger->info(sprintf("% 3d", $i['calls']) . "x " . sprintf("%3d", round($i['time'], 0)) . " ms: {$cb}");
             }
             $callbackBenchmark = array();
         }
     }
     self::$eventsCount++;
 }
Ejemplo n.º 2
0
 private static function _countArray(&$counter, $name, $value, $backtrace = false)
 {
     if (!isset($counter[$name])) {
         if (!is_null($value)) {
             $counter[$name] = array();
         } else {
             $counter[$name] = 0;
         }
     }
     if (!is_null($value)) {
         if (!is_array($counter[$name])) {
             throw new Kwf_Exception("Missing value for counter '{$name}'");
         }
         $bt = false;
         if ($backtrace) {
             $b = debug_backtrace();
             unset($b[0]);
             unset($b[1]);
             $bt = '';
             foreach ($b as $i) {
                 $bt .= (isset($i['file']) ? $i['file'] : 'Unknown file') . ':' . (isset($i['line']) ? $i['line'] : '?') . ' - ' . (isset($i['object']) && $i['object'] instanceof Kwf_Component_Data ? $i['object']->componentId . '->' : '') . (isset($i['function']) ? $i['function'] : '') . '(' . Kwf_Debug::_btArgsString($i['args']) . ')' . "<br />";
             }
         }
         $counter[$name][] = array('value' => $value, 'bt' => $bt);
     } else {
         if (is_array($counter[$name])) {
             throw new Kwf_Exception("no value possible for counter '{$name}'");
         }
         $counter[$name]++;
     }
 }