Add last_data_sent timestamp to Connection.
Add a timestamp for last data sent in Connection. Move calling of rtc::TimeMillis() to Connection and remove it from RateTracker::AddSamples. This timestamp will be used to further improve fail over logic. BUG=None Change-Id: I4cbc7693a0e081277590b9cb13264dc2a998202e No-Try: True Change-Id: I4cbc7693a0e081277590b9cb13264dc2a998202e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/197421 Commit-Queue: Jonas Oreland <jonaso@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32831}
This commit is contained in:
parent
3942380d32
commit
3c5d5824a3
@ -1372,13 +1372,15 @@ int ProxyConnection::Send(const void* data,
|
||||
stats_.sent_total_packets++;
|
||||
int sent =
|
||||
port_->SendTo(data, size, remote_candidate_.address(), options, true);
|
||||
int64_t now = rtc::TimeMillis();
|
||||
if (sent <= 0) {
|
||||
RTC_DCHECK(sent < 0);
|
||||
error_ = port_->GetError();
|
||||
stats_.sent_discarded_packets++;
|
||||
} else {
|
||||
send_rate_tracker_.AddSamples(sent);
|
||||
send_rate_tracker_.AddSamplesAtTime(now, sent);
|
||||
}
|
||||
last_send_data_ = now;
|
||||
return sent;
|
||||
}
|
||||
|
||||
|
||||
@ -237,6 +237,8 @@ class Connection : public CandidatePairInterface,
|
||||
// that the remote peer has received, if it is indicated in the incoming
|
||||
// connectivity check from the peer.
|
||||
void HandlePiggybackCheckAcknowledgementIfAny(StunMessage* msg);
|
||||
// Timestamp when data was last sent (or attempted to be sent).
|
||||
int64_t last_send_data() const { return last_send_data_; }
|
||||
int64_t last_data_received() const { return last_data_received_; }
|
||||
|
||||
// Debugging description of this connection
|
||||
@ -378,6 +380,7 @@ class Connection : public CandidatePairInterface,
|
||||
ConnectionInfo stats_;
|
||||
rtc::RateTracker recv_rate_tracker_;
|
||||
rtc::RateTracker send_rate_tracker_;
|
||||
int64_t last_send_data_ = 0;
|
||||
|
||||
private:
|
||||
// Update the local candidate based on the mapped address attribute.
|
||||
|
||||
@ -403,12 +403,14 @@ int TCPConnection::Send(const void* data,
|
||||
static_cast<TCPPort*>(port_)->CopyPortInformationToPacketInfo(
|
||||
&modified_options.info_signaled_after_sent);
|
||||
int sent = socket_->Send(data, size, modified_options);
|
||||
int64_t now = rtc::TimeMillis();
|
||||
if (sent < 0) {
|
||||
stats_.sent_discarded_packets++;
|
||||
error_ = socket_->GetError();
|
||||
} else {
|
||||
send_rate_tracker_.AddSamples(sent);
|
||||
send_rate_tracker_.AddSamplesAtTime(now, sent);
|
||||
}
|
||||
last_send_data_ = now;
|
||||
return sent;
|
||||
}
|
||||
|
||||
|
||||
@ -108,14 +108,18 @@ int64_t RateTracker::TotalSampleCount() const {
|
||||
}
|
||||
|
||||
void RateTracker::AddSamples(int64_t sample_count) {
|
||||
AddSamplesAtTime(Time(), sample_count);
|
||||
}
|
||||
|
||||
void RateTracker::AddSamplesAtTime(int64_t current_time_ms,
|
||||
int64_t sample_count) {
|
||||
RTC_DCHECK_LE(0, sample_count);
|
||||
EnsureInitialized();
|
||||
int64_t current_time = Time();
|
||||
// Advance the current bucket as needed for the current time, and reset
|
||||
// bucket counts as we advance.
|
||||
for (size_t i = 0;
|
||||
i <= bucket_count_ &&
|
||||
current_time >= bucket_start_time_milliseconds_ + bucket_milliseconds_;
|
||||
for (size_t i = 0; i <= bucket_count_ &&
|
||||
current_time_ms >=
|
||||
bucket_start_time_milliseconds_ + bucket_milliseconds_;
|
||||
++i) {
|
||||
bucket_start_time_milliseconds_ += bucket_milliseconds_;
|
||||
current_bucket_ = NextBucketIndex(current_bucket_);
|
||||
@ -125,7 +129,8 @@ void RateTracker::AddSamples(int64_t sample_count) {
|
||||
// the entire buffer of samples has been expired.
|
||||
bucket_start_time_milliseconds_ +=
|
||||
bucket_milliseconds_ *
|
||||
((current_time - bucket_start_time_milliseconds_) / bucket_milliseconds_);
|
||||
((current_time_ms - bucket_start_time_milliseconds_) /
|
||||
bucket_milliseconds_);
|
||||
// Add all samples in the bucket that includes the current time.
|
||||
sample_buckets_[current_bucket_] += sample_count;
|
||||
total_sample_count_ += sample_count;
|
||||
|
||||
@ -47,6 +47,9 @@ class RateTracker {
|
||||
// these samples, and increments the count for that bucket by sample_count.
|
||||
void AddSamples(int64_t sample_count);
|
||||
|
||||
// Increment count for bucket at |current_time_ms|.
|
||||
void AddSamplesAtTime(int64_t current_time_ms, int64_t sample_count);
|
||||
|
||||
protected:
|
||||
// overrideable for tests
|
||||
virtual int64_t Time() const;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user