00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifdef __GNUC__
00029 #pragma interface
00030 #endif
00031
00032 #ifndef _util_misc_regtime_h
00033 #define _util_misc_regtime_h
00034
00035 #include <iostream>
00036 #include <string>
00037 #include <util/class/class.h>
00038
00039 namespace sc {
00040
00041 class TimedRegion;
00042
00048 class RegionTimer: public DescribedClass {
00049 protected:
00050 int wall_time_;
00051 int cpu_time_;
00052 int flops_;
00053
00054 TimedRegion *top_;
00055 TimedRegion *current_;
00056 TimedRegion *default_;
00057
00058 public:
00059 RegionTimer(const char *topname = "total",
00060 int cpu_time = 0, int wall_time = 1);
00061 RegionTimer(const Ref<KeyVal> &);
00062 ~RegionTimer();
00063 void enter(const char * = 0);
00064 void change(const char *newname, const char * oldname = 0);
00065 void exit(const char * = 0);
00066 void set_default(const char *);
00067 void unset_default();
00068 void enter_default();
00069 void exit_default();
00070 virtual void print(std::ostream& = ExEnv::out0()) const;
00071
00072 void update_top() const;
00073
00074 int nregion() const;
00075 void get_region_names(const char *names[]) const;
00076 void get_wall_times(double *) const;
00077 void get_cpu_times(double *) const;
00078 void get_flops(double *) const;
00079 void get_depth(int *) const;
00080
00081 double get_wall_time() const;
00082 double get_cpu_time() const;
00083 double get_flops() const;
00084
00085 void add_wall_time(const char *, double);
00086 void add_cpu_time(const char *, double);
00087 void add_flops(const char *, double);
00088
00089 static RegionTimer *default_regiontimer();
00090 static void set_default_regiontimer(const Ref<RegionTimer> &);
00091 };
00092
00099 class Timer {
00100 Ref<RegionTimer> timer_;
00101 std::string name_;
00102 bool active_;
00103 public:
00107 Timer(const char *name);
00110 Timer(const Ref<RegionTimer> &, const char *name);
00112 ~Timer();
00116 void reset(const char * = 0);
00117 };
00118
00119 }
00120
00121 #endif
00122
00123
00124
00125
00126