|
Boost : |
From: christopher diggins (cdiggins_at_[hidden])
Date: 2005-02-04 15:21:02
----- Original Message -----
From: "Gennadiy Rozental" <gennadiy.rozental_at_[hidden]>
To: <boost_at_[hidden]>
Sent: Friday, February 04, 2005 2:17 PM
Subject: [boost] Re: Profiling Library suggestion
> How is it better than what boost::timer provide?
>
> Gennadiy
Hello,
I was unaware of timer's existance, thanks for pointing it out. I had
searched for "profiling", and "profiler".
So I just took a look at: http://www.boost.org/libs/timer/timer.htm and I
would humbly submit that perhaps what is lacking in progress_timer is a
policy, and the ability to name profiles. I would like then to propose:
struct profiler_default_policy {
typedef boost::timer timer_t;
static void on_profiled(const char* name, const timer_t& t) {
double sec = t.elapsed();
cout << "time elapsed (msec) during profile " << name << " was " <<
sec / 1000;
if (sec <= t.elapsed_min()) {
cout << " *underflow* ";
}
if (sec >= t.elapsed_max())
cout << " *overflow* ";
}
cout << endl;
}
};
struct interesting_profiler_policy {
typedef boost::timer timer_t;
static map<string, double> profiles;
static void on_profiled(const char* name, const timer_t& t) {
double sec = t.elapsed();
profiles[name] = sec;
}
};
template<typename policy_t>
class basic_profiler {
public:
profiler(char const* s = "") : name(s) { };
~profiler() { policy_t::on_profiled(name, timer); };
private:
char const* name;
typename policy_t::timer_t timer;
};
typedef basic_profiler<default_profiler_policy> profiler;
This would have an advantage over progress_timer that library users may
modify the behaviour of the profiler, without rewriting the class. It can
also be used with more high-performance timers if the user has one at their
disposal.
Any comments or suggestions?
Christopher Diggins
Object Oriented Template Library (OOTL)
http://www.ootl.org
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk