Skip to content

Commit a1ceae2

Browse files
Markus HandellWebRTC LUCI CQ
authored andcommitted
Implement support for Chrome task origin tracing. #3.5/4
This CL migrates unit tests to the new TaskQueueBase interface. Bug: chromium:1416199 Change-Id: Ic15c694b28eb67450ac99fdd56754de1246a4d95 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/295621 Commit-Queue: Markus Handell <[email protected]> Reviewed-by: Danil Chapovalov <[email protected]> Reviewed-by: Harald Alvestrand <[email protected]> Cr-Commit-Position: refs/heads/main@{#39434}
1 parent f6afb3f commit a1ceae2

14 files changed

+129
-102
lines changed

api/task_queue/test/mock_task_queue_base.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,22 @@ namespace webrtc {
2020

2121
class MockTaskQueueBase : public TaskQueueBase {
2222
public:
23+
using TaskQueueBase::PostDelayedTaskTraits;
24+
using TaskQueueBase::PostTaskTraits;
25+
2326
MOCK_METHOD(void, Delete, (), (override));
24-
MOCK_METHOD(void, PostTask, (absl::AnyInvocable<void() &&>), (override));
2527
MOCK_METHOD(void,
26-
PostDelayedTask,
27-
(absl::AnyInvocable<void() &&>, TimeDelta),
28+
PostTaskImpl,
29+
(absl::AnyInvocable<void() &&>,
30+
const PostTaskTraits&,
31+
const Location&),
2832
(override));
2933
MOCK_METHOD(void,
30-
PostDelayedHighPrecisionTask,
31-
(absl::AnyInvocable<void() &&>, TimeDelta),
34+
PostDelayedTaskImpl,
35+
(absl::AnyInvocable<void() &&>,
36+
TimeDelta,
37+
const PostDelayedTaskTraits&,
38+
const Location&),
3239
(override));
3340
};
3441

audio/audio_state_unittest.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ struct FakeAsyncAudioProcessingHelper {
4040
FakeTaskQueue() = default;
4141

4242
void Delete() override { delete this; }
43-
void PostTask(absl::AnyInvocable<void() &&> task) override {
43+
void PostTaskImpl(absl::AnyInvocable<void() &&> task,
44+
const PostTaskTraits& /*traits*/,
45+
const Location& /*location*/) override {
4446
std::move(task)();
4547
}
4648
};

audio/voip/test/audio_channel_unittest.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
1515
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
1616
#include "api/call/transport.h"
17+
#include "api/task_queue/task_queue_base.h"
1718
#include "api/task_queue/task_queue_factory.h"
1819
#include "audio/voip/test/mock_task_queue.h"
1920
#include "modules/audio_mixer/audio_mixer_impl.h"
@@ -31,6 +32,7 @@ using ::testing::Invoke;
3132
using ::testing::NiceMock;
3233
using ::testing::Return;
3334
using ::testing::Unused;
35+
using ::testing::WithArg;
3436

3537
constexpr uint64_t kStartTime = 123456789;
3638
constexpr uint32_t kLocalSsrc = 0xdeadc0de;
@@ -49,9 +51,9 @@ class AudioChannelTest : public ::testing::Test {
4951
decoder_factory_ = CreateBuiltinAudioDecoderFactory();
5052

5153
// By default, run the queued task immediately.
52-
ON_CALL(task_queue_, PostTask)
53-
.WillByDefault(
54-
[](absl::AnyInvocable<void() &&> task) { std::move(task)(); });
54+
ON_CALL(task_queue_, PostTaskImpl)
55+
.WillByDefault(WithArg<0>(
56+
[](absl::AnyInvocable<void() &&> task) { std::move(task)(); }));
5557
}
5658

5759
void SetUp() override { audio_channel_ = CreateAudioChannel(kLocalSsrc); }

net/dcsctp/timer/task_queue_timeout_test.cc

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
namespace dcsctp {
2121
namespace {
2222
using ::testing::_;
23+
using ::testing::Field;
2324
using ::testing::MockFunction;
2425
using ::testing::NiceMock;
2526

@@ -118,7 +119,14 @@ TEST_F(TaskQueueTimeoutTest, KilledBeforeExpired) {
118119

119120
TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToLow) {
120121
NiceMock<webrtc::MockTaskQueueBase> mock_task_queue;
121-
EXPECT_CALL(mock_task_queue, PostDelayedTask(_, _));
122+
EXPECT_CALL(
123+
mock_task_queue,
124+
PostDelayedTaskImpl(
125+
_, _,
126+
Field(
127+
&webrtc::MockTaskQueueBase::PostDelayedTaskTraits::high_precision,
128+
false),
129+
_));
122130
TaskQueueTimeoutFactory factory(
123131
mock_task_queue, []() { return TimeMs(1337); },
124132
[](TimeoutID timeout_id) {});
@@ -129,7 +137,14 @@ TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToLow) {
129137

130138
TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToHigh) {
131139
NiceMock<webrtc::MockTaskQueueBase> mock_task_queue;
132-
EXPECT_CALL(mock_task_queue, PostDelayedHighPrecisionTask(_, _));
140+
EXPECT_CALL(
141+
mock_task_queue,
142+
PostDelayedTaskImpl(
143+
_, _,
144+
Field(
145+
&webrtc::MockTaskQueueBase::PostDelayedTaskTraits::high_precision,
146+
true),
147+
_));
133148
TaskQueueTimeoutFactory factory(
134149
mock_task_queue, []() { return TimeMs(1337); },
135150
[](TimeoutID timeout_id) {});
@@ -140,7 +155,14 @@ TEST(TaskQueueTimeoutWithMockTaskQueueTest, CanSetTimeoutPrecisionToHigh) {
140155

141156
TEST(TaskQueueTimeoutWithMockTaskQueueTest, TimeoutPrecisionIsLowByDefault) {
142157
NiceMock<webrtc::MockTaskQueueBase> mock_task_queue;
143-
EXPECT_CALL(mock_task_queue, PostDelayedTask(_, _));
158+
EXPECT_CALL(
159+
mock_task_queue,
160+
PostDelayedTaskImpl(
161+
_, _,
162+
Field(
163+
&webrtc::MockTaskQueueBase::PostDelayedTaskTraits::high_precision,
164+
false),
165+
_));
144166
TaskQueueTimeoutFactory factory(
145167
mock_task_queue, []() { return TimeMs(1337); },
146168
[](TimeoutID timeout_id) {});

rtc_base/task_utils/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ if (rtc_include_tests) {
3636
"..:rtc_task_queue",
3737
"..:task_queue_for_test",
3838
"../../api/task_queue",
39+
"../../api/task_queue/test:mock_task_queue_base",
3940
"../../api/units:time_delta",
4041
"../../api/units:timestamp",
4142
"../../system_wrappers:system_wrappers",

rtc_base/task_utils/repeating_task_unittest.cc

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
#include "absl/functional/any_invocable.h"
1717
#include "api/task_queue/task_queue_base.h"
18+
#include "api/task_queue/test/mock_task_queue_base.h"
1819
#include "api/units/time_delta.h"
1920
#include "api/units/timestamp.h"
2021
#include "rtc_base/event.h"
@@ -32,6 +33,7 @@ using ::testing::Invoke;
3233
using ::testing::MockFunction;
3334
using ::testing::NiceMock;
3435
using ::testing::Return;
36+
using ::testing::WithArg;
3537

3638
constexpr TimeDelta kTimeout = TimeDelta::Millis(1000);
3739

@@ -41,21 +43,10 @@ class MockClosure {
4143
MOCK_METHOD(void, Delete, ());
4244
};
4345

44-
class MockTaskQueue : public TaskQueueBase {
46+
class MockTaskQueue : public MockTaskQueueBase {
4547
public:
4648
MockTaskQueue() : task_queue_setter_(this) {}
4749

48-
MOCK_METHOD(void, Delete, (), (override));
49-
MOCK_METHOD(void, PostTask, (absl::AnyInvocable<void() &&>), (override));
50-
MOCK_METHOD(void,
51-
PostDelayedTask,
52-
(absl::AnyInvocable<void() &&>, TimeDelta),
53-
(override));
54-
MOCK_METHOD(void,
55-
PostDelayedHighPrecisionTask,
56-
(absl::AnyInvocable<void() &&>, TimeDelta),
57-
(override));
58-
5950
private:
6051
CurrentTaskQueueSetter task_queue_setter_;
6152
};
@@ -67,23 +58,22 @@ class FakeTaskQueue : public TaskQueueBase {
6758

6859
void Delete() override {}
6960

70-
void PostTask(absl::AnyInvocable<void() &&> task) override {
61+
void PostTaskImpl(absl::AnyInvocable<void() &&> task,
62+
const PostTaskTraits& /*traits*/,
63+
const Location& /*location*/) override {
7164
last_task_ = std::move(task);
7265
last_precision_ = absl::nullopt;
7366
last_delay_ = TimeDelta::Zero();
7467
}
7568

76-
void PostDelayedTask(absl::AnyInvocable<void() &&> task,
77-
TimeDelta delay) override {
69+
void PostDelayedTaskImpl(absl::AnyInvocable<void() &&> task,
70+
TimeDelta delay,
71+
const PostDelayedTaskTraits& traits,
72+
const Location& /*location*/) override {
7873
last_task_ = std::move(task);
79-
last_precision_ = TaskQueueBase::DelayPrecision::kLow;
80-
last_delay_ = delay;
81-
}
82-
83-
void PostDelayedHighPrecisionTask(absl::AnyInvocable<void() &&> task,
84-
TimeDelta delay) override {
85-
last_task_ = std::move(task);
86-
last_precision_ = TaskQueueBase::DelayPrecision::kHigh;
74+
last_precision_ = traits.high_precision
75+
? TaskQueueBase::DelayPrecision::kHigh
76+
: TaskQueueBase::DelayPrecision::kLow;
8777
last_delay_ = delay;
8878
}
8979

@@ -339,8 +329,10 @@ TEST(RepeatingTaskTest, ClockIntegration) {
339329
SimulatedClock clock(Timestamp::Zero());
340330

341331
NiceMock<MockTaskQueue> task_queue;
342-
ON_CALL(task_queue, PostDelayedTask)
343-
.WillByDefault([&](absl::AnyInvocable<void() &&> task, TimeDelta delay) {
332+
ON_CALL(task_queue, PostDelayedTaskImpl)
333+
.WillByDefault([&](absl::AnyInvocable<void() &&> task, TimeDelta delay,
334+
const MockTaskQueue::PostDelayedTaskTraits&,
335+
const Location&) {
344336
EXPECT_EQ(delay, expected_delay);
345337
delayed_task = std::move(task);
346338
});
@@ -368,10 +360,10 @@ TEST(RepeatingTaskTest, CanBeStoppedAfterTaskQueueDeletedTheRepeatingTask) {
368360
absl::AnyInvocable<void() &&> repeating_task;
369361

370362
MockTaskQueue task_queue;
371-
EXPECT_CALL(task_queue, PostDelayedTask)
372-
.WillOnce([&](absl::AnyInvocable<void() &&> task, TimeDelta delay) {
363+
EXPECT_CALL(task_queue, PostDelayedTaskImpl)
364+
.WillOnce(WithArg<0>([&](absl::AnyInvocable<void() &&> task) {
373365
repeating_task = std::move(task);
374-
});
366+
}));
375367

376368
RepeatingTaskHandle handle =
377369
RepeatingTaskHandle::DelayedStart(&task_queue, TimeDelta::Millis(100),

rtc_base/unique_id_generator_unittest.cc

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@ class FakeTaskQueue : public webrtc::TaskQueueBase {
3333
FakeTaskQueue() : task_queue_setter_(this) {}
3434

3535
void Delete() override {}
36-
void PostTask(absl::AnyInvocable<void() &&> task) override {}
37-
void PostDelayedTask(absl::AnyInvocable<void() &&> task,
38-
webrtc::TimeDelta delay) override {}
39-
void PostDelayedHighPrecisionTask(absl::AnyInvocable<void() &&> task,
40-
webrtc::TimeDelta delay) override {}
36+
void PostTaskImpl(absl::AnyInvocable<void() &&> task,
37+
const PostTaskTraits& traits,
38+
const webrtc::Location& location) override {}
39+
void PostDelayedTaskImpl(absl::AnyInvocable<void() &&> task,
40+
webrtc::TimeDelta delay,
41+
const PostDelayedTaskTraits& traits,
42+
const webrtc::Location& location) override {}
4143

4244
private:
4345
CurrentTaskQueueSetter task_queue_setter_;

test/time_controller/external_time_controller.cc

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,24 @@ class ExternalTimeController::TaskQueueWrapper : public TaskQueueBase {
3333
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> base)
3434
: parent_(parent), base_(std::move(base)) {}
3535

36-
void PostTask(absl::AnyInvocable<void() &&> task) override {
36+
void PostTaskImpl(absl::AnyInvocable<void() &&> task,
37+
const PostTaskTraits& traits,
38+
const Location& location) override {
3739
parent_->UpdateTime();
3840
base_->PostTask(TaskWrapper(std::move(task)));
3941
parent_->ScheduleNext();
4042
}
4143

42-
void PostDelayedTask(absl::AnyInvocable<void() &&> task,
43-
TimeDelta delay) override {
44+
void PostDelayedTaskImpl(absl::AnyInvocable<void() &&> task,
45+
TimeDelta delay,
46+
const PostDelayedTaskTraits& traits,
47+
const Location& location) override {
4448
parent_->UpdateTime();
45-
base_->PostDelayedTask(TaskWrapper(std::move(task)), delay);
46-
parent_->ScheduleNext();
47-
}
48-
49-
void PostDelayedHighPrecisionTask(absl::AnyInvocable<void() &&> task,
50-
TimeDelta delay) override {
51-
parent_->UpdateTime();
52-
base_->PostDelayedHighPrecisionTask(TaskWrapper(std::move(task)), delay);
49+
if (traits.high_precision) {
50+
base_->PostDelayedHighPrecisionTask(TaskWrapper(std::move(task)), delay);
51+
} else {
52+
base_->PostDelayedTask(TaskWrapper(std::move(task)), delay);
53+
}
5354
parent_->ScheduleNext();
5455
}
5556

test/time_controller/simulated_task_queue.cc

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,19 @@ void SimulatedTaskQueue::RunReady(Timestamp at_time) {
6666
}
6767
}
6868

69-
void SimulatedTaskQueue::PostTask(absl::AnyInvocable<void() &&> task) {
69+
void SimulatedTaskQueue::PostTaskImpl(absl::AnyInvocable<void() &&> task,
70+
const PostTaskTraits& /*traits*/,
71+
const Location& /*location*/) {
7072
MutexLock lock(&lock_);
7173
ready_tasks_.push_back(std::move(task));
7274
next_run_time_ = Timestamp::MinusInfinity();
7375
}
7476

75-
void SimulatedTaskQueue::PostDelayedTask(absl::AnyInvocable<void() &&> task,
76-
TimeDelta delay) {
77-
PostDelayedHighPrecisionTask(std::move(task), delay);
78-
}
79-
80-
void SimulatedTaskQueue::PostDelayedHighPrecisionTask(
77+
void SimulatedTaskQueue::PostDelayedTaskImpl(
8178
absl::AnyInvocable<void() &&> task,
82-
TimeDelta delay) {
79+
TimeDelta delay,
80+
const PostDelayedTaskTraits& /*traits*/,
81+
const Location& /*location*/) {
8382
MutexLock lock(&lock_);
8483
Timestamp target_time = handler_->CurrentTime() + delay;
8584
delayed_tasks_[target_time].push_back(std::move(task));

test/time_controller/simulated_task_queue.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,13 @@ class SimulatedTaskQueue : public TaskQueueBase,
4040

4141
// TaskQueueBase interface
4242
void Delete() override;
43-
void PostTask(absl::AnyInvocable<void() &&> task) override;
44-
void PostDelayedTask(absl::AnyInvocable<void() &&> task,
45-
TimeDelta delay) override;
46-
void PostDelayedHighPrecisionTask(absl::AnyInvocable<void() &&> task,
47-
TimeDelta delay) override;
43+
void PostTaskImpl(absl::AnyInvocable<void() &&> task,
44+
const PostTaskTraits& traits,
45+
const Location& location) override;
46+
void PostDelayedTaskImpl(absl::AnyInvocable<void() &&> task,
47+
TimeDelta delay,
48+
const PostDelayedTaskTraits& traits,
49+
const Location& location) override;
4850

4951
private:
5052
sim_time_impl::SimulatedTimeControllerImpl* const handler_;

0 commit comments

Comments
 (0)