// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "src/media/playback/mediaplayer/metrics/rate_tracker.h"

#include "src/media/playback/mediaplayer/graph/formatting.h"
#include "src/media/playback/mediaplayer/graph/packet.h"

namespace media_player {

RateTracker::RateTracker() { Reset(); }

RateTracker::~RateTracker() {}

void RateTracker::Reset() {
  last_progressing_sample_time_ = Packet::kNoPts;
  progress_intervals_.Reset();
}

void RateTracker::AddSample(int64_t now, bool progressing) {
  if (!progressing) {
    last_progressing_sample_time_ = Packet::kNoPts;
  } else {
    if (last_progressing_sample_time_ != Packet::kNoPts) {
      progress_intervals_.AddSample(now - last_progressing_sample_time_);
    }

    last_progressing_sample_time_ = now;
  }
}

std::ostream& operator<<(std::ostream& os, const RateTracker& value) {
  os << fostr::NewLine << "rate per second   "
     << value.progress_samples_per_second();
  os << fostr::NewLine << "minimum interval  "
     << AsNs(value.min_progress_interval());
  os << fostr::NewLine << "average interval  "
     << AsNs(value.average_progress_interval());
  return os << fostr::NewLine << "maximum interval  "
            << AsNs(value.max_progress_interval());
}

}  // namespace media_player
