through streams related to a call object. The Call object does not know directly when packets pass through it, only which AudioSendStreams are used. Each AudioSendStream has a pointer to the Transport object through which its packets are send. This CL: By registering an internal wrapper class, TimedTransport, the AudioSendStream can stay up-to-date on when packets have passed through its Transport. This lifetime (as an interval) is then queried by the Call when the AudioSendStream is destroyed. When Call is destroyed, all streams are guaranteed to have been destroyed and hence Call is up-to-date on packet activity. The class TimeInterval keeps the code in Call and AudioSendStream smaller, with fewer get methods in their APIs and less code for updating values. Also modifies the unit test for AudioSendStream: it previously enforced that the stream registers (with its channel proxy) the same transport that it was constructed with. BUG=webrtc:7882 Review-Url: https://codereview.webrtc.org/2979833002 Cr-Commit-Position: refs/heads/master@{#19087}
49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
/*
|
|
* Copyright 2017 The WebRTC Project Authors. All rights reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#include "webrtc/audio/time_interval.h"
|
|
#include "webrtc/rtc_base/fakeclock.h"
|
|
#include "webrtc/rtc_base/timedelta.h"
|
|
#include "webrtc/test/gtest.h"
|
|
|
|
namespace webrtc {
|
|
|
|
TEST(TimeIntervalTest, TimeInMs) {
|
|
rtc::ScopedFakeClock fake_clock;
|
|
TimeInterval interval;
|
|
interval.Extend();
|
|
fake_clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(100));
|
|
interval.Extend();
|
|
EXPECT_EQ(interval.Length(), 100);
|
|
}
|
|
|
|
TEST(TimeIntervalTest, Empty) {
|
|
TimeInterval interval;
|
|
EXPECT_TRUE(interval.Empty());
|
|
interval.Extend();
|
|
EXPECT_FALSE(interval.Empty());
|
|
interval.Extend(200);
|
|
EXPECT_FALSE(interval.Empty());
|
|
}
|
|
|
|
TEST(TimeIntervalTest, MonotoneIncreasing) {
|
|
const size_t point_count = 7;
|
|
const int64_t interval_points[] = {3, 2, 5, 0, 4, 1, 6};
|
|
const int64_t interval_differences[] = {0, 1, 3, 5, 5, 5, 6};
|
|
TimeInterval interval;
|
|
EXPECT_TRUE(interval.Empty());
|
|
for (size_t i = 0; i < point_count; ++i) {
|
|
interval.Extend(interval_points[i]);
|
|
EXPECT_EQ(interval_differences[i], interval.Length());
|
|
}
|
|
}
|
|
|
|
} // namespace webrtc
|