mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
Uninherit TaskQueueForTest from legacy rtc::TaskQueue
rtc::TaskQueue is not used in any api and thus TaskQueueForTest no longer need to provide implementation for it. TaskQueueForTest still helpful for code that expects TaskQueueBase. Bug: webrtc:14169 Change-Id: I64ee2691ddeb0ff3a72cd4dd192730c06260f61f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/335323 Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41577}
This commit is contained in:
parent
37e9b378fd
commit
0206a971f5
4 changed files with 67 additions and 29 deletions
|
@ -1771,9 +1771,7 @@ rtc_library("task_queue_for_test") {
|
||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
":checks",
|
":checks",
|
||||||
":macromagic",
|
|
||||||
":rtc_event",
|
":rtc_event",
|
||||||
":rtc_task_queue",
|
|
||||||
"../api:function_view",
|
"../api:function_view",
|
||||||
"../api/task_queue",
|
"../api/task_queue",
|
||||||
"../api/task_queue:default_task_queue_factory",
|
"../api/task_queue:default_task_queue_factory",
|
||||||
|
@ -2012,7 +2010,6 @@ if (rtc_include_tests) {
|
||||||
":gunit_helpers",
|
":gunit_helpers",
|
||||||
":rtc_base_tests_utils",
|
":rtc_base_tests_utils",
|
||||||
":rtc_event",
|
":rtc_event",
|
||||||
":rtc_task_queue",
|
|
||||||
":task_queue_for_test",
|
":task_queue_for_test",
|
||||||
":timeutils",
|
":timeutils",
|
||||||
"../api/units:time_delta",
|
"../api/units:time_delta",
|
||||||
|
|
|
@ -10,12 +10,28 @@
|
||||||
|
|
||||||
#include "rtc_base/task_queue_for_test.h"
|
#include "rtc_base/task_queue_for_test.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "api/task_queue/default_task_queue_factory.h"
|
#include "api/task_queue/default_task_queue_factory.h"
|
||||||
|
#include "api/task_queue/task_queue_base.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
TaskQueueForTest::TaskQueueForTest(absl::string_view name, Priority priority)
|
TaskQueueForTest::TaskQueueForTest(
|
||||||
: TaskQueue(
|
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> task_queue)
|
||||||
CreateDefaultTaskQueueFactory()->CreateTaskQueue(name, priority)) {}
|
: impl_(std::move(task_queue)) {}
|
||||||
|
|
||||||
|
TaskQueueForTest::TaskQueueForTest(absl::string_view name,
|
||||||
|
TaskQueueFactory::Priority priority)
|
||||||
|
: impl_(CreateDefaultTaskQueueFactory()->CreateTaskQueue(name, priority)) {}
|
||||||
|
|
||||||
|
TaskQueueForTest::~TaskQueueForTest() {
|
||||||
|
// Stop the TaskQueue before invalidating impl_ pointer so that tasks that
|
||||||
|
// race with the TaskQueueForTest destructor could still use TaskQueueForTest
|
||||||
|
// functions like 'IsCurrent'.
|
||||||
|
impl_.get_deleter()(impl_.get());
|
||||||
|
impl_.release();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|
|
@ -17,10 +17,9 @@
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "api/function_view.h"
|
#include "api/function_view.h"
|
||||||
#include "api/task_queue/task_queue_base.h"
|
#include "api/task_queue/task_queue_base.h"
|
||||||
|
#include "api/task_queue/task_queue_factory.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/event.h"
|
#include "rtc_base/event.h"
|
||||||
#include "rtc_base/task_queue.h"
|
|
||||||
#include "rtc_base/thread_annotations.h"
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
|
@ -38,14 +37,39 @@ inline void SendTask(TaskQueueBase* task_queue,
|
||||||
/*warn_after=*/TimeDelta::Seconds(10)));
|
/*warn_after=*/TimeDelta::Seconds(10)));
|
||||||
}
|
}
|
||||||
|
|
||||||
class RTC_LOCKABLE TaskQueueForTest : public rtc::TaskQueue {
|
class TaskQueueForTest {
|
||||||
public:
|
public:
|
||||||
using rtc::TaskQueue::TaskQueue;
|
explicit TaskQueueForTest(
|
||||||
explicit TaskQueueForTest(absl::string_view name = "TestQueue",
|
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> task_queue);
|
||||||
Priority priority = Priority::NORMAL);
|
explicit TaskQueueForTest(
|
||||||
|
absl::string_view name = "TestQueue",
|
||||||
|
TaskQueueFactory::Priority priority = TaskQueueFactory::Priority::NORMAL);
|
||||||
TaskQueueForTest(const TaskQueueForTest&) = delete;
|
TaskQueueForTest(const TaskQueueForTest&) = delete;
|
||||||
TaskQueueForTest& operator=(const TaskQueueForTest&) = delete;
|
TaskQueueForTest& operator=(const TaskQueueForTest&) = delete;
|
||||||
~TaskQueueForTest() = default;
|
~TaskQueueForTest();
|
||||||
|
|
||||||
|
bool IsCurrent() const { return impl_->IsCurrent(); }
|
||||||
|
|
||||||
|
// Returns non-owning pointer to the task queue implementation.
|
||||||
|
TaskQueueBase* Get() { return impl_.get(); }
|
||||||
|
|
||||||
|
void PostTask(
|
||||||
|
absl::AnyInvocable<void() &&> task,
|
||||||
|
const webrtc::Location& location = webrtc::Location::Current()) {
|
||||||
|
impl_->PostTask(std::move(task), location);
|
||||||
|
}
|
||||||
|
void PostDelayedTask(
|
||||||
|
absl::AnyInvocable<void() &&> task,
|
||||||
|
webrtc::TimeDelta delay,
|
||||||
|
const webrtc::Location& location = webrtc::Location::Current()) {
|
||||||
|
impl_->PostDelayedTask(std::move(task), delay, location);
|
||||||
|
}
|
||||||
|
void PostDelayedHighPrecisionTask(
|
||||||
|
absl::AnyInvocable<void() &&> task,
|
||||||
|
webrtc::TimeDelta delay,
|
||||||
|
const webrtc::Location& location = webrtc::Location::Current()) {
|
||||||
|
impl_->PostDelayedHighPrecisionTask(std::move(task), delay, location);
|
||||||
|
}
|
||||||
|
|
||||||
// A convenience, test-only method that blocks the current thread while
|
// A convenience, test-only method that blocks the current thread while
|
||||||
// a task executes on the task queue.
|
// a task executes on the task queue.
|
||||||
|
@ -61,6 +85,9 @@ class RTC_LOCKABLE TaskQueueForTest : public rtc::TaskQueue {
|
||||||
// that all already posted tasks on the queue get executed.
|
// that all already posted tasks on the queue get executed.
|
||||||
SendTask([]() {});
|
SendTask([]() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> impl_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|
|
@ -28,10 +28,10 @@
|
||||||
#include "rtc_base/time_utils.h"
|
#include "rtc_base/time_utils.h"
|
||||||
#include "test/gtest.h"
|
#include "test/gtest.h"
|
||||||
|
|
||||||
namespace rtc {
|
namespace webrtc {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
using ::webrtc::TimeDelta;
|
|
||||||
// Noop on all platforms except Windows, where it turns on high precision
|
// Noop on all platforms except Windows, where it turns on high precision
|
||||||
// multimedia timers which increases the precision of TimeMillis() while in
|
// multimedia timers which increases the precision of TimeMillis() while in
|
||||||
// scope.
|
// scope.
|
||||||
|
@ -51,12 +51,6 @@ class EnableHighResTimers {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
void CheckCurrent(Event* signal, TaskQueue* queue) {
|
|
||||||
EXPECT_TRUE(queue->IsCurrent());
|
|
||||||
if (signal)
|
|
||||||
signal->Set();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// This task needs to be run manually due to the slowness of some of our bots.
|
// This task needs to be run manually due to the slowness of some of our bots.
|
||||||
|
@ -65,14 +59,18 @@ TEST(TaskQueueTest, DISABLED_PostDelayedHighRes) {
|
||||||
EnableHighResTimers high_res_scope;
|
EnableHighResTimers high_res_scope;
|
||||||
|
|
||||||
static const char kQueueName[] = "PostDelayedHighRes";
|
static const char kQueueName[] = "PostDelayedHighRes";
|
||||||
Event event;
|
rtc::Event event;
|
||||||
webrtc::TaskQueueForTest queue(kQueueName, TaskQueue::Priority::HIGH);
|
TaskQueueForTest queue(kQueueName, TaskQueueFactory::Priority::HIGH);
|
||||||
|
|
||||||
uint32_t start = Time();
|
uint32_t start = rtc::TimeMillis();
|
||||||
queue.PostDelayedTask([&event, &queue] { CheckCurrent(&event, &queue); },
|
queue.PostDelayedTask(
|
||||||
TimeDelta::Millis(3));
|
[&event, &queue] {
|
||||||
EXPECT_TRUE(event.Wait(webrtc::TimeDelta::Seconds(1)));
|
EXPECT_TRUE(queue.IsCurrent());
|
||||||
uint32_t end = TimeMillis();
|
event.Set();
|
||||||
|
},
|
||||||
|
TimeDelta::Millis(3));
|
||||||
|
EXPECT_TRUE(event.Wait(TimeDelta::Seconds(1)));
|
||||||
|
uint32_t end = rtc::TimeMillis();
|
||||||
// These tests are a little relaxed due to how "powerful" our test bots can
|
// These tests are a little relaxed due to how "powerful" our test bots can
|
||||||
// be. Most recently we've seen windows bots fire the callback after 94-99ms,
|
// be. Most recently we've seen windows bots fire the callback after 94-99ms,
|
||||||
// which is why we have a little bit of leeway backwards as well.
|
// which is why we have a little bit of leeway backwards as well.
|
||||||
|
@ -80,4 +78,4 @@ TEST(TaskQueueTest, DISABLED_PostDelayedHighRes) {
|
||||||
EXPECT_NEAR(end - start, 3, 3u);
|
EXPECT_NEAR(end - start, 3, 3u);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace rtc
|
} // namespace webrtc
|
||||||
|
|
Loading…
Reference in a new issue