##########################
Profiling Your Application
##########################

The Profiler Class will display benchmark results, queries you have run,
and ``$_POST`` data at the bottom of your pages. This information can be
useful during development in order to help with debugging and
optimization.

Initializing the Class
======================

.. important:: This class does NOT need to be initialized. It is loaded
	automatically by the :doc:`Output Library <../libraries/output>`
	if profiling is enabled as shown below.

Enabling the Profiler
=====================

To enable the profiler place the following line anywhere within your
:doc:`Controller <controllers>` methods::

	$this->output->enable_profiler(TRUE);

When enabled a report will be generated and inserted at the bottom of
your pages.

To disable the profiler you will use::

	$this->output->enable_profiler(FALSE);

Setting Benchmark Points
========================

In order for the Profiler to compile and display your benchmark data you
must name your mark points using specific syntax.

Please read the information on setting Benchmark points in the
:doc:`Benchmark Library <../libraries/benchmark>` page.

Enabling and Disabling Profiler Sections
========================================

Each section of Profiler data can be enabled or disabled by setting a
corresponding config variable to TRUE or FALSE. This can be done one of
two ways. First, you can set application wide defaults with the
*application/config/profiler.php* config file.

Example::

	$config['config']          = FALSE;
	$config['queries']         = FALSE;

In your controllers, you can override the defaults and config file
values by calling the ``set_profiler_sections()`` method of the
:doc:`Output Library <../libraries/output>`::

	$sections = array(
		'config'  => TRUE,
		'queries' => TRUE
	);

	$this->output->set_profiler_sections($sections);

Available sections and the array key used to access them are described
in the table below.

======================= =================================================================== ========
Key                     Description                                                         Default
======================= =================================================================== ========
**benchmarks**          Elapsed time of Benchmark points and total execution time           TRUE
**config**              CodeIgniter Config variables                                        TRUE
**controller_info**     The Controller class and method requested                           TRUE
**get**                 Any GET data passed in the request                                  TRUE
**http_headers**        The HTTP headers for the current request                            TRUE
**memory_usage**        Amount of memory consumed by the current request, in bytes          TRUE
**post**                Any POST data passed in the request                                 TRUE
**queries**             Listing of all database queries executed, including execution time  TRUE
**uri_string**          The URI of the current request                                      TRUE
**session_data**        Data stored in the current session                                  TRUE
**query_toggle_count**  The number of queries after which the query block will default to   25
                        hidden.
======================= =================================================================== ========

.. note:: Disabling the :doc:`save_queries </database/configuration>` setting in
	your database configuration will also effectively disable profiling for
	database queries and render the 'queries' setting above useless. You can
	optionally override this setting with ``$this->db->save_queries = TRUE;``.
	Without this setting you won't be able to view the queries or the
	`last_query <database/helpers>`.