Line data Source code
1 : /*
2 : Minetest
3 : Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 :
5 : This program is free software; you can redistribute it and/or modify
6 : it under the terms of the GNU Lesser General Public License as published by
7 : the Free Software Foundation; either version 2.1 of the License, or
8 : (at your option) any later version.
9 :
10 : This program is distributed in the hope that it will be useful,
11 : but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 : GNU Lesser General Public License for more details.
14 :
15 : You should have received a copy of the GNU Lesser General Public License along
16 : with this program; if not, write to the Free Software Foundation, Inc.,
17 : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 : */
19 :
20 : #include "timetaker.h"
21 :
22 : #include "../gettime.h"
23 : #include "../log.h"
24 : #include <ostream>
25 :
26 74069 : TimeTaker::TimeTaker(const char *name, u32 *result, TimePrecision prec)
27 : {
28 74069 : m_name = name;
29 74069 : m_result = result;
30 74069 : m_running = true;
31 74069 : m_precision = prec;
32 74069 : m_time1 = getTime(prec);
33 74070 : }
34 :
35 144591 : u32 TimeTaker::stop(bool quiet)
36 : {
37 144591 : if(m_running)
38 : {
39 74070 : u32 time2 = getTime(m_precision);
40 74070 : u32 dtime = time2 - m_time1;
41 74070 : if(m_result != NULL)
42 : {
43 3549 : (*m_result) += dtime;
44 : }
45 : else
46 : {
47 70521 : if (!quiet) {
48 : static const char* const units[] = {
49 : "s" /* PRECISION_SECONDS */,
50 : "ms" /* PRECISION_MILLI */,
51 : "us" /* PRECISION_MICRO */,
52 : "ns" /* PRECISION_NANO */,
53 : };
54 0 : infostream << m_name << " took "
55 0 : << dtime << units[m_precision]
56 0 : << std::endl;
57 : }
58 : }
59 74070 : m_running = false;
60 74070 : return dtime;
61 : }
62 70521 : return 0;
63 : }
64 :
65 0 : u32 TimeTaker::getTimerTime()
66 : {
67 0 : u32 time2 = getTime(m_precision);
68 0 : u32 dtime = time2 - m_time1;
69 0 : return dtime;
70 : }
71 :
|