1 /*
2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_INCLUDE_SEND_TIME_HISTORY_H_
12 #define WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_INCLUDE_SEND_TIME_HISTORY_H_
13 
14 #include <map>
15 
16 #include "webrtc/base/constructormagic.h"
17 #include "webrtc/base/basictypes.h"
18 #include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
19 
20 namespace webrtc {
21 
22 class SendTimeHistory {
23  public:
24   SendTimeHistory(Clock* clock, int64_t packet_age_limit);
25   virtual ~SendTimeHistory();
26 
27   void AddAndRemoveOld(uint16_t sequence_number, size_t length, bool was_paced);
28   bool OnSentPacket(uint16_t sequence_number, int64_t timestamp);
29   // Look up PacketInfo for a sent packet, based on the sequence number, and
30   // populate all fields except for receive_time. The packet parameter must
31   // thus be non-null and have the sequence_number field set.
32   bool GetInfo(PacketInfo* packet, bool remove);
33   void Clear();
34 
35  private:
36   void EraseOld();
37   void UpdateOldestSequenceNumber();
38 
39   Clock* const clock_;
40   const int64_t packet_age_limit_;
41   uint16_t oldest_sequence_number_;  // Oldest may not be lowest.
42   std::map<uint16_t, PacketInfo> history_;
43 
44   RTC_DISALLOW_COPY_AND_ASSIGN(SendTimeHistory);
45 };
46 
47 }  // namespace webrtc
48 #endif  // WEBRTC_MODULES_REMOTE_BITRATE_ESTIMATOR_INCLUDE_SEND_TIME_HISTORY_H_
49