summaryrefslogtreecommitdiff
path: root/inc/OSD_PerfMeter.hxx
blob: 0b885c3ca0a8596c618adeca7bc32e1077d6f6b7 (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
// File:      OSD_PerfMeter.hxx
// Created:   03.04.02 15:26:30
// Author:    Michael SAZONOV

#ifndef OSD_PerfMeter_HeaderFile
#define OSD_PerfMeter_HeaderFile

#include <OSD_PerfMeter.h>

//  This  class enables measuring  the CPU  time between  two points  of code
//  execution,  regardless of the scope of these points of code.   A meter is
//  identified by its name (string  of chars). So multiple objects in various
//  places of  user code may  point to the  same meter.  The results  will be
//  printed  on  stdout  upon  finish   of  the  program.   For  details  see
//  OSD_PerfMeter.h

class OSD_PerfMeter {

 public:
  // ---------- PUBLIC METHODS ----------

  OSD_PerfMeter () : myIMeter(-1) {}
  // constructs a void meter (to further call Init and Start)

  OSD_PerfMeter (const char* meter, const unsigned autoStart = 1)
    : myIMeter(perf_get_meter(meter,0,0)) {
      if (myIMeter < 0) myIMeter = perf_init_meter(meter);
      if (autoStart) Start();
    }
  // constructs and starts (if autoStart is true) the named meter

  void Init (const char* meter) {
    myIMeter = perf_get_meter(meter,0,0);
    if (myIMeter < 0) myIMeter = perf_init_meter(meter);
  }
  // prepares the named meter

  void Start    () const { perf_start_imeter(myIMeter); }
  // starts the meter

  void Stop     () const { perf_stop_imeter(myIMeter); }
  // stops the meter

  void Tick     () const { perf_tick_imeter(myIMeter); }
  // increments the counter w/o time measurement

  void Flush    () const { perf_close_imeter(myIMeter); }
  // outputs the meter data and resets it to initial state

  virtual ~OSD_PerfMeter () { if (myIMeter >= 0) Stop(); }
  // assures stopping upon destruction

 protected:
  // ---------- PROTECTED FIELDS ----------

  int myIMeter;
};

#endif