Boost logo

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


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: 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 {
      profiler(char const* s = "") : name(s) { };
      ~profiler() { policy_t::on_profiled(name, timer); };
      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

Any comments or suggestions?

Christopher Diggins
Object Oriented Template Library (OOTL)

Boost list run by bdawes at, gregod at, cpdaniel at, john at