/***************************************************************************** Copyright (c) 2013, 2014, Facebook, Inc. All Rights Reserved. Copyright (c) 2014, SkySQL Ab. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ /********************************************************************//** @file include/ut0timer.ic Timer rountines Created 30/07/2014 Jan Lindström jan.lindstrom@skysql.com modified from https://github.com/facebook/mysql-5.6/commit/c75a413edeb96eb99bf11d7269bdfea06f96d6b6 *************************************************************************/ /**************************************************************//** Return time passed since time then, automatically adjusted for the estimated timer overhead. @return time passed since "then" */ UNIV_INLINE ulonglong ut_timer_since( /*===========*/ ulonglong then) /*!< in: time where to calculate */ { return (ut_timer_now() - then) - ut_timer.overhead; } /**************************************************************//** Get time passed since "then", and update then to now @return time passed sinche "then" */ UNIV_INLINE ulonglong ut_timer_since_and_update( /*======================*/ ulonglong *then) /*!< in: time where to calculate */ { ulonglong now = ut_timer_now(); ulonglong ret = (now - (*then)) - ut_timer.overhead; *then = now; return ret; } /**************************************************************//** Convert native timer units in a ulonglong into seconds in a double @return time in a seconds */ UNIV_INLINE double ut_timer_to_seconds( /*=================*/ ulonglong when) /*!< in: time where to calculate */ { double ret = (double)(when); ret /= (double)(ut_timer.frequency); return ret; } /**************************************************************//** Convert native timer units in a ulonglong into milliseconds in a double @return time in milliseconds */ UNIV_INLINE double ut_timer_to_milliseconds( /*=====================*/ ulonglong when) /*!< in: time where to calculate */ { double ret = (double)(when); ret *= 1000.0; ret /= (double)(ut_timer.frequency); return ret; } /**************************************************************//** Convert native timer units in a ulonglong into microseconds in a double @return time in microseconds */ UNIV_INLINE double ut_timer_to_microseconds( /*=====================*/ ulonglong when) /*!< in: time where to calculate */ { double ret = (double)(when); ret *= 1000000.0; ret /= (double)(ut_timer.frequency); return ret; } /**************************************************************//** Convert microseconds in a double to native timer units in a ulonglong @return time in microseconds */ UNIV_INLINE ulonglong ut_microseconds_to_timer( /*=====================*/ ulonglong when) /*!< in: time where to calculate */ { double ret = (double)when; ret *= (double)(ut_timer.frequency); ret /= 1000000.0; return (ulonglong)ret; }