Medida
timer.h
00001 //
00002 // Copyright (c) 2012 Daniel Lundin
00003 //
00004 
00005 #ifndef MEDIDA_TIMER_H_
00006 #define MEDIDA_TIMER_H_
00007 
00008 #include <chrono>
00009 #include <cstdint>
00010 #include <functional>
00011 #include <memory>
00012 
00013 #include "medida/metered_interface.h"
00014 #include "medida/metric_interface.h"
00015 #include "medida/metric_processor.h"
00016 #include "medida/sampling_interface.h"
00017 #include "medida/summarizable_interface.h"
00018 #include "medida/timer_context.h"
00019 
00020 namespace medida {
00021 
00022 class Timer : public MetricInterface, MeteredInterface, SamplingInterface, SummarizableInterface {
00023  public:
00024   Timer(std::chrono::nanoseconds duration_unit = std::chrono::milliseconds(1),
00025       std::chrono::nanoseconds rate_unit = std::chrono::seconds(1));
00026   ~Timer();
00027   void Process(MetricProcessor& processor);
00028   virtual std::chrono::nanoseconds rate_unit() const;
00029   virtual std::string event_type() const;
00030   virtual std::uint64_t count() const;
00031   virtual double fifteen_minute_rate();
00032   virtual double five_minute_rate();
00033   virtual double one_minute_rate();
00034   virtual double mean_rate();
00035   virtual stats::Snapshot GetSnapshot() const;
00036   virtual double max() const;
00037   virtual double min() const;
00038   virtual double mean() const;
00039   virtual double std_dev() const;
00040   virtual double sum() const;
00041   std::chrono::nanoseconds duration_unit() const;
00042   void Clear();
00043   void Update(std::chrono::nanoseconds duration);
00044   TimerContext TimeScope();
00045   void Time(std::function<void()>);
00046  private:
00047   class Impl;
00048   std::unique_ptr<Impl> impl_;
00049 };
00050 
00051 } // namespace medida
00052 
00053 #endif // MEDIDA_TIMER_H_
 All Classes