/* * Copyright 2012 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 "pc/test/integration_test_helpers.h" namespace webrtc { PeerConnectionInterface::RTCOfferAnswerOptions IceRestartOfferAnswerOptions() { PeerConnectionInterface::RTCOfferAnswerOptions options; options.ice_restart = true; return options; } void RemoveSsrcsAndMsids(cricket::SessionDescription* desc) { for (ContentInfo& content : desc->contents()) { content.media_description()->mutable_streams().clear(); } desc->set_msid_supported(false); desc->set_msid_signaling(0); } void RemoveSsrcsAndKeepMsids(cricket::SessionDescription* desc) { for (ContentInfo& content : desc->contents()) { std::string track_id; std::vector stream_ids; if (!content.media_description()->streams().empty()) { const StreamParams& first_stream = content.media_description()->streams()[0]; track_id = first_stream.id; stream_ids = first_stream.stream_ids(); } content.media_description()->mutable_streams().clear(); StreamParams new_stream; new_stream.id = track_id; new_stream.set_stream_ids(stream_ids); content.media_description()->AddStream(new_stream); } } int FindFirstMediaStatsIndexByKind( const std::string& kind, const std::vector& media_stats_vec) { for (size_t i = 0; i < media_stats_vec.size(); i++) { if (media_stats_vec[i]->kind.ValueToString() == kind) { return i; } } return -1; } TaskQueueMetronome::TaskQueueMetronome(TaskQueueFactory* factory, TimeDelta tick_period) : tick_period_(tick_period), queue_(factory->CreateTaskQueue("MetronomeQueue", TaskQueueFactory::Priority::HIGH)) { tick_task_ = RepeatingTaskHandle::Start(queue_.Get(), [this] { MutexLock lock(&mutex_); for (auto* listener : listeners_) { listener->OnTickTaskQueue()->PostTask([listener] { listener->OnTick(); }); } return tick_period_; }); } TaskQueueMetronome::~TaskQueueMetronome() { RTC_DCHECK(listeners_.empty()); rtc::Event stop_event; queue_.PostTask([this, &stop_event] { tick_task_.Stop(); stop_event.Set(); }); stop_event.Wait(1000); } void TaskQueueMetronome::AddListener(TickListener* listener) { MutexLock lock(&mutex_); auto [it, inserted] = listeners_.insert(listener); RTC_DCHECK(inserted); } void TaskQueueMetronome::RemoveListener(TickListener* listener) { MutexLock lock(&mutex_); auto it = listeners_.find(listener); RTC_DCHECK(it != listeners_.end()); listeners_.erase(it); } TimeDelta TaskQueueMetronome::TickPeriod() const { return tick_period_; } } // namespace webrtc