xref: /aosp_15_r20/external/pigweed/pw_transfer/public/pw_transfer/rate_estimate.h (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1 // Copyright 2022 The Pigweed Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4 // use this file except in compliance with the License. You may obtain a copy of
5 // the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12 // License for the specific language governing permissions and limitations under
13 // the License.
14 #pragma once
15 
16 #include <chrono>
17 #include <cstdint>
18 #include <optional>
19 
20 #include "pw_chrono/system_clock.h"
21 
22 namespace pw::transfer {
23 
24 class RateEstimate {
25  public:
RateEstimate()26   constexpr RateEstimate() : start_time_(std::nullopt), bytes_transferred_(0) {}
27 
Reset()28   void Reset() {
29     start_time_ = chrono::SystemClock::now();
30     bytes_transferred_ = 0;
31   }
32 
Update(size_t new_bytes)33   constexpr void Update(size_t new_bytes) { bytes_transferred_ += new_bytes; }
34 
35   size_t GetRateBytesPerSecond() const;
36 
37  private:
38   std::optional<chrono::SystemClock::time_point> start_time_;
39   size_t bytes_transferred_;
40 };
41 
42 }  // namespace pw::transfer
43