running_samples.cc 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "remoting/base/running_samples.h"
  5. #include <algorithm>
  6. #include "base/check_op.h"
  7. namespace remoting {
  8. RunningSamples::RunningSamples(int window_size)
  9. : window_size_(window_size) {
  10. DCHECK_GT(window_size, 0);
  11. }
  12. RunningSamples::~RunningSamples() {
  13. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  14. }
  15. void RunningSamples::Record(int64_t value) {
  16. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  17. data_points_.push_back(value);
  18. sum_ += value;
  19. if (data_points_.size() > window_size_) {
  20. sum_ -= data_points_.front();
  21. data_points_.pop_front();
  22. }
  23. }
  24. double RunningSamples::Average() const {
  25. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  26. if (data_points_.empty())
  27. return 0;
  28. return static_cast<double>(sum_) / data_points_.size();
  29. }
  30. int64_t RunningSamples::Max() const {
  31. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  32. if (data_points_.empty())
  33. return 0;
  34. return *std::max_element(data_points_.begin(), data_points_.end());
  35. }
  36. bool RunningSamples::IsEmpty() const {
  37. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  38. return data_points_.empty();
  39. }
  40. } // namespace remoting