#ifndef CHROMECAST_METRICS_TIMED_EVENT_RECORDER_H_
#define CHROMECAST_METRICS_TIMED_EVENT_RECORDER_H_
#include <string>
#include <vector>
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
namespace base {
class SequencedTaskRunner;
}
namespace chromecast {
class MetricsRecorder;
class TimedEventRecorder final {
public:
explicit TimedEventRecorder(MetricsRecorder* metrics_recorder);
~TimedEventRecorder();
TimedEventRecorder(const TimedEventRecorder&) = delete;
TimedEventRecorder& operator=(const TimedEventRecorder&) = delete;
void MeasureTimeUntilEvent(const std::string& event_name,
const std::string& measurement_name,
base::TimeTicks now);
void RecordEvent(const std::string& event_name, base::TimeTicks now);
private:
struct TimelineMeasurement {
std::string name;
base::TimeTicks start_time;
};
const raw_ptr<MetricsRecorder> metrics_recorder_;
const scoped_refptr<base::SequencedTaskRunner> task_runner_;
base::flat_map<std::string , std::vector<TimelineMeasurement>>
event_name_to_measurements_;
base::WeakPtrFactory<TimedEventRecorder> weak_factory_{this};
};
}
#endif