Salome HOME
mergefrom branch BR_V511_PR tag mergeto_trunk_03feb09
[modules/yacs.git] / src / bases / chrono.cxx
1
2 #include "chrono.hxx"
3
4 #define _DEVDEBUG_
5 #include "YacsTrace.hxx"
6
7 using namespace std;
8
9 cntStruct* counters::_ctrs = 0;
10   
11 counters::counters(int nb)
12 {
13   DEBTRACE("counters::counters(int nb)");
14   _nbChrono = nb;
15   _ctrs = new cntStruct[_nbChrono];
16
17   for (int i=0; i< _nbChrono; i++)
18     {
19       _ctrs[i]._ctrNames = 0;
20       _ctrs[i]._ctrLines = 0;
21       _ctrs[i]._ctrOccur = 0;
22       _ctrs[i]._ctrCumul = 0;
23     }
24
25   DEBTRACE("counters::counters()");
26 }
27
28 counters::~counters()
29 {
30   stats();
31 }
32
33 void counters::stats()
34 {
35   DEBTRACE("counters::stats()");
36   for (int i=0; i < _nbChrono; i++)
37     if (_ctrs[i]._ctrOccur)
38       {
39         DEBTRACE("Compteur[" << i << "]: "<< _ctrs[i]._ctrNames << "[" << _ctrs[i]._ctrLines << "]");
40         DEBTRACE("  " << _ctrs[i]._ctrOccur);
41         DEBTRACE("  " << _ctrs[i]._ctrCumul);
42       }
43 }
44
45
46
47 chrono::chrono(int i) : _ctr(i), _run(true)
48 {
49   _start = clock();    
50 }
51
52 chrono::~chrono()
53 {
54   if (_run) stop();
55 }
56
57 void chrono::stop()
58 {
59   if (_run)
60     {
61       _run = false;
62       _end = clock();
63       double elapse = double(_end - _start)/double(CLOCKS_PER_SEC);
64       counters::_ctrs[_ctr]._ctrOccur++;
65       counters::_ctrs[_ctr]._ctrCumul += elapse;
66     }
67 }