summaryrefslogtreecommitdiff
path: root/storage/xtradb/include/ut0timer.ic
blob: 815726e9d0a1c359c3d3cd4590cc0a342fd5a7fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/*****************************************************************************

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;
}