| // 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 "garnet/bin/mediaplayer/metrics/rate_tracker.h" |
| |
| #include "garnet/bin/mediaplayer/graph/formatting.h" |
| #include "garnet/bin/mediaplayer/graph/packet.h" |
| |
| namespace media_player { |
| |
| RateTracker::RateTracker() { Reset(); } |
| |
| RateTracker::~RateTracker() {} |
| |
| void RateTracker::Reset() { |
| last_progressing_sample_time_ = Packet::kUnknownPts; |
| progress_intervals_.Reset(); |
| } |
| |
| void RateTracker::AddSample(int64_t now, bool progressing) { |
| if (!progressing) { |
| last_progressing_sample_time_ = Packet::kUnknownPts; |
| } else { |
| if (last_progressing_sample_time_ != Packet::kUnknownPts) { |
| 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 |