// Copyright 2016 Google Inc. All Rights Reserved. #ifndef WVCDM_METRICS_METRICS_FRONT_END_H_ #define WVCDM_METRICS_METRICS_FRONT_END_H_ #include #include "report.h" #include "timer_metric.h" /* needed for the macro */ namespace wvcdm { namespace metrics { class MetricsFrontEnd { public: MetricsFrontEnd(Report* root); MetricNotification* CreateSubscriber(); static MetricsFrontEnd& Instance(); static void OverrideInstance(MetricsFrontEnd* instance); private: static MetricsFrontEnd* instance_; Report* root_; /* Disallow copy and assign. */ MetricsFrontEnd(const MetricsFrontEnd&); void operator=(const MetricsFrontEnd&); }; } // namespace metrics } // namespace wvcdm #define MFE wvcdm::metrics::MetricsFrontEnd::Instance() #define NO_TIME 0 #define M_RECORD(GROUP, METRIC, TIME, ...) \ if ( GROUP ) { \ ( GROUP ) -> METRIC . Record( TIME, ##__VA_ARGS__ ); \ } #define M_TIME(CALL, GROUP, METRIC, ...) \ if ( GROUP ) { \ wvcdm::metrics::TimerMetric timer; \ timer.Start(); \ CALL; \ ( GROUP ) -> METRIC . Record(timer.AsUs(), ##__VA_ARGS__ ); \ } else { \ CALL; \ } #endif