Avoid using global task queue factory in fake encoder
by not using convenient rtc::TaskQueue constructor
Bug: webrtc:10284
Change-Id: I3c6703fd8c86b2a230f62cac734eb616039e4abe
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128603
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27207}
diff --git a/test/fake_encoder.cc b/test/fake_encoder.cc
index 3f692f8..e51611c 100644
--- a/test/fake_encoder.cc
+++ b/test/fake_encoder.cc
@@ -363,8 +363,11 @@
return FakeEncoder::Encode(input_image, frame_types);
}
-MultithreadedFakeH264Encoder::MultithreadedFakeH264Encoder(Clock* clock)
+MultithreadedFakeH264Encoder::MultithreadedFakeH264Encoder(
+ Clock* clock,
+ TaskQueueFactory* task_queue_factory)
: test::FakeH264Encoder(clock),
+ task_queue_factory_(task_queue_factory),
current_queue_(0),
queue1_(nullptr),
queue2_(nullptr) {
@@ -378,8 +381,10 @@
size_t max_payload_size) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
- queue1_.reset(new rtc::TaskQueue("Queue 1"));
- queue2_.reset(new rtc::TaskQueue("Queue 2"));
+ queue1_ = task_queue_factory_->CreateTaskQueue(
+ "Queue 1", TaskQueueFactory::Priority::NORMAL);
+ queue2_ = task_queue_factory_->CreateTaskQueue(
+ "Queue 2", TaskQueueFactory::Priority::NORMAL);
return FakeH264Encoder::InitEncode(config, number_of_cores, max_payload_size);
}
@@ -409,8 +414,8 @@
const std::vector<VideoFrameType>* frame_types) {
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
- std::unique_ptr<rtc::TaskQueue>& queue =
- (current_queue_++ % 2 == 0) ? queue1_ : queue2_;
+ TaskQueueBase* queue =
+ (current_queue_++ % 2 == 0) ? queue1_.get() : queue2_.get();
if (!queue) {
return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
diff --git a/test/fake_encoder.h b/test/fake_encoder.h
index 0e99dc5..7d4b027 100644
--- a/test/fake_encoder.h
+++ b/test/fake_encoder.h
@@ -16,6 +16,7 @@
#include <memory>
#include <vector>
+#include "api/task_queue/task_queue_factory.h"
#include "api/video/encoded_image.h"
#include "api/video/video_bitrate_allocation.h"
#include "api/video/video_frame.h"
@@ -26,7 +27,6 @@
#include "modules/video_coding/include/video_codec_interface.h"
#include "rtc_base/critical_section.h"
#include "rtc_base/sequenced_task_checker.h"
-#include "rtc_base/task_queue.h"
#include "rtc_base/thread_annotations.h"
#include "system_wrappers/include/clock.h"
@@ -137,7 +137,8 @@
// as it is called from the task queue in VideoStreamEncoder.
class MultithreadedFakeH264Encoder : public test::FakeH264Encoder {
public:
- explicit MultithreadedFakeH264Encoder(Clock* clock);
+ MultithreadedFakeH264Encoder(Clock* clock,
+ TaskQueueFactory* task_queue_factory);
virtual ~MultithreadedFakeH264Encoder() = default;
int32_t InitEncode(const VideoCodec* config,
@@ -155,9 +156,12 @@
protected:
class EncodeTask;
+ TaskQueueFactory* const task_queue_factory_;
int current_queue_ RTC_GUARDED_BY(sequence_checker_);
- std::unique_ptr<rtc::TaskQueue> queue1_ RTC_GUARDED_BY(sequence_checker_);
- std::unique_ptr<rtc::TaskQueue> queue2_ RTC_GUARDED_BY(sequence_checker_);
+ std::unique_ptr<TaskQueueBase, TaskQueueDeleter> queue1_
+ RTC_GUARDED_BY(sequence_checker_);
+ std::unique_ptr<TaskQueueBase, TaskQueueDeleter> queue2_
+ RTC_GUARDED_BY(sequence_checker_);
rtc::SequencedTaskChecker sequence_checker_;
};
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 7a6537c8..a00f144 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -510,6 +510,7 @@
"../api:mock_frame_decryptor",
"../api:scoped_refptr",
"../api:simulated_network_api",
+ "../api/task_queue:default_task_queue_factory",
"../api/task_queue:global_task_queue_factory",
"../api/test/video:function_video_factory",
"../api/units:data_rate",
diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc
index 1b5c643..c852f86 100644
--- a/video/video_send_stream_tests.cc
+++ b/video/video_send_stream_tests.cc
@@ -12,6 +12,7 @@
#include <vector>
#include "absl/memory/memory.h"
+#include "api/task_queue/default_task_queue_factory.h"
#include "api/test/simulated_network.h"
#include "api/video/encoded_image.h"
#include "api/video/video_bitrate_allocation.h"
@@ -681,9 +682,11 @@
#endif // defined(RTC_ENABLE_VP9)
TEST_F(VideoSendStreamTest, SupportsUlpfecWithMultithreadedH264) {
- test::FunctionVideoEncoderFactory encoder_factory([]() {
+ std::unique_ptr<TaskQueueFactory> task_queue_factory =
+ CreateDefaultTaskQueueFactory();
+ test::FunctionVideoEncoderFactory encoder_factory([&]() {
return absl::make_unique<test::MultithreadedFakeH264Encoder>(
- Clock::GetRealTimeClock());
+ Clock::GetRealTimeClock(), task_queue_factory.get());
});
UlpfecObserver test(false, false, true, true, "H264", &encoder_factory);
RunBaseTest(&test);
@@ -861,9 +864,11 @@
}
TEST_F(VideoSendStreamTest, SupportsFlexfecWithMultithreadedH264) {
- test::FunctionVideoEncoderFactory encoder_factory([]() {
+ std::unique_ptr<TaskQueueFactory> task_queue_factory =
+ CreateDefaultTaskQueueFactory();
+ test::FunctionVideoEncoderFactory encoder_factory([&]() {
return absl::make_unique<test::MultithreadedFakeH264Encoder>(
- Clock::GetRealTimeClock());
+ Clock::GetRealTimeClock(), task_queue_factory.get());
});
FlexfecObserver test(false, false, "H264", &encoder_factory, 1);