The Stopwatch component provides a simple and consistent way to measure execution time of certain parts of your code. It's more convenient and powerful than calling to microtime() PHP function continuously.

Even if you haven't used this component directly yet, you use it every day in the Symfony Debug Toolbar and the Symfony Profiler to measure your application performance. In Symfony 3.4 we introduced two new features to make this component more useful.

Added a reset() method

Contributed by
Jose Gonzalez
in #23285.

The new reset() method makes the Stopwatch object to be reset to its original state, deleting all the data measured so far. This allows the stopwatch to be reusable, and emulates the reset button of a physical stopwatch.

Added support for microseconds

Contributed by
Javier Eguiluz
in #23223.

Stopwatch component supports time measures of any precision (microseconds, nanoseconds, etc.), but those measures are converted to integers, losing any sub-millisecond precision. That's why you usually see some 0 ms measures in the Symfony Profiler:

In Symfony 3.4, the code of Stopwatch has been updated to stop converting time measures to integers, so no precision is ever lost. In order to maintain backward compatibility, this new behavior is disabled by default and you must pass true to the Stopwatch class constructor to enable it.

The Symfony Profiler uses this feature by default, so the previous profiling now looks as follows (0 ms is now 0.1 ms, 0.3 ms, etc.):

Published in #Living on the edge