.. _timing_functions:

Executing Time Functions
########################

The timing functions can be used to obtain execution time of
a section of code to aid in analysis and optimization.

Please note that the timing functions may use a different timer
than the default kernel timer, where the timer being used is
specified by architecture, SoC or board configuration.

Configuration
*************

To allow using the timing functions, :kconfig:`CONFIG_TIMING_FUNCTIONS`
needs to be enabled.

Usage
*****

To gather timing information:

1. Call :c:func:`timing_init` to initialize the timer.

2. Call :c:func:`timing_start` to signal the start of gathering of
   timing information. This usually starts the timer.

3. Call :c:func:`timing_counter_get` to mark the start of code
   execution.

4. Call :c:func:`timing_counter_get` to mark the end of code
   execution.

5. Call :c:func:`timing_cycles_get` to get the number of timer cycles
   between start and end of code execution.

6. Call :c:func:`timing_cycles_to_ns` with total number of cycles
   to convert number of cycles to nanoseconds.

7. Repeat from step 3 to gather timing information for other
   blocks of code.

8. Call :c:func:`timing_stop` to signal the end of gathering of
   timing information. This usually stops the timer.

Example
-------

This shows an example on how to use the timing functions:

.. code-block:: c

   #include <timing/timing.h>

   void gather_timing(void)
   {
       timing_t start_time, end_time;
       uint64_t total_cycles;
       uint64_t total_ns;

       timing_init();
       timing_start();

       start_time = timing_counter_get();

       code_execution_to_be_measured();

       end_time = timing_counter_get();

       total_cycles = timing_cycles_get(&start_time, &end_time);
       total_ns = timing_cycles_to_ns(total_cycles);

       timing_stop();
   }

API documentation
*****************

.. doxygengroup:: timing_api
