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