1//------------------------------------------------------------------------------
2//	Copyright (c) 2001-2004, Haiku
3//
4//	Permission is hereby granted, free of charge, to any person obtaining a
5//	copy of this software and associated documentation files (the "Software"),
6//	to deal in the Software without restriction, including without limitation
7//	the rights to use, copy, modify, merge, publish, distribute, sublicense,
8//	and/or sell copies of the Software, and to permit persons to whom the
9//	Software is furnished to do so, subject to the following conditions:
10//
11//	The above copyright notice and this permission notice shall be included in
12//	all copies or substantial portions of the Software.
13//
14//	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15//	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16//	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17//	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18//	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19//	FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20//	DEALINGS IN THE SOFTWARE.
21//
22//	File Name:		StopWatch.cpp
23//	Author(s):		unknown
24//
25//	Description:	Timer Class, mostly useful for debugging
26//
27//
28//
29//------------------------------------------------------------------------------
30
31#include <OS.h>		// for system_time()
32#include <StopWatch.h>
33
34#include <stdio.h>
35
36
37BStopWatch::BStopWatch(const char *name, bool silent)
38	:
39	fName(name),
40	fSilent(silent)
41{
42	Reset();
43}
44
45
46BStopWatch::~BStopWatch()
47{
48	if (!fSilent){
49		printf("StopWatch \"%s\": %d usecs.\n", fName, (int)ElapsedTime());
50
51		if (fLap) {
52			for (int i = 1; i <= fLap; i++){
53				if (!((i-1)%4))
54					printf("\n   ");
55				printf("[%d: %d#%d] ", i, (int)(fLaps[i]-fStart), (int)(fLaps[i] - fLaps[i -1 ]));
56			}
57			printf("\n");
58		}
59	}
60}
61
62
63void
64BStopWatch::Suspend()
65{
66	if (!fSuspendTime)
67		fSuspendTime = system_time();
68}
69
70
71void
72BStopWatch::Resume()
73{
74	if (fSuspendTime) {
75		fStart += system_time() - fSuspendTime;
76		fSuspendTime = 0;
77	}
78}
79
80
81bigtime_t
82BStopWatch::Lap()
83{
84	if (!fSuspendTime){
85		if (fLap<9)
86			fLap++;
87		fLaps[fLap] = system_time();
88
89		return system_time() - fStart;
90	} else
91		return 0;
92}
93
94
95bigtime_t
96BStopWatch::ElapsedTime() const
97{
98	if (fSuspendTime)
99		return fSuspendTime - fStart;
100	else
101		return system_time() - fStart;
102}
103
104
105void
106BStopWatch::Reset()
107{
108	fStart = system_time();		// store current time
109	fSuspendTime = 0;
110	fLap = 0;					// clear laps
111	for (int i = 0; i < 10; i++)
112		fLaps[i] = fStart;
113}
114
115
116const char *
117BStopWatch::Name() const
118{
119	return fName != NULL ? fName : "";
120}
121
122
123// just for future binary compatibility
124void BStopWatch::_ReservedStopWatch1()	{}
125void BStopWatch::_ReservedStopWatch2()	{}
126
127