show or (is_array($this->show) and ! in_array($args[0], $this->show))) { return false; } // Class name $class = 'Profiler_' . ucfirst($method); $class = new $class(); $this->profiles[$args[0]] = $class; return $class; } /** * Disables the profiler for this page only. * Best used when profiler is autoloaded. * * @return void */ public function disable() { // Removes itself from the event queue Event::clear('system.display', array($this, 'render')); } /** * Render the profiler. Output is added to the bottom of the page by default. * * @param boolean return the output if TRUE * @return void|string */ public function render($return = false) { $start = microtime(true); $get = isset($_GET['profiler']) ? explode(',', $_GET['profiler']) : array(); $this->show = empty($get) ? Kohana::config('profiler.show') : $get; Event::run('profiler.run', $this); $styles = ''; foreach ($this->profiles as $profile) { $styles .= $profile->styles(); } // Don't display if there's no profiles if (empty($this->profiles)) { return; } // Load the profiler view $data = array ( 'profiles' => $this->profiles, 'styles' => $styles, 'execution_time' => microtime(true) - $start ); $view = new View('kohana_profiler', $data); // Return rendered view if $return is TRUE if ($return === true) { return $view->render(); } // Add profiler data to the output if (stripos(Kohana::$output, '') !== false) { // Closing body tag was found, insert the profiler data before it Kohana::$output = str_ireplace('', $view->render() . '', Kohana::$output); } else { // Append the profiler data to the output Kohana::$output .= $view->render(); } } /** * Benchmark times and memory usage from the Benchmark library. * * @return void */ public function benchmarks() { if (! $table = $this->table('benchmarks')) { return; } $table->add_column(); $table->add_column('kp-column kp-data'); $table->add_column('kp-column kp-data'); $table->add_column('kp-column kp-data'); $table->add_row(array('Benchmarks', 'Time', 'Count', 'Memory'), 'kp-title', 'background-color: #FFE0E0'); $benchmarks = Benchmark::get(true); // Moves the first benchmark (total execution time) to the end of the array $benchmarks = array_slice($benchmarks, 1) + array_slice($benchmarks, 0, 1); text::alternate(); foreach ($benchmarks as $name => $benchmark) { // Clean unique id from system benchmark names $name = ucwords(str_replace(array('_', '-'), ' ', str_replace(SYSTEM_BENCHMARK . '_', '', $name))); $data = array($name, number_format($benchmark['time'], 3), $benchmark['count'], number_format($benchmark['memory'] / 1024 / 1024, 2) . 'MB'); $class = text::alternate('', 'kp-altrow'); if ($name == 'Total Execution') { $class = 'kp-totalrow'; } $table->add_row($data, $class); } } /** * Database query benchmarks. * * @return void */ public function database() { if (! $table = $this->table('database')) { return; } $table->add_column(); $table->add_column('kp-column kp-data'); $table->add_column('kp-column kp-data'); $table->add_row(array('Queries', 'Time', 'Rows'), 'kp-title', 'background-color: #E0FFE0'); $queries = Database::$benchmarks; text::alternate(); $total_time = $total_rows = 0; foreach ($queries as $query) { $data = array($query['query'], number_format($query['time'], 3), $query['rows']); $class = text::alternate('', 'kp-altrow'); $table->add_row($data, $class); $total_time += $query['time']; $total_rows += $query['rows']; } $data = array('Total: ' . count($queries), number_format($total_time, 3), $total_rows); $table->add_row($data, 'kp-totalrow'); } /** * Session data. * * @return void */ public function session() { if (empty($_SESSION)) { return; } if (! $table = $this->table('session')) { return; } $table->add_column('kp-name'); $table->add_column(); $table->add_row(array('Session', 'Value'), 'kp-title', 'background-color: #CCE8FB'); text::alternate(); foreach ($_SESSION as $name => $value) { if (is_object($value)) { $value = get_class($value) . ' [object]'; } $data = array($name, $value); $class = text::alternate('', 'kp-altrow'); $table->add_row($data, $class); } } /** * POST data. * * @return void */ public function post() { if (empty($_POST)) { return; } if (! $table = $this->table('post')) { return; } $table->add_column('kp-name'); $table->add_column(); $table->add_row(array('POST', 'Value'), 'kp-title', 'background-color: #E0E0FF'); text::alternate(); foreach ($_POST as $name => $value) { $data = array($name, $value); $class = text::alternate('', 'kp-altrow'); $table->add_row($data, $class); } } /** * Cookie data. * * @return void */ public function cookies() { if (empty($_COOKIE)) { return; } if (! $table = $this->table('cookies')) { return; } $table->add_column('kp-name'); $table->add_column(); $table->add_row(array('Cookies', 'Value'), 'kp-title', 'background-color: #FFF4D7'); text::alternate(); foreach ($_COOKIE as $name => $value) { $data = array($name, $value); $class = text::alternate('', 'kp-altrow'); $table->add_row($data, $class); } } }