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 <util/class/class.h>
00037
00038 class TimedRegion;
00039
00040 class RegionTimer: public DescribedClass {
00041 protected:
00042 int wall_time_;
00043 int cpu_time_;
00044 int flops_;
00045
00046 TimedRegion *top_;
00047 TimedRegion *current_;
00048 TimedRegion *default_;
00049
00050 public:
00051 RegionTimer(const char *topname = "total",
00052 int cpu_time = 0, int wall_time = 1);
00053 RegionTimer(const Ref<KeyVal> &);
00054 ~RegionTimer();
00055 void enter(const char * = 0);
00056 void change(const char *newname, const char * oldname = 0);
00057 void exit(const char * = 0);
00058 void set_default(const char *);
00059 void unset_default();
00060 void enter_default();
00061 void exit_default();
00062 virtual void print(std::ostream& = ExEnv::out()) const;
00063
00064 void update_top() const;
00065
00066 int nregion() const;
00067 void get_region_names(const char *names[]) const;
00068 void get_wall_times(double *) const;
00069 void get_cpu_times(double *) const;
00070 void get_flops(double *) const;
00071 void get_depth(int *) const;
00072
00073 double get_wall_time() const;
00074 double get_cpu_time() const;
00075 double get_flops() const;
00076
00077 void add_wall_time(const char *, double);
00078 void add_cpu_time(const char *, double);
00079 void add_flops(const char *, double);
00080
00081 static RegionTimer *default_regiontimer();
00082 static void set_default_regiontimer(const Ref<RegionTimer> &);
00083 };
00084
00085
00086 #endif
00087
00088
00089
00090
00091