summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDerek Jones <derek.jones@ellislab.com>2010-03-10 17:05:05 +0100
committerDerek Jones <derek.jones@ellislab.com>2010-03-10 17:05:05 +0100
commitee71c80dd20bcfc60169af3eb1f628229ca30d67 (patch)
treea8cfc4369123b0227a8fc75254f88d97718aec7e
parentcc64e97e502ce60491811b27e50b768f2517ba9b (diff)
added ability to enable/disable individual sections of the Profiler
-rw-r--r--system/application/config/profiler.php17
-rw-r--r--system/core/Output.php28
-rw-r--r--system/language/english/profiler_lang.php1
-rw-r--r--system/libraries/Profiler.php74
-rw-r--r--user_guide/changelog.html1
-rw-r--r--user_guide/general/profiling.html90
-rw-r--r--user_guide/libraries/output.html3
7 files changed, 193 insertions, 21 deletions
diff --git a/system/application/config/profiler.php b/system/application/config/profiler.php
new file mode 100644
index 000000000..f30432d9a
--- /dev/null
+++ b/system/application/config/profiler.php
@@ -0,0 +1,17 @@
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+/*
+| -------------------------------------------------------------------------
+| Profiler Sections
+| -------------------------------------------------------------------------
+| This file lets you determine whether or not various sections of Profiler
+| data are displayed when the Profiler is enabled.
+| Please see the user guide for info:
+|
+| http://codeigniter.com/user_guide/general/profiling.html
+|
+*/
+
+
+
+/* End of file profiler.php */
+/* Location: ./system/application/config/profiler.php */ \ No newline at end of file
diff --git a/system/core/Output.php b/system/core/Output.php
index ad92accd6..0dcf2e46f 100644
--- a/system/core/Output.php
+++ b/system/core/Output.php
@@ -34,6 +34,8 @@ class CI_Output {
var $enable_profiler = FALSE;
var $parse_exec_vars = TRUE; // whether or not to parse variables like {elapsed_time} and {memory_usage}
+ var $_profiler_sections = array();
+
function CI_Output()
{
log_message('debug', "Output Class Initialized");
@@ -143,6 +145,25 @@ class CI_Output {
}
// --------------------------------------------------------------------
+
+ /**
+ * Set Profiler Sections
+ *
+ * Allows override of default / config settings for Profiler section display
+ *
+ * @access public
+ * @param array
+ * @return void
+ */
+ function set_profiler_sections($sections)
+ {
+ foreach ($sections as $section => $enable)
+ {
+ $this->_profiler_sections[$section] = ($enable !== FALSE) ? TRUE : FALSE;
+ }
+ }
+
+ // --------------------------------------------------------------------
/**
* Set Cache
@@ -258,7 +279,12 @@ class CI_Output {
if ($this->enable_profiler == TRUE)
{
$CI->load->library('profiler');
-
+
+ if ( ! empty($this->_profiler_sections))
+ {
+ $CI->profiler->set_sections($this->_profiler_sections);
+ }
+
// If the output data contains closing </body> and </html> tags
// we will remove them and add them back after we insert the profile data
if (preg_match("|</body>.*?</html>|is", $output))
diff --git a/system/language/english/profiler_lang.php b/system/language/english/profiler_lang.php
index bf2183004..7876331f9 100644
--- a/system/language/english/profiler_lang.php
+++ b/system/language/english/profiler_lang.php
@@ -16,6 +16,7 @@ $lang['profiler_no_post'] = 'No POST data exists';
$lang['profiler_no_get'] = 'No GET data exists';
$lang['profiler_no_uri'] = 'No URI data exists';
$lang['profiler_no_memory'] = 'Memory Usage Unavailable';
+$lang['profiler_no_profiles'] = 'No Profile data - all Profiler sections have been disabled.';
/* End of file profiler_lang.php */
/* Location: ./system/language/english/profiler_lang.php */ \ No newline at end of file
diff --git a/system/libraries/Profiler.php b/system/libraries/Profiler.php
index bf20f1722..b2c008fc0 100644
--- a/system/libraries/Profiler.php
+++ b/system/libraries/Profiler.php
@@ -34,22 +34,67 @@ class CI_Profiler {
var $CI;
- function CI_Profiler()
+ var $_available_sections = array(
+ 'benchmarks',
+ 'config',
+ 'controller_info',
+ 'get',
+ 'http_headers',
+ 'memory_usage',
+ 'post',
+ 'queries',
+ 'uri_string'
+ );
+
+ function CI_Profiler($config = array())
{
$this->CI =& get_instance();
$this->CI->load->language('profiler');
+
+ // default all sections to display
+ foreach ($this->_available_sections as $section)
+ {
+ if ( ! isset($config[$section]))
+ {
+ $this->_compile_{$section} = TRUE;
+ }
+ }
+
+ $this->set_sections($config);
}
// --------------------------------------------------------------------
/**
+ * Set Sections
+ *
+ * Sets the private _compile_* properties to enable/disable Profiler sections
+ *
+ * @access public
+ * @param mixed
+ * @return void
+ */
+ function set_sections($config)
+ {
+ foreach ($config as $method => $enable)
+ {
+ if (in_array($method, $this->_available_sections))
+ {
+ $this->_compile_{$method} = ($enable !== FALSE) ? TRUE : FALSE;
+ }
+ }
+ }
+
+ // --------------------------------------------------------------------
+
+ /**
* Auto Profiler
*
* This function cycles through the entire array of mark points and
* matches any two points that are named identically (ending in "_start"
* and "_end" respectively). It then compiles the execution times for
* all points and returns it as an array
- *
+ * @PHP4 - all methods should be declared private
* @access private
* @return array
*/
@@ -438,16 +483,23 @@ class CI_Profiler {
function run()
{
$output = "<div id='codeigniter_profiler' style='clear:both;background-color:#fff;padding:10px;'>";
+ $fields_displayed = 0;
+
+ foreach ($this->_available_sections as $section)
+ {
+ if ($this->_compile_{$section} !== FALSE)
+ {
+ $func = "_compile_{$section}";
+ $output .= $this->{$func}();
+ $fields_displayed++;
+ }
+ }
- $output .= $this->_compile_uri_string();
- $output .= $this->_compile_controller_info();
- $output .= $this->_compile_memory_usage();
- $output .= $this->_compile_benchmarks();
- $output .= $this->_compile_get();
- $output .= $this->_compile_post();
- $output .= $this->_compile_queries();
- $output .= $this->_compile_config();
- $output .= $this->_compile_http_headers();
+ if ($fields_displayed == 0)
+ {
+ $output .= '<p style="border:1px solid #5a0099;padding:10px;margin:20px 0;background-color:#eee">'.$this->CI->lang->line('profiler_no_profiles').'</p>';
+ }
+
$output .= '</div>';
return $output;
diff --git a/user_guide/changelog.html b/user_guide/changelog.html
index b196acf42..ac421286b 100644
--- a/user_guide/changelog.html
+++ b/user_guide/changelog.html
@@ -72,6 +72,7 @@ Hg Tag: </p>
</ul>
<li>Libraries
<ul>
+ <li>Added ability to enable / disable individual sections of the <a href="general/profiling.html">Profiler</a></li>
<li>Added "is_object" into the list of unit tests capable of being run.</li>
<li>Table library will generate an empty cell with a blank string, or NULL value.</li>
<li>Added a <kbd>parse_string()</kbd> method to the <a href="libraries/parser.html">Parser Class</a>.</li>
diff --git a/user_guide/general/profiling.html b/user_guide/general/profiling.html
index ec71278b1..8622edeb9 100644
--- a/user_guide/general/profiling.html
+++ b/user_guide/general/profiling.html
@@ -69,20 +69,92 @@ This information can be useful during development in order to help with debuggin
<h2>Enabling the Profiler</h2>
-<p>To enable the profiler place the following function anywhere within your <a href="controllers.html">Controller</a> functions:</p>
-<code>$this->output->enable_profiler(TRUE);</code>
+ <p>To enable the profiler place the following function anywhere within your <a href="controllers.html">Controller</a> functions:</p>
+ <code>$this->output->enable_profiler(TRUE);</code>
-<p>When enabled a report will be generated and inserted at the bottom of your pages.</p>
+ <p>When enabled a report will be generated and inserted at the bottom of your pages.</p>
-<p>To disable the profiler you will use:</p>
-<code>$this->output->enable_profiler(FALSE);</code>
+ <p>To disable the profiler you will use:</p>
+ <code>$this->output->enable_profiler(FALSE);</code>
-<h2>Setting Benchmark Points</h2>
-
-<p>In order for the Profiler to compile and display your benchmark data you must name your mark points using specific syntax.</p>
-<p>Please read the information on setting Benchmark points in <a href="../libraries/benchmark.html">Benchmark Class</a> page.</p>
+<h2>Setting Benchmark Points</h2>
+ <p>In order for the Profiler to compile and display your benchmark data you must name your mark points using specific syntax.</p>
+
+ <p>Please read the information on setting Benchmark points in <a href="../libraries/benchmark.html">Benchmark Class</a> page.</p>
+
+
+<h2>Enabling and Disabling Profiler Sections</h2>
+
+ <p>Each section of Profiler data can be enabled or disabled by setting a corresponding config variable to <var>TRUE</var> or <var>FALSE</var>. This can be done one of two ways. First, you can set application wide defaults with the <dfn>system/application/config/profiler.php</dfn> config file.</p>
+
+ <code>$config['config']&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= FALSE;<br />
+ $config['queries']&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= FALSE;<br /></code>
+
+ <p>In your controllers, you can override the defaults and config file values by calling the <kbd>set_profiler_sections()</kbd> method of the <a href="../libraries/output.html">Output class</a>:</p>
+
+ <code>$sections = array(<br />
+ &nbsp;&nbsp;&nbsp;&nbsp;'config' &nbsp;=> TRUE,<br />
+ &nbsp;&nbsp;&nbsp;&nbsp;'queries' => TRUE<br />
+ &nbsp;&nbsp;&nbsp;&nbsp;);<br />
+ <br />
+ $this->output->set_profiler_sections($sections);</code>
+
+ <p>Available sections and the array key used to access them are described in the table below.</p>
+
+ <table cellpadding="0" cellspacing="1" border="0" style="width:100%" class="tableborder">
+ <tr>
+ <th>Key</th>
+ <th>Description</th>
+ <th>Default</th>
+ </tr><tr>
+
+ <td class="td"><strong>benchmarks</strong></td>
+ <td class="td">Elapsed time of Benchmark points and total execution time</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>config</strong></td>
+ <td class="td">CodeIgniter Config variables</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>controller_info</strong></td>
+ <td class="td">The Controller class and method requested</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>get</strong></td>
+ <td class="td">Any GET data passed in the request</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>http_headers</strong></td>
+ <td class="td">The HTTP headers for the current request</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>memory_usage</strong></td>
+ <td class="td">Amount of memory consumed by the current request, in bytes</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>post</strong></td>
+ <td class="td">Any POST data passed in the request</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>queries</strong></td>
+ <td class="td">Listing of all database queries executed, including execution time</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+
+ <td class="td"><strong>uri_string</strong></td>
+ <td class="td">The URI of the current request</td>
+ <td class="td">TRUE</td>
+ </tr><tr>
+ </table>
</div>
diff --git a/user_guide/libraries/output.html b/user_guide/libraries/output.html
index de22fbe28..70f0c1f7b 100644
--- a/user_guide/libraries/output.html
+++ b/user_guide/libraries/output.html
@@ -130,6 +130,9 @@ at the bottom of your pages for debugging and optimization purposes.</p>
<p>To disable the profiler you will use:</p>
<code>$this->output->enable_profiler(FALSE);</code>
+<h2>$this->output->set_profiler_sections();</h2>
+
+<p>Permits you to enable/disable specific sections of the Profiler when enabled. Please refer to the <a href="../general/profiling.html">Profiler</a> documentation for further information.</p>
<h2>$this->output->cache();</h2>
<p>The CodeIgniter output library also controls caching. For more information, please see the <a href="../general/caching.html">caching documentation</a>.</p>