Remove WebRTC-LowLatencyRenderer field trial

There is no active use of it, and the fields are enabled by default in
the uses of it.

Change-Id: Ibfdb3f1befca886cb4b2f4b2ae4d6235aafafe3d
Fixed: webrtc:13998
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/256262
Reviewed-by: Johannes Kron <kron@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Evan Shrubsole <eshr@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36655}
This commit is contained in:
Evan Shrubsole 2022-04-26 11:10:21 +02:00 committed by WebRTC LUCI CQ
parent a0ee64c57e
commit f6adc647ba
6 changed files with 17 additions and 64 deletions

View File

@ -33,18 +33,12 @@ VCMDecodedFrameCallback::VCMDecodedFrameCallback(
: _clock(clock), : _clock(clock),
_timing(timing), _timing(timing),
_timestampMap(kDecoderFrameMemoryLength), _timestampMap(kDecoderFrameMemoryLength),
_extra_decode_time("t", absl::nullopt), _extra_decode_time("t", absl::nullopt) {
low_latency_renderer_enabled_("enabled", true),
low_latency_renderer_include_predecode_buffer_("include_predecode_buffer",
true) {
ntp_offset_ = ntp_offset_ =
_clock->CurrentNtpInMilliseconds() - _clock->TimeInMilliseconds(); _clock->CurrentNtpInMilliseconds() - _clock->TimeInMilliseconds();
ParseFieldTrial({&_extra_decode_time}, ParseFieldTrial({&_extra_decode_time},
field_trials.Lookup("WebRTC-SlowDownDecoder")); field_trials.Lookup("WebRTC-SlowDownDecoder"));
ParseFieldTrial({&low_latency_renderer_enabled_,
&low_latency_renderer_include_predecode_buffer_},
field_trials.Lookup("WebRTC-LowLatencyRenderer"));
} }
VCMDecodedFrameCallback::~VCMDecodedFrameCallback() {} VCMDecodedFrameCallback::~VCMDecodedFrameCallback() {}
@ -123,20 +117,16 @@ void VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage,
decodedImage.set_packet_infos(frameInfo->packet_infos); decodedImage.set_packet_infos(frameInfo->packet_infos);
decodedImage.set_rotation(frameInfo->rotation); decodedImage.set_rotation(frameInfo->rotation);
if (low_latency_renderer_enabled_) {
absl::optional<int> max_composition_delay_in_frames = absl::optional<int> max_composition_delay_in_frames =
_timing->MaxCompositionDelayInFrames(); _timing->MaxCompositionDelayInFrames();
if (max_composition_delay_in_frames) { if (max_composition_delay_in_frames) {
// Subtract frames that are in flight. // Subtract frames that are in flight.
if (low_latency_renderer_include_predecode_buffer_) {
*max_composition_delay_in_frames -= timestamp_map_size; *max_composition_delay_in_frames -= timestamp_map_size;
*max_composition_delay_in_frames = *max_composition_delay_in_frames =
std::max(0, *max_composition_delay_in_frames); std::max(0, *max_composition_delay_in_frames);
}
decodedImage.set_max_composition_delay_in_frames( decodedImage.set_max_composition_delay_in_frames(
max_composition_delay_in_frames); max_composition_delay_in_frames);
} }
}
RTC_DCHECK(frameInfo->decodeStart); RTC_DCHECK(frameInfo->decodeStart);
const Timestamp now = _clock->CurrentTime(); const Timestamp now = _clock->CurrentTime();

View File

@ -66,16 +66,6 @@ class VCMDecodedFrameCallback : public DecodedImageCallback {
int64_t ntp_offset_; int64_t ntp_offset_;
// Set by the field trial WebRTC-SlowDownDecoder to simulate a slow decoder. // Set by the field trial WebRTC-SlowDownDecoder to simulate a slow decoder.
FieldTrialOptional<TimeDelta> _extra_decode_time; FieldTrialOptional<TimeDelta> _extra_decode_time;
// Set by the field trial WebRTC-LowLatencyRenderer. The parameter `enabled`
// determines if the low-latency renderer algorithm should be used for the
// case min playout delay=0 and max playout delay>0.
FieldTrialParameter<bool> low_latency_renderer_enabled_;
// Set by the field trial WebRTC-LowLatencyRenderer. The parameter
// `include_predecode_buffer` determines if the predecode buffer should be
// taken into account when calculating maximum number of frames in composition
// queue.
FieldTrialParameter<bool> low_latency_renderer_include_predecode_buffer_;
}; };
class VCMGenericDecoder { class VCMGenericDecoder {

View File

@ -22,6 +22,8 @@ namespace {
// Default pacing that is used for the low-latency renderer path. // Default pacing that is used for the low-latency renderer path.
constexpr TimeDelta kZeroPlayoutDelayDefaultMinPacing = TimeDelta::Millis(8); constexpr TimeDelta kZeroPlayoutDelayDefaultMinPacing = TimeDelta::Millis(8);
constexpr TimeDelta kLowLatencyRendererMaxPlayoutDelay = TimeDelta::Millis(500);
} // namespace } // namespace
VCMTiming::VCMTiming(Clock* clock, const FieldTrialsView& field_trials) VCMTiming::VCMTiming(Clock* clock, const FieldTrialsView& field_trials)
@ -36,12 +38,9 @@ VCMTiming::VCMTiming(Clock* clock, const FieldTrialsView& field_trials)
current_delay_(TimeDelta::Zero()), current_delay_(TimeDelta::Zero()),
prev_frame_timestamp_(0), prev_frame_timestamp_(0),
num_decoded_frames_(0), num_decoded_frames_(0),
low_latency_renderer_enabled_("enabled", true),
zero_playout_delay_min_pacing_("min_pacing", zero_playout_delay_min_pacing_("min_pacing",
kZeroPlayoutDelayDefaultMinPacing), kZeroPlayoutDelayDefaultMinPacing),
last_decode_scheduled_(Timestamp::Zero()) { last_decode_scheduled_(Timestamp::Zero()) {
ParseFieldTrial({&low_latency_renderer_enabled_},
field_trials.Lookup("WebRTC-LowLatencyRenderer"));
ParseFieldTrial({&zero_playout_delay_min_pacing_}, ParseFieldTrial({&zero_playout_delay_min_pacing_},
field_trials.Lookup("WebRTC-ZeroPlayoutDelay")); field_trials.Lookup("WebRTC-ZeroPlayoutDelay"));
} }
@ -165,12 +164,9 @@ void VCMTiming::SetLastDecodeScheduledTimestamp(
Timestamp VCMTiming::RenderTimeInternal(uint32_t frame_timestamp, Timestamp VCMTiming::RenderTimeInternal(uint32_t frame_timestamp,
Timestamp now) const { Timestamp now) const {
constexpr TimeDelta kLowLatencyRendererMaxPlayoutDelay =
TimeDelta::Millis(500);
if (min_playout_delay_.IsZero() && if (min_playout_delay_.IsZero() &&
(max_playout_delay_.IsZero() || (max_playout_delay_.IsZero() ||
(low_latency_renderer_enabled_ && max_playout_delay_ <= kLowLatencyRendererMaxPlayoutDelay)) {
max_playout_delay_ <= kLowLatencyRendererMaxPlayoutDelay))) {
// Render as soon as possible or with low-latency renderer algorithm. // Render as soon as possible or with low-latency renderer algorithm.
return Timestamp::Zero(); return Timestamp::Zero();
} }

View File

@ -141,11 +141,6 @@ class VCMTiming {
uint32_t prev_frame_timestamp_ RTC_GUARDED_BY(mutex_); uint32_t prev_frame_timestamp_ RTC_GUARDED_BY(mutex_);
absl::optional<TimingFrameInfo> timing_frame_info_ RTC_GUARDED_BY(mutex_); absl::optional<TimingFrameInfo> timing_frame_info_ RTC_GUARDED_BY(mutex_);
size_t num_decoded_frames_ RTC_GUARDED_BY(mutex_); size_t num_decoded_frames_ RTC_GUARDED_BY(mutex_);
// Set by the field trial WebRTC-LowLatencyRenderer. The parameter enabled
// determines if the low-latency renderer algorithm should be used for the
// case min playout delay=0 and max playout delay>0.
FieldTrialParameter<bool> low_latency_renderer_enabled_
RTC_GUARDED_BY(mutex_);
absl::optional<int> max_composition_delay_in_frames_ RTC_GUARDED_BY(mutex_); absl::optional<int> max_composition_delay_in_frames_ RTC_GUARDED_BY(mutex_);
// Set by the field trial WebRTC-ZeroPlayoutDelay. The parameter min_pacing // Set by the field trial WebRTC-ZeroPlayoutDelay. The parameter min_pacing
// determines the minimum delay between frames scheduled for decoding that is // determines the minimum delay between frames scheduled for decoding that is

View File

@ -244,9 +244,6 @@ VideoReceiveStream2::VideoReceiveStream2(
rtp_stream_sync_(call->worker_thread(), this), rtp_stream_sync_(call->worker_thread(), this),
max_wait_for_keyframe_ms_(DetermineMaxWaitForFrame(config_, true)), max_wait_for_keyframe_ms_(DetermineMaxWaitForFrame(config_, true)),
max_wait_for_frame_ms_(DetermineMaxWaitForFrame(config_, false)), max_wait_for_frame_ms_(DetermineMaxWaitForFrame(config_, false)),
low_latency_renderer_enabled_("enabled", true),
low_latency_renderer_include_predecode_buffer_("include_predecode_buffer",
true),
maximum_pre_stream_decoders_("max", kDefaultMaximumPreStreamDecoders), maximum_pre_stream_decoders_("max", kDefaultMaximumPreStreamDecoders),
decode_sync_(decode_sync), decode_sync_(decode_sync),
decode_queue_(task_queue_factory_->CreateTaskQueue( decode_queue_(task_queue_factory_->CreateTaskQueue(
@ -286,9 +283,6 @@ VideoReceiveStream2::VideoReceiveStream2(
true); true);
} }
ParseFieldTrial({&low_latency_renderer_enabled_,
&low_latency_renderer_include_predecode_buffer_},
call_->trials().Lookup("WebRTC-LowLatencyRenderer"));
ParseFieldTrial( ParseFieldTrial(
{ {
&maximum_pre_stream_decoders_, &maximum_pre_stream_decoders_,
@ -975,18 +969,16 @@ void VideoReceiveStream2::UpdatePlayoutDelays() const {
if (minimum_delay_ms >= 0) { if (minimum_delay_ms >= 0) {
timing_->set_min_playout_delay(TimeDelta::Millis(minimum_delay_ms)); timing_->set_min_playout_delay(TimeDelta::Millis(minimum_delay_ms));
if (frame_minimum_playout_delay_ms_ == 0 && if (frame_minimum_playout_delay_ms_ == 0 &&
frame_maximum_playout_delay_ms_ > 0 && low_latency_renderer_enabled_) { frame_maximum_playout_delay_ms_ > 0) {
// TODO(kron): Estimate frame rate from video stream. // TODO(kron): Estimate frame rate from video stream.
constexpr double kFrameRate = 60.0; constexpr double kFrameRate = 60.0;
// Convert playout delay in ms to number of frames. // Convert playout delay in ms to number of frames.
int max_composition_delay_in_frames = std::lrint( int max_composition_delay_in_frames = std::lrint(
static_cast<double>(frame_maximum_playout_delay_ms_ * kFrameRate) / static_cast<double>(frame_maximum_playout_delay_ms_ * kFrameRate) /
rtc::kNumMillisecsPerSec); rtc::kNumMillisecsPerSec);
if (low_latency_renderer_include_predecode_buffer_) {
// Subtract frames in buffer. // Subtract frames in buffer.
max_composition_delay_in_frames = std::max<int16_t>( max_composition_delay_in_frames = std::max<int16_t>(
max_composition_delay_in_frames - frame_buffer_->Size(), 0); max_composition_delay_in_frames - frame_buffer_->Size(), 0);
}
timing_->SetMaxCompositionDelayInFrames( timing_->SetMaxCompositionDelayInFrames(
absl::make_optional(max_composition_delay_in_frames)); absl::make_optional(max_composition_delay_in_frames));
} }

View File

@ -309,16 +309,6 @@ class VideoReceiveStream2
std::vector<std::unique_ptr<EncodedFrame>> buffered_encoded_frames_ std::vector<std::unique_ptr<EncodedFrame>> buffered_encoded_frames_
RTC_GUARDED_BY(decode_queue_); RTC_GUARDED_BY(decode_queue_);
// Set by the field trial WebRTC-LowLatencyRenderer. The parameter `enabled`
// determines if the low-latency renderer algorithm should be used for the
// case min playout delay=0 and max playout delay>0.
FieldTrialParameter<bool> low_latency_renderer_enabled_;
// Set by the field trial WebRTC-LowLatencyRenderer. The parameter
// `include_predecode_buffer` determines if the predecode buffer should be
// taken into account when calculating maximum number of frames in composition
// queue.
FieldTrialParameter<bool> low_latency_renderer_include_predecode_buffer_;
// Set by the field trial WebRTC-PreStreamDecoders. The parameter `max` // Set by the field trial WebRTC-PreStreamDecoders. The parameter `max`
// determines the maximum number of decoders that are created up front before // determines the maximum number of decoders that are created up front before
// any video frame has been received. // any video frame has been received.