Logo ROOT   6.10/09
Reference Guide
TGLStopwatch.cxx
Go to the documentation of this file.
1 // @(#)root/gl:$Id$
2 // Author: Richard Maunder 25/05/2005
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #include "TGLStopwatch.h"
13 #include "TGLIncludes.h"
14 
15 #ifdef R__WIN32
16 #include <Windows.h> // For GetSystemTimeAsFileTime()
17 #else
18 #include <sys/time.h> // For gettimeofday()
19 #endif
20 
21 /** \class TGLStopwatch
22 \ingroup opengl
23 Stopwatch object for timing GL work. We do not use the TStopwatch as
24 we need to perform GL flushing to get accurate times + we record
25 timing overheads here.
26 */
27 
29 
30 ////////////////////////////////////////////////////////////////////////////////
31 /// Construct stopwatch object.
32 
33 TGLStopwatch::TGLStopwatch() : fStart(0), fEnd(0), fLastRun(0)
34 {
35 }
36 
37 ////////////////////////////////////////////////////////////////////////////////
38 /// Destroy stopwatch object.
39 
41 {
42 }
43 
44 ////////////////////////////////////////////////////////////////////////////////
45 /// Start timing.
46 
48 {
49  fStart = GetClock();
50  fEnd = 0;
51 }
52 
53 // In milliseconds
54 ////////////////////////////////////////////////////////////////////////////////
55 /// Return lap time since Start(), in milliseconds.
56 
58 {
59  if (fStart == 0)
60  return 0;
61  else
62  return GetClock() - fStart;
63 }
64 
65 // In milliseconds
66 ////////////////////////////////////////////////////////////////////////////////
67 /// End timing, return total time since Start(), in milliseconds.
68 
70 {
71  if (fStart == 0)
72  return 0;
73  if (fEnd == 0) {
74  fEnd = GetClock();
75  fLastRun = fEnd - fStart;
76  }
77  return fLastRun;
78 }
79 
80 ////////////////////////////////////////////////////////////////////////////////
81 /// Get internal clock time, in milliseconds.
82 
84 {
85 #ifdef R__WIN32
86  // Use performance counter (system dependent support) if possible
87  static LARGE_INTEGER perfFreq;
88  static Bool_t usePerformanceCounter = QueryPerformanceFrequency(&perfFreq);
89 
90  if (usePerformanceCounter) {
91  LARGE_INTEGER counter;
92  QueryPerformanceCounter(&counter);
93  Double_t time = static_cast<Double_t>(counter.QuadPart)*1000.0 /
94  static_cast<Double_t>(perfFreq.QuadPart);
95  return time;
96  }
97 
98  // TODO: Portability - check with Rene
99  FILETIME ft;
100  ULARGE_INTEGER uli;
101  __int64 t;
102 
103  GetSystemTimeAsFileTime(&ft);
104  uli.LowPart = ft.dwLowDateTime;
105  uli.HighPart = ft.dwHighDateTime;
106  t = uli.QuadPart; // 100-nanosecond resolution
107  return static_cast<Double_t>(t /= 1E4); // Milliseconds
108 #else
109  struct timeval tv;
110  gettimeofday(&tv, 0);
111  return static_cast<Double_t>(tv.tv_sec*1E3) + static_cast<Double_t>(tv.tv_usec) / 1E3;
112 #endif
113 }
Double_t fEnd
start time (millisec)
Definition: TGLStopwatch.h:37
void Start()
Start timing.
Stopwatch object for timing GL work.
Definition: TGLStopwatch.h:32
bool Bool_t
Definition: RtypesCore.h:59
TGLStopwatch()
Construct stopwatch object.
Double_t Lap() const
Return lap time since Start(), in milliseconds.
Double_t fStart
Definition: TGLStopwatch.h:36
#define ClassImp(name)
Definition: Rtypes.h:336
double Double_t
Definition: RtypesCore.h:55
Double_t fLastRun
end time (millisec)
Definition: TGLStopwatch.h:38
virtual ~TGLStopwatch()
Destroy stopwatch object.
Double_t End()
End timing, return total time since Start(), in milliseconds.
Double_t GetClock(void) const
time of last run (milisec)