1 /*
2  *  Copyright (c) 2019 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 API_NETWORK_STATE_PREDICTOR_H_
12 #define API_NETWORK_STATE_PREDICTOR_H_
13 
14 #include <memory>
15 #include <vector>
16 
17 namespace webrtc {
18 
19 enum class BandwidthUsage {
20   kBwNormal = 0,
21   kBwUnderusing = 1,
22   kBwOverusing = 2,
23   kLast
24 };
25 
26 // TODO(yinwa): work in progress. API in class NetworkStatePredictor should not
27 // be used by other users until this comment is removed.
28 
29 // NetworkStatePredictor predict network state based on current network metrics.
30 // Usage:
31 // Setup by calling Initialize.
32 // For each update, call Update. Update returns network state
33 // prediction.
34 class NetworkStatePredictor {
35  public:
~NetworkStatePredictor()36   virtual ~NetworkStatePredictor() {}
37 
38   // Returns current network state prediction.
39   // Inputs:  send_time_ms - packet send time.
40   //          arrival_time_ms - packet arrival time.
41   //          network_state - computed network state.
42   virtual BandwidthUsage Update(int64_t send_time_ms,
43                                 int64_t arrival_time_ms,
44                                 BandwidthUsage network_state) = 0;
45 };
46 
47 class NetworkStatePredictorFactoryInterface {
48  public:
49   virtual std::unique_ptr<NetworkStatePredictor>
50   CreateNetworkStatePredictor() = 0;
51   virtual ~NetworkStatePredictorFactoryInterface() = default;
52 };
53 
54 }  // namespace webrtc
55 
56 #endif  // API_NETWORK_STATE_PREDICTOR_H_
57